Source code for medkit.core.prov_store
from __future__ import annotations
__all__ = ["ProvStore", "create_prov_store"]
from typing import TYPE_CHECKING, runtime_checkable
from typing_extensions import Literal, Protocol
if TYPE_CHECKING:
from medkit.core.data_item import IdentifiableDataItem
from medkit.core.operation_desc import OperationDescription
[docs]
@runtime_checkable
class ProvStore(Protocol):
def store_data_item(self, data_item: IdentifiableDataItem):
pass
def get_data_item(self, data_item_id: str) -> IdentifiableDataItem:
pass
def store_op_desc(self, op_desc: OperationDescription):
pass
def get_op_desc(self, operation_id: str) -> OperationDescription:
pass
class _DictStore:
def __init__(self) -> None:
self._data_items_by_id: dict[str, IdentifiableDataItem] = {}
self._op_descs_by_id: dict[str, OperationDescription] = {}
def store_data_item(self, data_item: IdentifiableDataItem):
self._data_items_by_id[data_item.uid] = data_item
def get_data_item(self, data_item_id: str) -> IdentifiableDataItem:
return self._data_items_by_id[data_item_id]
def store_op_desc(self, op_desc: OperationDescription):
self._op_descs_by_id[op_desc.uid] = op_desc
def get_op_desc(self, operation_id: str) -> OperationDescription:
return self._op_descs_by_id[operation_id]
StoreType = Literal["dict"]
default_stores = {"dict": _DictStore}
def create_prov_store(store_type: StoreType = "dict"):
return default_stores.get(store_type, "dict")()