Skip to content

Manifest formatter

Formatter for a manifest.json.

ManifestFormatter

Bases: Formatter

Formatter to generate manifest.json with score metadata.

Source code in src/dbt_score/formatters/manifest_formatter.py
class ManifestFormatter(Formatter):
    """Formatter to generate manifest.json with score metadata."""

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        """Instantiate a manifest formatter."""
        self._model_scores: dict[str, Score] = {}
        super().__init__(*args, **kwargs)

    def model_evaluated(
        self, model: Model, results: ModelResultsType, score: Score
    ) -> None:
        """Callback when a model has been evaluated."""
        self._model_scores[model.unique_id] = score

    def project_evaluated(self, score: Score) -> None:
        """Callback when a project has been evaluated."""
        manifest = copy.copy(self._manifest_loader.raw_manifest)
        for model_id, model_score in self._model_scores.items():
            manifest["nodes"][model_id]["meta"]["score"] = model_score.value
            manifest["nodes"][model_id]["meta"]["badge"] = model_score.badge
        print(json.dumps(manifest, indent=2))

__init__(*args, **kwargs)

Instantiate a manifest formatter.

Source code in src/dbt_score/formatters/manifest_formatter.py
def __init__(self, *args: Any, **kwargs: Any) -> None:
    """Instantiate a manifest formatter."""
    self._model_scores: dict[str, Score] = {}
    super().__init__(*args, **kwargs)

model_evaluated(model, results, score)

Callback when a model has been evaluated.

Source code in src/dbt_score/formatters/manifest_formatter.py
def model_evaluated(
    self, model: Model, results: ModelResultsType, score: Score
) -> None:
    """Callback when a model has been evaluated."""
    self._model_scores[model.unique_id] = score

project_evaluated(score)

Callback when a project has been evaluated.

Source code in src/dbt_score/formatters/manifest_formatter.py
def project_evaluated(self, score: Score) -> None:
    """Callback when a project has been evaluated."""
    manifest = copy.copy(self._manifest_loader.raw_manifest)
    for model_id, model_score in self._model_scores.items():
        manifest["nodes"][model_id]["meta"]["score"] = model_score.value
        manifest["nodes"][model_id]["meta"]["badge"] = model_score.badge
    print(json.dumps(manifest, indent=2))