generated from coulomb/repo-seed
Markitect schema-validation integration use case and fixture for Markdown proxy documents
This commit is contained in:
@@ -18,6 +18,7 @@ from kontextual_engine.core import (
|
||||
mapping_digest,
|
||||
MetadataRecord,
|
||||
MetadataSchema,
|
||||
MetadataSchemaAssignment,
|
||||
OperationContext,
|
||||
PolicyDecision,
|
||||
RelationshipTargetKind,
|
||||
@@ -176,6 +177,57 @@ class AssetRegistryService:
|
||||
)
|
||||
return AssetChangeResult(asset, version, event, decision)
|
||||
|
||||
def register_metadata_schema(
|
||||
self,
|
||||
schema: MetadataSchema,
|
||||
context: OperationContext,
|
||||
) -> MetadataSchema:
|
||||
decision = self._authorize(
|
||||
context,
|
||||
"metadata_schema.register",
|
||||
f"metadata_schema:{schema.schema_id}",
|
||||
resource_metadata={"schema_id": schema.schema_id, "version": schema.version},
|
||||
)
|
||||
saved = self.repository.save_metadata_schema(schema)
|
||||
self._audit(
|
||||
"metadata_schema.register",
|
||||
f"metadata_schema:{schema.schema_id}",
|
||||
AuditOutcome.SUCCESS,
|
||||
context,
|
||||
decision,
|
||||
details={"schema_id": schema.schema_id, "version": schema.version},
|
||||
)
|
||||
return saved
|
||||
|
||||
def assign_metadata_schema(
|
||||
self,
|
||||
assignment: MetadataSchemaAssignment,
|
||||
context: OperationContext,
|
||||
) -> MetadataSchemaAssignment:
|
||||
self.repository.get_metadata_schema(assignment.schema_id)
|
||||
decision = self._authorize(
|
||||
context,
|
||||
"metadata_schema.assign",
|
||||
f"metadata_schema_assignment:{assignment.assignment_id}",
|
||||
resource_metadata={"schema_id": assignment.schema_id},
|
||||
)
|
||||
saved = self.repository.save_metadata_schema_assignment(assignment)
|
||||
self._audit(
|
||||
"metadata_schema.assign",
|
||||
f"metadata_schema_assignment:{assignment.assignment_id}",
|
||||
AuditOutcome.SUCCESS,
|
||||
context,
|
||||
decision,
|
||||
details={"schema_id": assignment.schema_id, "assignment_id": assignment.assignment_id},
|
||||
)
|
||||
return saved
|
||||
|
||||
def list_metadata_schemas(self) -> list[MetadataSchema]:
|
||||
return self.repository.list_metadata_schemas()
|
||||
|
||||
def list_metadata_schema_assignments(self) -> list[MetadataSchemaAssignment]:
|
||||
return self.repository.list_metadata_schema_assignments()
|
||||
|
||||
def add_representation(
|
||||
self,
|
||||
asset_id: str,
|
||||
@@ -417,9 +469,23 @@ class AssetRegistryService:
|
||||
classification: Classification,
|
||||
records: list[MetadataRecord],
|
||||
) -> None:
|
||||
for schema in self.metadata_schemas:
|
||||
if schema.applies_to(classification):
|
||||
schema.validate_or_raise(records)
|
||||
for schema in self._metadata_schemas_for(classification):
|
||||
schema.validate_or_raise(records)
|
||||
|
||||
def _metadata_schemas_for(self, classification: Classification) -> tuple[MetadataSchema, ...]:
|
||||
selected: list[MetadataSchema] = [
|
||||
schema for schema in self.metadata_schemas if schema.applies_to(classification)
|
||||
]
|
||||
seen = {schema.schema_id for schema in selected}
|
||||
for assignment in self.repository.list_metadata_schema_assignments():
|
||||
if not assignment.applies_to(classification):
|
||||
continue
|
||||
schema = self.repository.get_metadata_schema(assignment.schema_id)
|
||||
if schema.schema_id in seen or not schema.applies_to(classification):
|
||||
continue
|
||||
selected.append(schema)
|
||||
seen.add(schema.schema_id)
|
||||
return tuple(selected)
|
||||
|
||||
def _idempotent_lookup(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user