Architecture core for Knowledge Assets
This commit is contained in:
parent
f6f3116ae7
commit
d7e38606d2
14 changed files with 1113 additions and 0 deletions
43
src/kontextual_engine/core/primitives.py
Normal file
43
src/kontextual_engine/core/primitives.py
Normal 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
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue