summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/litestar/stores/registry.py
diff options
context:
space:
mode:
authorcyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
committercyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
commit6d7ba58f880be618ade07f8ea080fe8c4bf8a896 (patch)
treeb1c931051ffcebd2bd9d61d98d6233ffa289bbce /venv/lib/python3.11/site-packages/litestar/stores/registry.py
parent4f884c9abc32990b4061a1bb6997b4b37e58ea0b (diff)
venv
Diffstat (limited to 'venv/lib/python3.11/site-packages/litestar/stores/registry.py')
-rw-r--r--venv/lib/python3.11/site-packages/litestar/stores/registry.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/litestar/stores/registry.py b/venv/lib/python3.11/site-packages/litestar/stores/registry.py
new file mode 100644
index 0000000..11a08c2
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/litestar/stores/registry.py
@@ -0,0 +1,64 @@
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Callable
+
+if TYPE_CHECKING:
+ from .base import Store
+
+
+from .memory import MemoryStore
+
+__all__ = ("StoreRegistry",)
+
+
+def default_default_factory(name: str) -> Store:
+ return MemoryStore()
+
+
+class StoreRegistry:
+ """Registry for :class:`Store <.base.Store>` instances."""
+
+ __slots__ = ("_stores", "_default_factory")
+
+ def __init__(
+ self, stores: dict[str, Store] | None = None, default_factory: Callable[[str], Store] = default_default_factory
+ ) -> None:
+ """Initialize ``StoreRegistry``.
+
+ Args:
+ stores: A dictionary mapping store names to stores, used to initialize the registry
+ default_factory: A callable used by :meth:`StoreRegistry.get` to provide a store, if the requested name hasn't
+ been registered yet. This callable receives the requested name and should return a
+ :class:`Store <.base.Store>` instance.
+ """
+ self._stores = stores or {}
+ self._default_factory = default_factory
+
+ def register(self, name: str, store: Store, allow_override: bool = False) -> None:
+ """Register a new :class:`Store <.base.Store>`.
+
+ Args:
+ name: Name to register the store under
+ store: The store to register
+ allow_override: Whether to allow overriding an existing store of the same name
+
+ Raises:
+ ValueError: If a store is already registered under this name and ``override`` is not ``True``
+ """
+ if not allow_override and name in self._stores:
+ raise ValueError(f"Store with the name {name!r} already exists")
+ self._stores[name] = store
+
+ def get(self, name: str) -> Store:
+ """Get a store registered under ``name``. If no such store is registered, create a store using the default
+ factory with ``name`` and register the returned store under ``name``.
+
+ Args:
+ name: Name of the store
+
+ Returns:
+ A :class:`Store <.base.Store>`
+ """
+ if not self._stores.get(name):
+ self._stores[name] = self._default_factory(name)
+ return self._stores[name]