| 12345678910111213141516171819202122232425262728293031323334 |
- """Stable ID helpers for Atlas.
- These functions keep entity and claim identifiers deterministic across the app.
- The same stable hash should be used for:
- - atlas_id / entity IRI fragments
- - claim IDs
- - claim IRIs in Turtle exports
- Semantics live in triples; the IDs themselves stay opaque.
- """
- from __future__ import annotations
- import hashlib
- def stable_hash(*parts: str, length: int = 16) -> str:
- material = "|".join((part or "").strip() for part in parts)
- return hashlib.sha1(material.encode("utf-8")).hexdigest()[:length]
- def claim_hash(
- subject: str,
- predicate: str,
- object_value: str,
- layer: str,
- status: str = "active",
- created_at: str | None = None,
- ) -> str:
- return stable_hash(subject, predicate, object_value, layer, status, created_at or "")
- def entity_hash(*parts: str, length: int = 16) -> str:
- return stable_hash(*parts, length=length)
|