fastapi-sqlalchemy-toolkit 0.8.0__tar.gz → 0.8.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/PKG-INFO +1 -1
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/model_manager.py +28 -11
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/pyproject.toml +1 -1
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.flake8 +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.github/workflows/docker-test.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.github/workflows/python-publish.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.gitignore +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.pylintrc +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/AUTHORS +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/LICENSE +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/Makefile +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/README.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/benefits.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/db_validation.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/extension.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/filtering.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/index.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/benefits.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/db_validation.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/extension.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/filtering.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/index.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/sorting.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/transactions.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/usage.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/utils.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/sorting.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/transactions.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/usage.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/utils.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/.env +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/api.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/deps.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/endpoints/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/endpoints/child.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/config.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/db.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/main.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/managers.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/models.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/schemas.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/filters.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/ordering.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/utils.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/mkdocs.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/poetry.lock +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/requirements/base.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/requirements/docs.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/requirements/lint.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/requirements/test.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/Dockerfile +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/conftest.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/db.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/docker-compose.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/models.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/test_public_methods.py +0 -0
|
@@ -26,6 +26,7 @@ from sqlalchemy.orm.attributes import InstrumentedAttribute
|
|
|
26
26
|
from sqlalchemy.orm.relationships import Relationship
|
|
27
27
|
from sqlalchemy.sql import Select
|
|
28
28
|
from sqlalchemy.sql.elements import UnaryExpression
|
|
29
|
+
from sqlalchemy.sql.expression import BinaryExpression, ColumnElement
|
|
29
30
|
from sqlalchemy.sql.functions import Function
|
|
30
31
|
from sqlalchemy.sql.schema import ScalarElementColumnDefault
|
|
31
32
|
from sqlalchemy.sql.selectable import Exists
|
|
@@ -524,7 +525,8 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
524
525
|
self,
|
|
525
526
|
session: AsyncSession,
|
|
526
527
|
order_by: InstrumentedAttribute | UnaryExpression | None = ...,
|
|
527
|
-
filter_expressions: dict[InstrumentedAttribute | Callable, Any]
|
|
528
|
+
filter_expressions: dict[InstrumentedAttribute | Callable | ColumnElement, Any]
|
|
529
|
+
| None = ...,
|
|
528
530
|
nullable_filter_expressions: (
|
|
529
531
|
dict[InstrumentedAttribute | Callable, Any] | None
|
|
530
532
|
) = ...,
|
|
@@ -540,7 +542,8 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
540
542
|
self,
|
|
541
543
|
session: AsyncSession,
|
|
542
544
|
order_by: InstrumentedAttribute | UnaryExpression | None = ...,
|
|
543
|
-
filter_expressions: dict[InstrumentedAttribute | Callable, Any]
|
|
545
|
+
filter_expressions: dict[InstrumentedAttribute | Callable | ColumnElement, Any]
|
|
546
|
+
| None = ...,
|
|
544
547
|
nullable_filter_expressions: (
|
|
545
548
|
dict[InstrumentedAttribute | Callable, Any] | None
|
|
546
549
|
) = ...,
|
|
@@ -555,7 +558,8 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
555
558
|
self,
|
|
556
559
|
session: AsyncSession,
|
|
557
560
|
order_by: InstrumentedAttribute | UnaryExpression | None = None,
|
|
558
|
-
filter_expressions: dict[InstrumentedAttribute | Callable, Any]
|
|
561
|
+
filter_expressions: dict[InstrumentedAttribute | Callable | ColumnElement, Any]
|
|
562
|
+
| None = None,
|
|
559
563
|
nullable_filter_expressions: (
|
|
560
564
|
dict[InstrumentedAttribute | Callable, Any] | None
|
|
561
565
|
) = None,
|
|
@@ -618,7 +622,10 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
618
622
|
)
|
|
619
623
|
|
|
620
624
|
for filter_expression, value in filter_expressions.items():
|
|
621
|
-
if isinstance(
|
|
625
|
+
if isinstance(
|
|
626
|
+
filter_expression,
|
|
627
|
+
InstrumentedAttribute | Function | BinaryExpression | ColumnElement,
|
|
628
|
+
):
|
|
622
629
|
stmt = stmt.filter(filter_expression == value)
|
|
623
630
|
else:
|
|
624
631
|
stmt = stmt.filter(filter_expression(value))
|
|
@@ -716,7 +723,8 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
716
723
|
self,
|
|
717
724
|
session: AsyncSession,
|
|
718
725
|
order_by: InstrumentedAttribute | UnaryExpression | None = ...,
|
|
719
|
-
filter_expressions: dict[InstrumentedAttribute | Callable, Any]
|
|
726
|
+
filter_expressions: dict[InstrumentedAttribute | Callable | ColumnElement, Any]
|
|
727
|
+
| None = ...,
|
|
720
728
|
nullable_filter_expressions: (
|
|
721
729
|
dict[InstrumentedAttribute | Callable, Any] | None
|
|
722
730
|
) = ...,
|
|
@@ -735,7 +743,8 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
735
743
|
self,
|
|
736
744
|
session: AsyncSession,
|
|
737
745
|
order_by: InstrumentedAttribute | UnaryExpression | None = ...,
|
|
738
|
-
filter_expressions: dict[InstrumentedAttribute | Callable, Any]
|
|
746
|
+
filter_expressions: dict[InstrumentedAttribute | Callable | ColumnElement, Any]
|
|
747
|
+
| None = ...,
|
|
739
748
|
nullable_filter_expressions: (
|
|
740
749
|
dict[InstrumentedAttribute | Callable, Any] | None
|
|
741
750
|
) = ...,
|
|
@@ -753,7 +762,8 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
753
762
|
self,
|
|
754
763
|
session: AsyncSession,
|
|
755
764
|
order_by: InstrumentedAttribute | UnaryExpression | None = None,
|
|
756
|
-
filter_expressions: dict[InstrumentedAttribute | Callable, Any]
|
|
765
|
+
filter_expressions: dict[InstrumentedAttribute | Callable | ColumnElement, Any]
|
|
766
|
+
| None = None,
|
|
757
767
|
nullable_filter_expressions: (
|
|
758
768
|
dict[InstrumentedAttribute | Callable, Any] | None
|
|
759
769
|
) = None,
|
|
@@ -830,7 +840,10 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
830
840
|
)
|
|
831
841
|
|
|
832
842
|
for filter_expression, value in filter_expressions.items():
|
|
833
|
-
if isinstance(
|
|
843
|
+
if isinstance(
|
|
844
|
+
filter_expression,
|
|
845
|
+
InstrumentedAttribute | BinaryExpression | ColumnElement,
|
|
846
|
+
):
|
|
834
847
|
stmt = stmt.filter(filter_expression == value)
|
|
835
848
|
else:
|
|
836
849
|
stmt = stmt.filter(filter_expression(value))
|
|
@@ -1075,7 +1088,7 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
1075
1088
|
def get_joins(
|
|
1076
1089
|
self,
|
|
1077
1090
|
base_query: Select,
|
|
1078
|
-
filter_expressions: dict[InstrumentedAttribute | Callable, Any],
|
|
1091
|
+
filter_expressions: dict[InstrumentedAttribute | Callable | ColumnElement, Any],
|
|
1079
1092
|
options: List[Any] | None = None,
|
|
1080
1093
|
order_by: InstrumentedAttribute | UnaryExpression | None = None,
|
|
1081
1094
|
) -> Select:
|
|
@@ -1108,6 +1121,8 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
1108
1121
|
model = filter_expression.parent._identity_class
|
|
1109
1122
|
elif isinstance(filter_expression, Function):
|
|
1110
1123
|
model = filter_expression.entity_namespace
|
|
1124
|
+
elif isinstance(filter_expression, ColumnElement):
|
|
1125
|
+
model = self.model # Not supported
|
|
1111
1126
|
else:
|
|
1112
1127
|
model = filter_expression.__self__.parent._identity_class
|
|
1113
1128
|
if model != self.model:
|
|
@@ -1157,7 +1172,7 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
1157
1172
|
|
|
1158
1173
|
@staticmethod
|
|
1159
1174
|
def handle_filter_expressions(
|
|
1160
|
-
filter_expressions: dict[InstrumentedAttribute | Callable, Any],
|
|
1175
|
+
filter_expressions: dict[InstrumentedAttribute | Callable | ColumnElement, Any],
|
|
1161
1176
|
) -> None:
|
|
1162
1177
|
for filter_expression, value in filter_expressions.copy().items():
|
|
1163
1178
|
if value is None:
|
|
@@ -1169,7 +1184,9 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
1169
1184
|
|
|
1170
1185
|
@staticmethod
|
|
1171
1186
|
def handle_nullable_filter_expressions(
|
|
1172
|
-
nullable_filter_expressions: dict[
|
|
1187
|
+
nullable_filter_expressions: dict[
|
|
1188
|
+
InstrumentedAttribute | Callable | ColumnElement, Any
|
|
1189
|
+
],
|
|
1173
1190
|
) -> None:
|
|
1174
1191
|
for filter_expression, value in nullable_filter_expressions.copy().items():
|
|
1175
1192
|
if value in null_query_values:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/db_validation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/transactions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/__init__.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/__init__.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/api.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/deps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/managers.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/models.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/schemas.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/docker-compose.yml
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/test_public_methods.py
RENAMED
|
File without changes
|