Source code for contree_sdk.store.memory

"""Volatile tree stores. SQLite's memory engine enforces the same invariants."""

from __future__ import annotations

import time

from contree_sdk.store.base import AsyncStore, SyncStore
from contree_sdk.store.sqlite import SyncSQLiteStore
from contree_sdk.store.tree import DEFAULT_PAGE_SIZE, Node, NodeId, Page, SessionInfo
from contree_sdk.store.ttl import Clock


[docs] class SyncMemoryStore(SyncStore): def __init__(self, *, clock: Clock = time.time) -> None: self.memory = SyncSQLiteStore(":memory:", clock=clock)
[docs] def create_session(self, session_id: str, *, kind: str = "session", ttl: float | None = None) -> SessionInfo: return self.memory.create_session(session_id, kind=kind, ttl=ttl)
[docs] def get_session(self, session_id: str) -> SessionInfo | None: return self.memory.get_session(session_id)
[docs] def set_session_ttl(self, session_id: str, ttl: float | None) -> SessionInfo: return self.memory.set_session_ttl(session_id, ttl)
[docs] def delete_session(self, session_id: str) -> bool: return self.memory.delete_session(session_id)
[docs] def list_sessions( self, *, kind: str | None = None, prefix: str = "", limit: int = DEFAULT_PAGE_SIZE, cursor: str | None = None ) -> Page[SessionInfo]: return self.memory.list_sessions(kind=kind, prefix=prefix, limit=limit, cursor=cursor)
[docs] def append(self, session_id: str, node: Node) -> None: return self.memory.append(session_id, node)
[docs] def get_node(self, session_id: str, node_id: NodeId) -> Node: return self.memory.get_node(session_id, node_id)
[docs] def get_nodes(self, session_id: str, node_ids: tuple[NodeId, ...]) -> tuple[Node | None, ...]: return self.memory.get_nodes(session_id, node_ids)
[docs] def list_nodes( self, session_id: str, *, kind: str | None = None, limit: int = DEFAULT_PAGE_SIZE, cursor: str | None = None ) -> Page[Node]: return self.memory.list_nodes(session_id, kind=kind, limit=limit, cursor=cursor)
[docs] def list_children( self, session_id: str, parent_id: NodeId | None, *, kind: str | None = None, limit: int = DEFAULT_PAGE_SIZE, cursor: str | None = None, ) -> Page[Node]: return self.memory.list_children(session_id, parent_id, kind=kind, limit=limit, cursor=cursor)
[docs] def list_history( self, session_id: str, from_node: NodeId, *, limit: int = DEFAULT_PAGE_SIZE, cursor: str | None = None ) -> Page[Node]: return self.memory.list_history(session_id, from_node, limit=limit, cursor=cursor)
[docs] def close(self) -> None: return self.memory.close()
[docs] class AsyncMemoryStore(AsyncStore): def __init__(self, *, clock: Clock = time.time) -> None: self.memory = SyncMemoryStore(clock=clock)
[docs] async def create_session(self, session_id: str, *, kind: str = "session", ttl: float | None = None) -> SessionInfo: return self.memory.create_session(session_id, kind=kind, ttl=ttl)
[docs] async def get_session(self, session_id: str) -> SessionInfo | None: return self.memory.get_session(session_id)
[docs] async def set_session_ttl(self, session_id: str, ttl: float | None) -> SessionInfo: return self.memory.set_session_ttl(session_id, ttl)
[docs] async def delete_session(self, session_id: str) -> bool: return self.memory.delete_session(session_id)
[docs] async def list_sessions( self, *, kind: str | None = None, prefix: str = "", limit: int = DEFAULT_PAGE_SIZE, cursor: str | None = None ) -> Page[SessionInfo]: return self.memory.list_sessions(kind=kind, prefix=prefix, limit=limit, cursor=cursor)
[docs] async def append(self, session_id: str, node: Node) -> None: return self.memory.append(session_id, node)
[docs] async def get_node(self, session_id: str, node_id: NodeId) -> Node: return self.memory.get_node(session_id, node_id)
[docs] async def get_nodes(self, session_id: str, node_ids: tuple[NodeId, ...]) -> tuple[Node | None, ...]: return self.memory.get_nodes(session_id, node_ids)
[docs] async def list_nodes( self, session_id: str, *, kind: str | None = None, limit: int = DEFAULT_PAGE_SIZE, cursor: str | None = None ) -> Page[Node]: return self.memory.list_nodes(session_id, kind=kind, limit=limit, cursor=cursor)
[docs] async def list_children( self, session_id: str, parent_id: NodeId | None, *, kind: str | None = None, limit: int = DEFAULT_PAGE_SIZE, cursor: str | None = None, ) -> Page[Node]: return self.memory.list_children(session_id, parent_id, kind=kind, limit=limit, cursor=cursor)
[docs] async def list_history( self, session_id: str, from_node: NodeId, *, limit: int = DEFAULT_PAGE_SIZE, cursor: str | None = None ) -> Page[Node]: return self.memory.list_history(session_id, from_node, limit=limit, cursor=cursor)
[docs] async def close(self) -> None: return self.memory.close()