generated from coulomb/repo-seed
metadata schema validation
This commit is contained in:
@@ -17,6 +17,7 @@ from kontextual_engine.core import (
|
||||
LifecycleState,
|
||||
mapping_digest,
|
||||
MetadataRecord,
|
||||
MetadataSchema,
|
||||
OperationContext,
|
||||
PolicyDecision,
|
||||
RelationshipTargetKind,
|
||||
@@ -49,9 +50,11 @@ class AssetRegistryService:
|
||||
repository: AssetRegistryRepository,
|
||||
*,
|
||||
policy_gateway: PolicyGateway | None = None,
|
||||
metadata_schemas: list[MetadataSchema] | tuple[MetadataSchema, ...] | None = None,
|
||||
) -> None:
|
||||
self.repository = repository
|
||||
self.policy_gateway = policy_gateway or AllowAllPolicyGateway()
|
||||
self.metadata_schemas = tuple(metadata_schemas or ())
|
||||
|
||||
def create_asset(
|
||||
self,
|
||||
@@ -79,6 +82,7 @@ class AssetRegistryService:
|
||||
existing = self._idempotent_lookup("asset.create", idempotency_key, request_hash)
|
||||
if existing:
|
||||
return self._asset_change_from_idempotency(existing)
|
||||
self._validate_metadata_records(classification, list(metadata_records or []))
|
||||
|
||||
asset = KnowledgeAsset.create(
|
||||
title,
|
||||
@@ -145,6 +149,10 @@ class AssetRegistryService:
|
||||
asset = self.repository.get_asset(asset_id)
|
||||
decision = self._authorize(context, "asset.metadata.add", f"asset:{asset.id}")
|
||||
next_sequence = self._next_sequence(asset.id)
|
||||
self._validate_metadata_records(
|
||||
asset.classification,
|
||||
self.repository.list_metadata_records(asset.id) + [record],
|
||||
)
|
||||
self.repository.save_metadata_record(asset.id, record)
|
||||
version = AssetVersion(
|
||||
asset_id=asset.id,
|
||||
@@ -404,6 +412,15 @@ class AssetRegistryService:
|
||||
versions = self.repository.list_versions(asset_id)
|
||||
return len(versions) + 1
|
||||
|
||||
def _validate_metadata_records(
|
||||
self,
|
||||
classification: Classification,
|
||||
records: list[MetadataRecord],
|
||||
) -> None:
|
||||
for schema in self.metadata_schemas:
|
||||
if schema.applies_to(classification):
|
||||
schema.validate_or_raise(records)
|
||||
|
||||
def _idempotent_lookup(
|
||||
self,
|
||||
operation: str,
|
||||
|
||||
Reference in New Issue
Block a user