fastapi-toolsets 5.1.4__tar.gz → 5.1.5__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 (44) hide show
  1. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/PKG-INFO +1 -1
  2. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/pyproject.toml +5 -2
  3. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/pyproject.toml.orig +2 -1
  4. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/__init__.py +1 -1
  5. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/crud/search.py +2 -2
  6. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/db/locks.py +1 -1
  7. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/fixtures/utils.py +4 -1
  8. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/LICENSE +0 -0
  9. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/README.md +0 -0
  10. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/_imports.py +0 -0
  11. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/cli/__init__.py +0 -0
  12. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/cli/app.py +0 -0
  13. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/cli/commands/__init__.py +0 -0
  14. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/cli/commands/fixtures.py +0 -0
  15. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/cli/config.py +0 -0
  16. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/cli/pyproject.py +0 -0
  17. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/cli/utils.py +0 -0
  18. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/crud/__init__.py +0 -0
  19. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/crud/factory.py +0 -0
  20. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/db/__init__.py +0 -0
  21. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/db/core.py +0 -0
  22. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/db/m2m.py +0 -0
  23. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/db/testing.py +0 -0
  24. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/db/watch.py +0 -0
  25. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/dependencies.py +0 -0
  26. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/exceptions/__init__.py +0 -0
  27. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/exceptions/exceptions.py +0 -0
  28. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/exceptions/handler.py +0 -0
  29. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/fixtures/__init__.py +0 -0
  30. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/fixtures/enum.py +0 -0
  31. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/fixtures/registry.py +0 -0
  32. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/logger.py +0 -0
  33. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/metrics/__init__.py +0 -0
  34. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/metrics/handler.py +0 -0
  35. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/metrics/registry.py +0 -0
  36. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/models/__init__.py +0 -0
  37. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/models/columns.py +0 -0
  38. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/models/watched.py +0 -0
  39. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/py.typed +0 -0
  40. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/pytest/__init__.py +0 -0
  41. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/pytest/plugin.py +0 -0
  42. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/pytest/utils.py +0 -0
  43. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/schemas.py +0 -0
  44. {fastapi_toolsets-5.1.4 → fastapi_toolsets-5.1.5}/src/fastapi_toolsets/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-toolsets
3
- Version: 5.1.4
3
+ Version: 5.1.5
4
4
  Summary: Production-ready utilities for FastAPI applications
5
5
  Keywords: fastapi,sqlalchemy,postgresql
6
6
  Author: d3vyce
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastapi-toolsets"
3
- version = "5.1.4"
3
+ version = "5.1.5"
4
4
  description = "Production-ready utilities for FastAPI applications"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -115,7 +115,10 @@ extend-immutable-calls = [
115
115
 
116
116
  [tool.pytest.ini_options]
117
117
  testpaths = ["tests"]
118
- filterwarnings = ["ignore::DeprecationWarning"]
118
+ filterwarnings = [
119
+ "ignore::DeprecationWarning",
120
+ "error::sqlalchemy.exc.SADeprecationWarning",
121
+ ]
119
122
 
120
123
  [tool.coverage.run]
121
124
  source = ["src/fastapi_toolsets"]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastapi-toolsets"
3
- version = "5.1.4"
3
+ version = "5.1.5"
4
4
  description = "Production-ready utilities for FastAPI applications"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -110,6 +110,7 @@ extend-immutable-calls = ["fastapi.Depends", "fastapi.Security"]
110
110
  testpaths = ["tests"]
111
111
  filterwarnings = [
112
112
  "ignore::DeprecationWarning",
113
+ "error::sqlalchemy.exc.SADeprecationWarning",
113
114
  ]
114
115
 
115
116
  [tool.coverage.run]
@@ -24,4 +24,4 @@ Example usage:
24
24
  return Response(data={"user": user.username}, message="Success")
25
25
  """
26
26
 
27
- __version__ = "5.1.4"
27
+ __version__ = "5.1.5"
@@ -5,7 +5,7 @@ from collections.abc import Sequence
5
5
  from dataclasses import dataclass, replace
6
6
  from typing import TYPE_CHECKING, Any, Literal
7
7
 
8
- from sqlalchemy import String, and_, distinct, func, or_, select
8
+ from sqlalchemy import String, and_, any_, distinct, func, or_, select
9
9
  from sqlalchemy.dialects.postgresql import aggregate_order_by
10
10
  from sqlalchemy.ext.asyncio import AsyncSession
11
11
  from sqlalchemy.orm import DeclarativeBase
@@ -383,7 +383,7 @@ def build_filter_by(
383
383
  if isinstance(value, list):
384
384
  filters[key] = column.overlap(value)
385
385
  else:
386
- filters[key] = column.any(value)
386
+ filters[key] = any_(column) == value
387
387
  elif isinstance(col_type, Enum):
388
388
  enum_class = col_type.enum_class
389
389
  if enum_class is not None:
@@ -215,7 +215,7 @@ async def advisory_lock(
215
215
  f"Advisory lock {key!r} could not be acquired within {timeout}."
216
216
  ) from e
217
217
  raise # pragma: no cover
218
- acquired = result.scalar() if nowait else True
218
+ acquired = result.scalar_one() if nowait else True
219
219
  try:
220
220
  yield acquired
221
221
  finally:
@@ -247,7 +247,10 @@ async def _reload_with_relationships(
247
247
  pk_attr = getattr(model, pk_key)
248
248
  pks = [getattr(inst, pk_key) for inst in instances]
249
249
  result = await session.execute(
250
- select(model).where(pk_attr.in_(pks)).options(*load_options)
250
+ select(model)
251
+ .where(pk_attr.in_(pks))
252
+ .options(*load_options)
253
+ .execution_options(populate_existing=True)
251
254
  )
252
255
  by_pk = {getattr(row, pk_key): row for row in result.unique().scalars()}
253
256
  return [by_pk[pk] for pk in pks]