diff options
author | cyfraeviolae <cyfraeviolae> | 2024-04-03 03:10:44 -0400 |
---|---|---|
committer | cyfraeviolae <cyfraeviolae> | 2024-04-03 03:10:44 -0400 |
commit | 6d7ba58f880be618ade07f8ea080fe8c4bf8a896 (patch) | |
tree | b1c931051ffcebd2bd9d61d98d6233ffa289bbce /venv/lib/python3.11/site-packages/litestar/repository/abc | |
parent | 4f884c9abc32990b4061a1bb6997b4b37e58ea0b (diff) |
venv
Diffstat (limited to 'venv/lib/python3.11/site-packages/litestar/repository/abc')
-rw-r--r-- | venv/lib/python3.11/site-packages/litestar/repository/abc/__init__.py | 7 | ||||
-rw-r--r-- | venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/__init__.cpython-311.pyc | bin | 0 -> 373 bytes | |||
-rw-r--r-- | venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/_async.cpython-311.pyc | bin | 0 -> 13618 bytes | |||
-rw-r--r-- | venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/_sync.cpython-311.pyc | bin | 0 -> 13523 bytes | |||
-rw-r--r-- | venv/lib/python3.11/site-packages/litestar/repository/abc/_async.py | 303 | ||||
-rw-r--r-- | venv/lib/python3.11/site-packages/litestar/repository/abc/_sync.py | 305 |
6 files changed, 615 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/litestar/repository/abc/__init__.py b/venv/lib/python3.11/site-packages/litestar/repository/abc/__init__.py new file mode 100644 index 0000000..def6bb4 --- /dev/null +++ b/venv/lib/python3.11/site-packages/litestar/repository/abc/__init__.py @@ -0,0 +1,7 @@ +from ._async import AbstractAsyncRepository +from ._sync import AbstractSyncRepository + +__all__ = ( + "AbstractAsyncRepository", + "AbstractSyncRepository", +) diff --git a/venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/__init__.cpython-311.pyc Binary files differnew file mode 100644 index 0000000..710a74b --- /dev/null +++ b/venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/__init__.cpython-311.pyc diff --git a/venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/_async.cpython-311.pyc b/venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/_async.cpython-311.pyc Binary files differnew file mode 100644 index 0000000..24217cc --- /dev/null +++ b/venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/_async.cpython-311.pyc diff --git a/venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/_sync.cpython-311.pyc b/venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/_sync.cpython-311.pyc Binary files differnew file mode 100644 index 0000000..7a69407 --- /dev/null +++ b/venv/lib/python3.11/site-packages/litestar/repository/abc/__pycache__/_sync.cpython-311.pyc diff --git a/venv/lib/python3.11/site-packages/litestar/repository/abc/_async.py b/venv/lib/python3.11/site-packages/litestar/repository/abc/_async.py new file mode 100644 index 0000000..85ca139 --- /dev/null +++ b/venv/lib/python3.11/site-packages/litestar/repository/abc/_async.py @@ -0,0 +1,303 @@ +from __future__ import annotations + +from abc import ABCMeta, abstractmethod +from typing import TYPE_CHECKING, Any, Generic, TypeVar + +from litestar.repository.exceptions import NotFoundError + +if TYPE_CHECKING: + from litestar.repository.filters import FilterTypes + +T = TypeVar("T") +CollectionT = TypeVar("CollectionT") + + +class AbstractAsyncRepository(Generic[T], metaclass=ABCMeta): + """Interface for persistent data interaction.""" + + model_type: type[T] + """Type of object represented by the repository.""" + id_attribute: Any = "id" + """Name of the primary identifying attribute on :attr:`model_type`.""" + + def __init__(self, **kwargs: Any) -> None: + """Repository constructors accept arbitrary kwargs.""" + super().__init__(**kwargs) + + @abstractmethod + async def add(self, data: T) -> T: + """Add ``data`` to the collection. + + Args: + data: Instance to be added to the collection. + + Returns: + The added instance. + """ + + @abstractmethod + async def add_many(self, data: list[T]) -> list[T]: + """Add multiple ``data`` to the collection. + + Args: + data: Instances to be added to the collection. + + Returns: + The added instances. + """ + + @abstractmethod + async def count(self, *filters: FilterTypes, **kwargs: Any) -> int: + """Get the count of records returned by a query. + + Args: + *filters: Types for specific filtering operations. + **kwargs: Instance attribute value filters. + + Returns: + The count of instances + """ + + @abstractmethod + async def delete(self, item_id: Any) -> T: + """Delete instance identified by ``item_id``. + + Args: + item_id: Identifier of instance to be deleted. + + Returns: + The deleted instance. + + Raises: + NotFoundError: If no instance found identified by ``item_id``. + """ + + @abstractmethod + async def delete_many(self, item_ids: list[Any]) -> list[T]: + """Delete multiple instances identified by list of IDs ``item_ids``. + + Args: + item_ids: list of Identifiers to be deleted. + + Returns: + The deleted instances. + """ + + @abstractmethod + async def exists(self, *filters: FilterTypes, **kwargs: Any) -> bool: + """Return true if the object specified by ``kwargs`` exists. + + Args: + *filters: Types for specific filtering operations. + **kwargs: Identifier of the instance to be retrieved. + + Returns: + True if the instance was found. False if not found. + + """ + + @abstractmethod + async def get(self, item_id: Any, **kwargs: Any) -> T: + """Get instance identified by ``item_id``. + + Args: + item_id: Identifier of the instance to be retrieved. + **kwargs: Additional arguments + + Returns: + The retrieved instance. + + Raises: + NotFoundError: If no instance found identified by ``item_id``. + """ + + @abstractmethod + async def get_one(self, **kwargs: Any) -> T: + """Get an instance specified by the ``kwargs`` filters if it exists. + + Args: + **kwargs: Instance attribute value filters. + + Returns: + The retrieved instance. + + Raises: + NotFoundError: If no instance found identified by ``kwargs``. + """ + + @abstractmethod + async def get_or_create(self, **kwargs: Any) -> tuple[T, bool]: + """Get an instance specified by the ``kwargs`` filters if it exists or create it. + + Args: + **kwargs: Instance attribute value filters. + + Returns: + A tuple that includes the retrieved or created instance, and a boolean on whether the record was created or not + """ + + @abstractmethod + async def get_one_or_none(self, **kwargs: Any) -> T | None: + """Get an instance if it exists or None. + + Args: + **kwargs: Instance attribute value filters. + + Returns: + The retrieved instance or None. + """ + + @abstractmethod + async def update(self, data: T) -> T: + """Update instance with the attribute values present on ``data``. + + Args: + data: An instance that should have a value for :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` that exists in the + collection. + + Returns: + The updated instance. + + Raises: + NotFoundError: If no instance found with same identifier as ``data``. + """ + + @abstractmethod + async def update_many(self, data: list[T]) -> list[T]: + """Update multiple instances with the attribute values present on instances in ``data``. + + Args: + data: A list of instance that should have a value for :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` that exists in the + collection. + + Returns: + a list of the updated instances. + + Raises: + NotFoundError: If no instance found with same identifier as ``data``. + """ + + @abstractmethod + async def upsert(self, data: T) -> T: + """Update or create instance. + + Updates instance with the attribute values present on ``data``, or creates a new instance if + one doesn't exist. + + Args: + data: Instance to update existing, or be created. Identifier used to determine if an + existing instance exists is the value of an attribute on ``data`` named as value of + :attr:`id_attribute <AbstractAsyncRepository.id_attribute>`. + + Returns: + The updated or created instance. + + Raises: + NotFoundError: If no instance found with same identifier as ``data``. + """ + + @abstractmethod + async def upsert_many(self, data: list[T]) -> list[T]: + """Update or create multiple instances. + + Update instances with the attribute values present on ``data``, or create a new instance if + one doesn't exist. + + Args: + data: Instances to update or created. Identifier used to determine if an + existing instance exists is the value of an attribute on ``data`` named as value of + :attr:`id_attribute <AbstractAsyncRepository.id_attribute>`. + + Returns: + The updated or created instances. + + Raises: + NotFoundError: If no instance found with same identifier as ``data``. + """ + + @abstractmethod + async def list_and_count(self, *filters: FilterTypes, **kwargs: Any) -> tuple[list[T], int]: + """List records with total count. + + Args: + *filters: Types for specific filtering operations. + **kwargs: Instance attribute value filters. + + Returns: + a tuple containing The list of instances, after filtering applied, and a count of records returned by query, ignoring pagination. + """ + + @abstractmethod + async def list(self, *filters: FilterTypes, **kwargs: Any) -> list[T]: + """Get a list of instances, optionally filtered. + + Args: + *filters: filters for specific filtering operations + **kwargs: Instance attribute value filters. + + Returns: + The list of instances, after filtering applied + """ + + @abstractmethod + def filter_collection_by_kwargs(self, collection: CollectionT, /, **kwargs: Any) -> CollectionT: + """Filter the collection by kwargs. + + Has ``AND`` semantics where multiple kwargs name/value pairs are provided. + + Args: + collection: the objects to be filtered + **kwargs: key/value pairs such that objects remaining in the collection after filtering + have the property that their attribute named ``key`` has value equal to ``value``. + + + Returns: + The filtered objects + + Raises: + RepositoryError: if a named attribute doesn't exist on :attr:`model_type <AbstractAsyncRepository.model_type>`. + """ + + @staticmethod + def check_not_found(item_or_none: T | None) -> T: + """Raise :class:`NotFoundError` if ``item_or_none`` is ``None``. + + Args: + item_or_none: Item (:class:`T <T>`) to be tested for existence. + + Returns: + The item, if it exists. + """ + if item_or_none is None: + raise NotFoundError("No item found when one was expected") + return item_or_none + + @classmethod + def get_id_attribute_value(cls, item: T | type[T], id_attribute: str | None = None) -> Any: + """Get value of attribute named as :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` on ``item``. + + Args: + item: Anything that should have an attribute named as :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` value. + id_attribute: Allows customization of the unique identifier to use for model fetching. + Defaults to `None`, but can reference any surrogate or candidate key for the table. + + Returns: + The value of attribute on ``item`` named as :attr:`id_attribute <AbstractAsyncRepository.id_attribute>`. + """ + return getattr(item, id_attribute if id_attribute is not None else cls.id_attribute) + + @classmethod + def set_id_attribute_value(cls, item_id: Any, item: T, id_attribute: str | None = None) -> T: + """Return the ``item`` after the ID is set to the appropriate attribute. + + Args: + item_id: Value of ID to be set on instance + item: Anything that should have an attribute named as :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` value. + id_attribute: Allows customization of the unique identifier to use for model fetching. + Defaults to `None`, but can reference any surrogate or candidate key for the table. + + Returns: + Item with ``item_id`` set to :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` + """ + setattr(item, id_attribute if id_attribute is not None else cls.id_attribute, item_id) + return item diff --git a/venv/lib/python3.11/site-packages/litestar/repository/abc/_sync.py b/venv/lib/python3.11/site-packages/litestar/repository/abc/_sync.py new file mode 100644 index 0000000..d667fc2 --- /dev/null +++ b/venv/lib/python3.11/site-packages/litestar/repository/abc/_sync.py @@ -0,0 +1,305 @@ +# Do not edit this file directly. It has been autogenerated from +# litestar/repository/abc/_async.py +from __future__ import annotations + +from abc import ABCMeta, abstractmethod +from typing import TYPE_CHECKING, Any, Generic, TypeVar + +from litestar.repository.exceptions import NotFoundError + +if TYPE_CHECKING: + from litestar.repository.filters import FilterTypes + +T = TypeVar("T") +CollectionT = TypeVar("CollectionT") + + +class AbstractSyncRepository(Generic[T], metaclass=ABCMeta): + """Interface for persistent data interaction.""" + + model_type: type[T] + """Type of object represented by the repository.""" + id_attribute: Any = "id" + """Name of the primary identifying attribute on :attr:`model_type`.""" + + def __init__(self, **kwargs: Any) -> None: + """Repository constructors accept arbitrary kwargs.""" + super().__init__(**kwargs) + + @abstractmethod + def add(self, data: T) -> T: + """Add ``data`` to the collection. + + Args: + data: Instance to be added to the collection. + + Returns: + The added instance. + """ + + @abstractmethod + def add_many(self, data: list[T]) -> list[T]: + """Add multiple ``data`` to the collection. + + Args: + data: Instances to be added to the collection. + + Returns: + The added instances. + """ + + @abstractmethod + def count(self, *filters: FilterTypes, **kwargs: Any) -> int: + """Get the count of records returned by a query. + + Args: + *filters: Types for specific filtering operations. + **kwargs: Instance attribute value filters. + + Returns: + The count of instances + """ + + @abstractmethod + def delete(self, item_id: Any) -> T: + """Delete instance identified by ``item_id``. + + Args: + item_id: Identifier of instance to be deleted. + + Returns: + The deleted instance. + + Raises: + NotFoundError: If no instance found identified by ``item_id``. + """ + + @abstractmethod + def delete_many(self, item_ids: list[Any]) -> list[T]: + """Delete multiple instances identified by list of IDs ``item_ids``. + + Args: + item_ids: list of Identifiers to be deleted. + + Returns: + The deleted instances. + """ + + @abstractmethod + def exists(self, *filters: FilterTypes, **kwargs: Any) -> bool: + """Return true if the object specified by ``kwargs`` exists. + + Args: + *filters: Types for specific filtering operations. + **kwargs: Identifier of the instance to be retrieved. + + Returns: + True if the instance was found. False if not found. + + """ + + @abstractmethod + def get(self, item_id: Any, **kwargs: Any) -> T: + """Get instance identified by ``item_id``. + + Args: + item_id: Identifier of the instance to be retrieved. + **kwargs: Additional arguments + + Returns: + The retrieved instance. + + Raises: + NotFoundError: If no instance found identified by ``item_id``. + """ + + @abstractmethod + def get_one(self, **kwargs: Any) -> T: + """Get an instance specified by the ``kwargs`` filters if it exists. + + Args: + **kwargs: Instance attribute value filters. + + Returns: + The retrieved instance. + + Raises: + NotFoundError: If no instance found identified by ``kwargs``. + """ + + @abstractmethod + def get_or_create(self, **kwargs: Any) -> tuple[T, bool]: + """Get an instance specified by the ``kwargs`` filters if it exists or create it. + + Args: + **kwargs: Instance attribute value filters. + + Returns: + A tuple that includes the retrieved or created instance, and a boolean on whether the record was created or not + """ + + @abstractmethod + def get_one_or_none(self, **kwargs: Any) -> T | None: + """Get an instance if it exists or None. + + Args: + **kwargs: Instance attribute value filters. + + Returns: + The retrieved instance or None. + """ + + @abstractmethod + def update(self, data: T) -> T: + """Update instance with the attribute values present on ``data``. + + Args: + data: An instance that should have a value for :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` that exists in the + collection. + + Returns: + The updated instance. + + Raises: + NotFoundError: If no instance found with same identifier as ``data``. + """ + + @abstractmethod + def update_many(self, data: list[T]) -> list[T]: + """Update multiple instances with the attribute values present on instances in ``data``. + + Args: + data: A list of instance that should have a value for :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` that exists in the + collection. + + Returns: + a list of the updated instances. + + Raises: + NotFoundError: If no instance found with same identifier as ``data``. + """ + + @abstractmethod + def upsert(self, data: T) -> T: + """Update or create instance. + + Updates instance with the attribute values present on ``data``, or creates a new instance if + one doesn't exist. + + Args: + data: Instance to update existing, or be created. Identifier used to determine if an + existing instance exists is the value of an attribute on ``data`` named as value of + :attr:`id_attribute <AbstractAsyncRepository.id_attribute>`. + + Returns: + The updated or created instance. + + Raises: + NotFoundError: If no instance found with same identifier as ``data``. + """ + + @abstractmethod + def upsert_many(self, data: list[T]) -> list[T]: + """Update or create multiple instances. + + Update instances with the attribute values present on ``data``, or create a new instance if + one doesn't exist. + + Args: + data: Instances to update or created. Identifier used to determine if an + existing instance exists is the value of an attribute on ``data`` named as value of + :attr:`id_attribute <AbstractAsyncRepository.id_attribute>`. + + Returns: + The updated or created instances. + + Raises: + NotFoundError: If no instance found with same identifier as ``data``. + """ + + @abstractmethod + def list_and_count(self, *filters: FilterTypes, **kwargs: Any) -> tuple[list[T], int]: + """List records with total count. + + Args: + *filters: Types for specific filtering operations. + **kwargs: Instance attribute value filters. + + Returns: + a tuple containing The list of instances, after filtering applied, and a count of records returned by query, ignoring pagination. + """ + + @abstractmethod + def list(self, *filters: FilterTypes, **kwargs: Any) -> list[T]: + """Get a list of instances, optionally filtered. + + Args: + *filters: filters for specific filtering operations + **kwargs: Instance attribute value filters. + + Returns: + The list of instances, after filtering applied + """ + + @abstractmethod + def filter_collection_by_kwargs(self, collection: CollectionT, /, **kwargs: Any) -> CollectionT: + """Filter the collection by kwargs. + + Has ``AND`` semantics where multiple kwargs name/value pairs are provided. + + Args: + collection: the objects to be filtered + **kwargs: key/value pairs such that objects remaining in the collection after filtering + have the property that their attribute named ``key`` has value equal to ``value``. + + + Returns: + The filtered objects + + Raises: + RepositoryError: if a named attribute doesn't exist on :attr:`model_type <AbstractAsyncRepository.model_type>`. + """ + + @staticmethod + def check_not_found(item_or_none: T | None) -> T: + """Raise :class:`NotFoundError` if ``item_or_none`` is ``None``. + + Args: + item_or_none: Item (:class:`T <T>`) to be tested for existence. + + Returns: + The item, if it exists. + """ + if item_or_none is None: + raise NotFoundError("No item found when one was expected") + return item_or_none + + @classmethod + def get_id_attribute_value(cls, item: T | type[T], id_attribute: str | None = None) -> Any: + """Get value of attribute named as :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` on ``item``. + + Args: + item: Anything that should have an attribute named as :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` value. + id_attribute: Allows customization of the unique identifier to use for model fetching. + Defaults to `None`, but can reference any surrogate or candidate key for the table. + + Returns: + The value of attribute on ``item`` named as :attr:`id_attribute <AbstractAsyncRepository.id_attribute>`. + """ + return getattr(item, id_attribute if id_attribute is not None else cls.id_attribute) + + @classmethod + def set_id_attribute_value(cls, item_id: Any, item: T, id_attribute: str | None = None) -> T: + """Return the ``item`` after the ID is set to the appropriate attribute. + + Args: + item_id: Value of ID to be set on instance + item: Anything that should have an attribute named as :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` value. + id_attribute: Allows customization of the unique identifier to use for model fetching. + Defaults to `None`, but can reference any surrogate or candidate key for the table. + + Returns: + Item with ``item_id`` set to :attr:`id_attribute <AbstractAsyncRepository.id_attribute>` + """ + setattr(item, id_attribute if id_attribute is not None else cls.id_attribute, item_id) + return item |