Source code for ralph.policy.models._artifacts_policy

"""ArtifactsPolicy Pydantic model."""

from typing import Self

from pydantic import Field, model_validator

from ralph.policy.models._artifact_contract import ArtifactContract
from ralph.policy.models._frozen_policy_model import _FrozenPolicyModel


[docs] class ArtifactsPolicy(_FrozenPolicyModel): """Top-level artifacts.toml policy document.""" artifacts: dict[str, ArtifactContract] = Field( default_factory=dict, description="All artifact contracts keyed by artifact name", ) @model_validator(mode="after") def no_duplicate_artifact_types(self) -> Self: seen: dict[tuple[str, str], str] = {} for name, contract in self.artifacts.items(): key = (contract.drain, contract.artifact_type) if key in seen: raise ValueError( f"Artifacts '{name}' and '{seen[key]}' both declare " f"drain='{contract.drain}', artifact_type='{contract.artifact_type}'" ) seen[key] = name return self