def _get_ping_data_and_dependencies_with_default_metadata()

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