From 88968e7a22f9ebb4751dd0d5d71bc92a9c980caa Mon Sep 17 00:00:00 2001 From: Insaf Nureev Date: Wed, 18 Sep 2024 12:10:14 +0300 Subject: [PATCH] Add BaseSort logic --- pydantic_filters/drivers/sqlalchemy/_main.py | 2 +- pydantic_filters/sort/__init__.py | 4 ++-- pydantic_filters/sort/_base.py | 10 ++++++++ pydantic_filters/sort/_meta.py | 25 -------------------- pydantic_filters/sort/{misc.py => _types.py} | 4 ---- pydantic_filters/sort/base.py | 13 ---------- 6 files changed, 13 insertions(+), 45 deletions(-) create mode 100644 pydantic_filters/sort/_base.py delete mode 100644 pydantic_filters/sort/_meta.py rename pydantic_filters/sort/{misc.py => _types.py} (72%) delete mode 100644 pydantic_filters/sort/base.py diff --git a/pydantic_filters/drivers/sqlalchemy/_main.py b/pydantic_filters/drivers/sqlalchemy/_main.py index 38c6434..3780cf1 100644 --- a/pydantic_filters/drivers/sqlalchemy/_main.py +++ b/pydantic_filters/drivers/sqlalchemy/_main.py @@ -54,7 +54,7 @@ def append_sort_to_statement( sort: _Sort, ) -> sa.Select[_T]: - if sort.sort_by is None or sort.sort_by_order is None: + if sort.sort_by is None: return statement try: diff --git a/pydantic_filters/sort/__init__.py b/pydantic_filters/sort/__init__.py index a306e32..355f926 100644 --- a/pydantic_filters/sort/__init__.py +++ b/pydantic_filters/sort/__init__.py @@ -1,2 +1,2 @@ -from .base import BaseSort -from .misc import SortByOrder +from ._base import BaseSort +from ._types import SortByOrder diff --git a/pydantic_filters/sort/_base.py b/pydantic_filters/sort/_base.py new file mode 100644 index 0000000..0f2e2a5 --- /dev/null +++ b/pydantic_filters/sort/_base.py @@ -0,0 +1,10 @@ +from typing import Optional + +from pydantic import BaseModel, Field + +from ._types import SortByOrder + + +class BaseSort(BaseModel): + sort_by: Optional[str] = None + sort_by_order: SortByOrder = Field(SortByOrder.asc) diff --git a/pydantic_filters/sort/_meta.py b/pydantic_filters/sort/_meta.py deleted file mode 100644 index 17e5ccc..0000000 --- a/pydantic_filters/sort/_meta.py +++ /dev/null @@ -1,25 +0,0 @@ -from typing import TYPE_CHECKING, Any, Dict, Tuple, Type, cast - -from pydantic._internal._model_construction import ModelMetaclass as _ModelMetaclass # noqa: PLC2701 -from pydantic.fields import FieldInfo - -if TYPE_CHECKING: - from .base import BaseSort - - -class SortMetaclass(_ModelMetaclass): - - def __new__( - mcs, # noqa: N804 - name: str, - bases: Tuple[Type[Any], ...], - namespace: Dict[str, Any], - **kwargs, # noqa: ANN003 - ) -> Type["BaseSort"]: - sort_class = cast(Type["BaseSort"], super().__new__(mcs, name, bases, namespace, **kwargs)) - - for field_name, field_info in sort_class.model_fields.items(): - if field_info.is_required(): - namespace[field_name] = FieldInfo.merge_field_infos(field_info, default=None) - - return cast(Type["BaseSort"], super().__new__(mcs, name, bases, namespace, **kwargs)) diff --git a/pydantic_filters/sort/misc.py b/pydantic_filters/sort/_types.py similarity index 72% rename from pydantic_filters/sort/misc.py rename to pydantic_filters/sort/_types.py index 2af4b77..3a157af 100644 --- a/pydantic_filters/sort/misc.py +++ b/pydantic_filters/sort/_types.py @@ -1,9 +1,5 @@ from enum import Enum -__all__ = ( - "SortByOrder", -) - class SortByOrder(str, Enum): asc = "asc" diff --git a/pydantic_filters/sort/base.py b/pydantic_filters/sort/base.py deleted file mode 100644 index 890ffd0..0000000 --- a/pydantic_filters/sort/base.py +++ /dev/null @@ -1,13 +0,0 @@ -from pydantic import BaseModel, Field - -from ._meta import SortMetaclass -from .misc import SortByOrder - -__all__ = ( - "BaseSort", -) - - -class BaseSort(BaseModel, metaclass=SortMetaclass): - sort_by: str - sort_by_order: SortByOrder = Field(SortByOrder.asc)