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.
Files changed (60) hide show
  1. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/PKG-INFO +1 -1
  2. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/model_manager.py +28 -11
  3. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/pyproject.toml +1 -1
  4. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.flake8 +0 -0
  5. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.github/workflows/docker-test.yml +0 -0
  6. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.github/workflows/python-publish.yml +0 -0
  7. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.gitignore +0 -0
  8. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/.pylintrc +0 -0
  9. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/AUTHORS +0 -0
  10. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/LICENSE +0 -0
  11. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/Makefile +0 -0
  12. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/README.md +0 -0
  13. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/benefits.md +0 -0
  14. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/db_validation.md +0 -0
  15. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/extension.md +0 -0
  16. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/filtering.md +0 -0
  17. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/index.md +0 -0
  18. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/benefits.md +0 -0
  19. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/db_validation.md +0 -0
  20. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/extension.md +0 -0
  21. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/filtering.md +0 -0
  22. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/index.md +0 -0
  23. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/sorting.md +0 -0
  24. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/transactions.md +0 -0
  25. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/usage.md +0 -0
  26. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/ru/utils.md +0 -0
  27. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/sorting.md +0 -0
  28. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/transactions.md +0 -0
  29. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/usage.md +0 -0
  30. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/docs/utils.md +0 -0
  31. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/.env +0 -0
  32. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/__init__.py +0 -0
  33. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/__init__.py +0 -0
  34. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/api.py +0 -0
  35. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/deps.py +0 -0
  36. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/endpoints/__init__.py +0 -0
  37. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/api/endpoints/child.py +0 -0
  38. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/config.py +0 -0
  39. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/db.py +0 -0
  40. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/main.py +0 -0
  41. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/managers.py +0 -0
  42. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/models.py +0 -0
  43. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/examples/app/schemas.py +0 -0
  44. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/__init__.py +0 -0
  45. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/filters.py +0 -0
  46. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/ordering.py +0 -0
  47. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/fastapi_sqlalchemy_toolkit/utils.py +0 -0
  48. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/mkdocs.yml +0 -0
  49. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/poetry.lock +0 -0
  50. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/requirements/base.txt +0 -0
  51. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/requirements/docs.txt +0 -0
  52. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/requirements/lint.txt +0 -0
  53. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/requirements/test.txt +0 -0
  54. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/Dockerfile +0 -0
  55. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/__init__.py +0 -0
  56. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/conftest.py +0 -0
  57. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/db.py +0 -0
  58. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/docker-compose.yml +0 -0
  59. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/models.py +0 -0
  60. {fastapi_sqlalchemy_toolkit-0.8.0 → fastapi_sqlalchemy_toolkit-0.8.1}/tests/test_public_methods.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi_sqlalchemy_toolkit
3
- Version: 0.8.0
3
+ Version: 0.8.1
4
4
  Summary: FastAPI SQLAlchemy Toolkit
5
5
  Project-URL: Homepage, https://github.com/e-kondr01/fastapi-sqlalchemy-toolkit
6
6
  Author-email: Egor Kondrashov <e.kondr01@gmail.com>
@@ -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] | None = ...,
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] | None = ...,
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] | None = None,
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(filter_expression, InstrumentedAttribute | Function):
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] | None = ...,
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] | None = ...,
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] | None = None,
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(filter_expression, InstrumentedAttribute):
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[InstrumentedAttribute | Callable, Any],
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:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "fastapi_sqlalchemy_toolkit"
7
- version = "0.8.0"
7
+ version = "0.8.1"
8
8
  authors = [
9
9
  { name="Egor Kondrashov", email="e.kondr01@gmail.com" },
10
10
  ]