Architecture core for Knowledge Assets

This commit is contained in:
2026-05-05 21:30:39 +02:00
parent f6f3116ae7
commit d7e38606d2
14 changed files with 1113 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
"""Small deterministic primitives used by the domain core."""
from __future__ import annotations
import hashlib
import json
import uuid
from datetime import datetime, timezone
from typing import Any
def utc_now() -> datetime:
return datetime.now(timezone.utc)
def new_id(prefix: str) -> str:
return f"{prefix}_{uuid.uuid4().hex}"
def stable_json_dumps(value: Any) -> str:
return json.dumps(value, sort_keys=True, separators=(",", ":"), default=str)
def content_digest(content: str | bytes) -> str:
data = content.encode("utf-8") if isinstance(content, str) else content
return "sha256:" + hashlib.sha256(data).hexdigest()
def mapping_digest(value: Any) -> str:
return content_digest(stable_json_dumps(value))
def compact_dict(data: dict[str, Any]) -> dict[str, Any]:
return {key: value for key, value in data.items() if value not in (None, {}, [])}
def datetime_to_str(value: datetime | None) -> str | None:
return value.isoformat() if value else None
def datetime_from_str(value: str | None) -> datetime | None:
return datetime.fromisoformat(value) if value else None