generated from coulomb/repo-seed
Markitect schema-validation integration use case and fixture for Markdown proxy documents
This commit is contained in:
@@ -20,6 +20,7 @@ from .metadata import (
|
||||
MetadataFieldDefinition,
|
||||
MetadataRecord,
|
||||
MetadataSchema,
|
||||
MetadataSchemaAssignment,
|
||||
MetadataValidationIssue,
|
||||
MetadataValueType,
|
||||
Sensitivity,
|
||||
@@ -64,6 +65,7 @@ __all__ = [
|
||||
"MetadataFieldDefinition",
|
||||
"MetadataRecord",
|
||||
"MetadataSchema",
|
||||
"MetadataSchemaAssignment",
|
||||
"MetadataValidationIssue",
|
||||
"MetadataValueType",
|
||||
"NormalizedDocument",
|
||||
|
||||
@@ -290,6 +290,63 @@ class MetadataSchema:
|
||||
)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class MetadataSchemaAssignment:
|
||||
schema_id: str
|
||||
asset_types: tuple[str, ...] = ()
|
||||
sensitivities: tuple[Sensitivity | str, ...] = ()
|
||||
lifecycle_states: tuple[LifecycleState | str, ...] = ()
|
||||
policy_ref: str | None = None
|
||||
priority: int = 100
|
||||
metadata: dict[str, Any] = field(default_factory=dict)
|
||||
assignment_id: str = field(default_factory=lambda: new_id("metadata_schema_assignment"))
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
object.__setattr__(self, "asset_types", tuple(self.asset_types))
|
||||
object.__setattr__(self, "sensitivities", tuple(Sensitivity(item) for item in self.sensitivities))
|
||||
object.__setattr__(
|
||||
self,
|
||||
"lifecycle_states",
|
||||
tuple(LifecycleState(item) for item in self.lifecycle_states),
|
||||
)
|
||||
|
||||
def applies_to(self, classification: "Classification") -> bool:
|
||||
if self.asset_types and classification.asset_type not in self.asset_types:
|
||||
return False
|
||||
if self.sensitivities and classification.sensitivity not in self.sensitivities:
|
||||
return False
|
||||
if self.lifecycle_states and classification.lifecycle not in self.lifecycle_states:
|
||||
return False
|
||||
return True
|
||||
|
||||
def to_dict(self) -> dict[str, Any]:
|
||||
return compact_dict(
|
||||
{
|
||||
"assignment_id": self.assignment_id,
|
||||
"schema_id": self.schema_id,
|
||||
"asset_types": list(self.asset_types),
|
||||
"sensitivities": [item.value for item in self.sensitivities],
|
||||
"lifecycle_states": [item.value for item in self.lifecycle_states],
|
||||
"policy_ref": self.policy_ref,
|
||||
"priority": self.priority,
|
||||
"metadata": dict(self.metadata),
|
||||
}
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, data: dict[str, Any]) -> "MetadataSchemaAssignment":
|
||||
return cls(
|
||||
assignment_id=data["assignment_id"],
|
||||
schema_id=data["schema_id"],
|
||||
asset_types=tuple(data.get("asset_types", [])),
|
||||
sensitivities=tuple(Sensitivity(item) for item in data.get("sensitivities", [])),
|
||||
lifecycle_states=tuple(LifecycleState(item) for item in data.get("lifecycle_states", [])),
|
||||
policy_ref=data.get("policy_ref"),
|
||||
priority=int(data.get("priority", 100)),
|
||||
metadata=dict(data.get("metadata", {})),
|
||||
)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Classification:
|
||||
asset_type: str
|
||||
|
||||
Reference in New Issue
Block a user