Source code for medkit.core.prov_store
__all__ = ["ProvStore", "create_prov_store"]
from typing import Dict
from typing_extensions import runtime_checkable, Literal, Protocol
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")()