in mozilla_schema_generator/glean_ping.py [0:0]
def _get_ping_data_and_dependencies_with_default_metadata(self) -> Dict[str, Dict]:
# Get the ping data with the pipeline metadata
ping_data = self._get_ping_data_without_dependencies()
# The ping endpoint for the dependency pings does not include any repo defined
# moz_pipeline_metadata_defaults so they need to be applied here.
# 1. Get repo and pipeline default metadata.
repos = self.get_repos()
current_repo = next((x for x in repos if x.get("app_id") == self.app_id), {})
default_metadata = current_repo.get("moz_pipeline_metadata_defaults", {})
# 2. Apply the default metadata to each dependency defined ping.
# Apply app-level metadata to pings defined in dependencies
app_metadata = current_repo.get("moz_pipeline_metadata", {})
for dependency in self.get_dependencies():
dependency_pings = self._get_dependency_pings(dependency)
for dependency_ping in dependency_pings.values():
# Although it is counter intuitive to apply the default metadata on top of the
# existing dependency ping metadata it does set the repo specific value for
# bq_dataset_family instead of using the dependency id for the bq_dataset_family
# value.
GleanPing.apply_default_metadata(
dependency_ping.get("moz_pipeline_metadata"),
copy.deepcopy(default_metadata),
)
# app-level ping properties take priority over the app defaults
metadata_override = app_metadata.get(dependency_ping["name"])
if metadata_override is not None:
GleanPing.apply_default_metadata(
dependency_ping.get("moz_pipeline_metadata"), metadata_override
)
ping_data.update(dependency_pings)
return ping_data