85 lines
3.1 KiB
Python
85 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
from .persistence import PersistenceBackend
|
|
|
|
|
|
class PersistenceService:
|
|
"""Shared persistence service that owns the backend lifecycle."""
|
|
|
|
def __init__(self, backend: PersistenceBackend):
|
|
self._backend = backend
|
|
|
|
@property
|
|
def backend(self) -> PersistenceBackend:
|
|
return self._backend
|
|
|
|
async def initialize(self) -> None:
|
|
await self._backend.initialize()
|
|
|
|
def view(self, scope: str) -> "ScopedPersistenceView":
|
|
return ScopedPersistenceView(self._backend, scope=scope)
|
|
|
|
async def close(self) -> None:
|
|
await self._backend.close()
|
|
|
|
|
|
class ScopedPersistenceView:
|
|
"""Thin scope-bound persistence view used by project runtimes."""
|
|
|
|
def __init__(self, backend: PersistenceBackend, *, scope: str):
|
|
self._backend = backend
|
|
self.scope = scope
|
|
|
|
@property
|
|
def backend(self) -> PersistenceBackend:
|
|
return self._backend
|
|
|
|
async def load_nodes(
|
|
self,
|
|
collection_id: str,
|
|
*,
|
|
exclude_node_types: Optional[List[str]] = None,
|
|
) -> List[Dict[str, Any]]:
|
|
return await self._backend.load_nodes(
|
|
collection_id,
|
|
self.scope,
|
|
exclude_node_types=exclude_node_types,
|
|
)
|
|
|
|
async def save_node(self, collection_id: str, node) -> None:
|
|
await self._backend.save_node(collection_id, self.scope, node)
|
|
|
|
async def save_nodes_bulk(self, collection_id: str, nodes) -> None:
|
|
await self._backend.save_nodes_bulk(collection_id, self.scope, nodes)
|
|
|
|
async def delete_node(self, collection_id: str, node_id: str) -> None:
|
|
await self._backend.delete_node(collection_id, self.scope, node_id)
|
|
|
|
async def delete_nodes_bulk(self, collection_id: str, node_ids: List[str]) -> None:
|
|
await self._backend.delete_nodes_bulk(collection_id, self.scope, node_ids)
|
|
|
|
async def load_bindings(self, node_type: str) -> List[Dict[str, Any]]:
|
|
return await self._backend.load_bindings(self.scope, node_type)
|
|
|
|
async def save_binding(self, node_type: str, local_id: str, payload_dict: Dict[str, Any]) -> None:
|
|
await self._backend.save_binding(self.scope, node_type, local_id, payload_dict)
|
|
|
|
async def save_bindings_bulk(self, node_type: str, bindings: Dict[str, Optional[str]]) -> None:
|
|
await self._backend.save_bindings_bulk(self.scope, node_type, bindings)
|
|
|
|
async def delete_binding(self, node_type: str, local_id: str) -> None:
|
|
await self._backend.delete_binding(self.scope, node_type, local_id)
|
|
|
|
async def delete_bindings_bulk(self, node_type: str, local_ids: List[str]) -> None:
|
|
await self._backend.delete_bindings_bulk(self.scope, node_type, local_ids)
|
|
|
|
async def load_bind_data_id_overrides(self, node_type: str) -> Dict[str, Optional[str]]:
|
|
return await self._backend.load_bind_data_id_overrides(node_type, self.scope)
|
|
|
|
async def delete_scope_node_types(self, *, node_types: List[str]) -> None:
|
|
await self._backend.delete_scope_node_types(scope=self.scope, node_types=node_types)
|
|
|
|
async def close(self) -> None:
|
|
return None |