01

Sample Code

facet-crud.py
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