Facet CRUD Operations
Create, read, update, and delete typed facets
01
Sample Code
from dataclasses import dataclass, field
from uuid import uuid4
from psp.platform.facets import FacetKey, FacetPayload, InMemoryFacetStore
@dataclass
class TodoPreferencesFacet:
schema_version: int = 1
default_priority: str = "medium"
show_completed: bool = False
default_tags: list[str] = field(default_factory=list)
def to_dict(self) -> dict:
return {
"schema_version": self.schema_version,
"default_priority": self.default_priority,
"show_completed": self.show_completed,
"default_tags": self.default_tags,
}
store = InMemoryFacetStore()
user_id = uuid4()
# Create a facet
key = FacetKey("person", user_id, "todos.preferences")
prefs = TodoPreferencesFacet(default_priority="high", default_tags=["work"])
store.upsert(key, prefs)
# Read it back
loaded = store.get(key, TodoPreferencesFacet)
print(f"Priority: {loaded.default_priority}") # high
print(f"Tags: {loaded.default_tags}") # ['work']
# Update it
prefs.show_completed = True
store.upsert(key, prefs)
# Delete it
deleted = store.delete(key)
print(f"Deleted: {deleted}") # True