fastapi-sqla 3.1.1__py3-none-any.whl → 3.1.2__py3-none-any.whl

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.
@@ -6,7 +6,7 @@ from fastapi import Depends, Query
6
6
  from sqlalchemy.sql import Select, func, select
7
7
 
8
8
  from fastapi_sqla.async_sqla import AsyncSessionDependency, SqlaAsyncSession
9
- from fastapi_sqla.models import Page
9
+ from fastapi_sqla.models import Meta, Page
10
10
  from fastapi_sqla.sqla import _DEFAULT_SESSION_KEY
11
11
 
12
12
  QueryCountDependency = Callable[..., Awaitable[int]]
@@ -19,7 +19,7 @@ PaginateDependency = Union[DefaultDependency, WithQueryCountDependency]
19
19
 
20
20
 
21
21
  async def default_query_count(session: SqlaAsyncSession, query: Select) -> int:
22
- result = await session.execute(select(func.count()).select_from(query.subquery())) # type: ignore # noqa
22
+ result = await session.execute(select(func.count()).select_from(query.subquery()))
23
23
  return cast(int, result.scalar())
24
24
 
25
25
 
@@ -33,20 +33,20 @@ async def paginate_query(
33
33
  scalars: bool = True,
34
34
  ) -> Page:
35
35
  total_pages = math.ceil(total_items / limit)
36
- page_number = offset / limit + 1
37
- query = query.offset(offset).limit(limit) # type: ignore
36
+ page_number = math.floor(offset / limit + 1)
37
+ query = query.offset(offset).limit(limit)
38
38
  result = await session.execute(query)
39
39
  data = iter(
40
- cast(Iterator, result.unique().scalars() if scalars else result.mappings()) # type: ignore # noqa
40
+ cast(Iterator, result.unique().scalars() if scalars else result.mappings())
41
41
  )
42
42
  return Page(
43
- data=data,
44
- meta={
45
- "offset": offset,
46
- "total_items": total_items,
47
- "total_pages": total_pages,
48
- "page_number": page_number,
49
- },
43
+ data=data, # type: ignore # Expected to be a list
44
+ meta=Meta(
45
+ offset=offset,
46
+ total_items=total_items,
47
+ total_pages=total_pages,
48
+ page_number=page_number,
49
+ ),
50
50
  )
51
51
 
52
52
 
@@ -7,7 +7,7 @@ from fastapi import Depends, Query
7
7
  from sqlalchemy.orm import Query as LegacyQuery
8
8
  from sqlalchemy.sql import Select, func, select
9
9
 
10
- from fastapi_sqla.models import Page
10
+ from fastapi_sqla.models import Meta, Page
11
11
  from fastapi_sqla.sqla import _DEFAULT_SESSION_KEY, SessionDependency, SqlaSession
12
12
 
13
13
  DbQuery = Union[LegacyQuery, Select]
@@ -66,15 +66,15 @@ def _paginate_legacy(
66
66
  scalars: bool = True,
67
67
  ) -> Page:
68
68
  total_pages = math.ceil(total_items / limit)
69
- page_number = offset / limit + 1
69
+ page_number = math.floor(offset / limit + 1)
70
70
  return Page(
71
- data=query.offset(offset).limit(limit).all(), # type: ignore
72
- meta={
73
- "offset": offset,
74
- "total_items": total_items,
75
- "total_pages": total_pages,
76
- "page_number": page_number,
77
- },
71
+ data=query.offset(offset).limit(limit).all(),
72
+ meta=Meta(
73
+ offset=offset,
74
+ total_items=total_items,
75
+ total_pages=total_pages,
76
+ page_number=page_number,
77
+ ),
78
78
  )
79
79
 
80
80
 
@@ -89,20 +89,20 @@ def _paginate(
89
89
  scalars: bool = True,
90
90
  ) -> Page:
91
91
  total_pages = math.ceil(total_items / limit)
92
- page_number = offset / limit + 1
93
- query = query.offset(offset).limit(limit) # type: ignore
92
+ page_number = math.floor(offset / limit + 1)
93
+ query = query.offset(offset).limit(limit)
94
94
  result = session.execute(query)
95
95
  data = iter(
96
- cast(Iterator, result.unique().scalars() if scalars else result.mappings()) # type: ignore # noqa
96
+ cast(Iterator, result.unique().scalars() if scalars else result.mappings())
97
97
  )
98
98
  return Page(
99
- data=data,
100
- meta={
101
- "offset": offset,
102
- "total_items": total_items,
103
- "total_pages": total_pages,
104
- "page_number": page_number,
105
- },
99
+ data=data, # type: ignore # Expected to be a list
100
+ meta=Meta(
101
+ offset=offset,
102
+ total_items=total_items,
103
+ total_pages=total_pages,
104
+ page_number=page_number,
105
+ ),
106
106
  )
107
107
 
108
108
 
fastapi_sqla/sqla.py CHANGED
@@ -2,7 +2,7 @@ import asyncio
2
2
  import os
3
3
  from collections.abc import Generator
4
4
  from contextlib import contextmanager
5
- from typing import Annotated, Generic, TypeVar
5
+ from typing import Annotated
6
6
 
7
7
  import structlog
8
8
  from fastapi import Depends, Request
@@ -165,14 +165,11 @@ async def add_session_to_request(
165
165
  return response
166
166
 
167
167
 
168
- S = TypeVar("S", bound=SqlaSession)
169
-
170
-
171
- class SessionDependency(Generic[S]):
168
+ class SessionDependency:
172
169
  def __init__(self, key: str = _DEFAULT_SESSION_KEY) -> None:
173
170
  self.key = key
174
171
 
175
- def __call__(self, request: Request) -> S:
172
+ def __call__(self, request: Request) -> SqlaSession:
176
173
  """Yield the sqlalchemy session for that request.
177
174
 
178
175
  It is meant to be used as a FastAPI dependency::
@@ -197,5 +194,5 @@ class SessionDependency(Generic[S]):
197
194
  raise
198
195
 
199
196
 
200
- default_session_dep = SessionDependency[SqlaSession]()
197
+ default_session_dep = SessionDependency()
201
198
  Session = Annotated[SqlaSession, Depends(default_session_dep)]
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastapi-sqla
3
- Version: 3.1.1
4
- Summary: SQLAlchemy extension for FastAPI with support for pagination, asyncio, and pytest, ready for production.
3
+ Version: 3.1.2
4
+ Summary: SQLAlchemy extension for FastAPI with support for pagination, asyncio, SQLModel, and pytest, ready for production.
5
5
  Home-page: https://github.com/dialoguemd/fastapi-sqla
6
6
  License: MIT
7
7
  Keywords: FastAPI,SQLAlchemy,asyncio,pytest,alembic
@@ -46,7 +46,7 @@ Requires-Dist: fastapi (>=0.95.1)
46
46
  Requires-Dist: greenlet (>=1.1.3,<2.0.0) ; extra == "tests"
47
47
  Requires-Dist: httpx (>=0.23.0,<0.24.0) ; extra == "tests"
48
48
  Requires-Dist: isort (>=5.5.3,<6.0.0) ; extra == "tests"
49
- Requires-Dist: mypy[tests] (>=0.991,<0.992) ; extra == "tests"
49
+ Requires-Dist: mypy[tests] (>=1.0.0,<2.0.0) ; extra == "tests"
50
50
  Requires-Dist: pdbpp (>=0.10.2,<0.11.0) ; extra == "tests"
51
51
  Requires-Dist: psycopg2 (>=2.8.6,<3.0.0) ; extra == "tests"
52
52
  Requires-Dist: pydantic (>=1)
@@ -1,16 +1,16 @@
1
1
  fastapi_sqla/__init__.py,sha256=G9bKR6L9EnLgzelE_BLnHgc1cOm0Yu0wMzwLAdyA8iE,1153
2
2
  fastapi_sqla/_pytest_plugin.py,sha256=bjPzOuwk32Zo4hoOa_bGjTGhtHGPImh3RyiORqz-J84,5430
3
- fastapi_sqla/async_pagination.py,sha256=r5APFbE-xpqQPF1aTG19ILOwYDhuIlHql3UF3mYZMt4,3176
3
+ fastapi_sqla/async_pagination.py,sha256=jYeZYtIi7mssM3MfwobOoaPYNZF0BE1EmCK8CqFnwOg,3164
4
4
  fastapi_sqla/async_sqla.py,sha256=7SXRH3DMsQvpjCQdvCBEjQhDZ4-cPAg175MlgNVBnCg,5888
5
5
  fastapi_sqla/aws_aurora_support.py,sha256=4dxLKOqDccgLwFqlz81L6f4HzrOXMZkY7Zuf4t_310U,838
6
6
  fastapi_sqla/aws_rds_iam_support.py,sha256=YSJNhrxmhGN-GVk9PLMTmQSWTKZBvuorKkhc_XaoL44,1189
7
7
  fastapi_sqla/base.py,sha256=0X7Gbt49rBHPiSFmNy5S2PT0dA4UBNnwrAesYSkaHBc,1606
8
8
  fastapi_sqla/models.py,sha256=fesW7BqkwOA4iC345dbybzcV8Kz4-kLwREo38oqy_7A,1108
9
- fastapi_sqla/pagination.py,sha256=uhsNRf9w2GzJQkF8eUUQZMAudPDi7tN5OCb00kz3Dn4,4515
9
+ fastapi_sqla/pagination.py,sha256=IjbKFyUHly8jHyOO4pnyPK4RE_cFRDY03OOZeZEm3cY,4513
10
10
  fastapi_sqla/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- fastapi_sqla/sqla.py,sha256=zAkzY07bHEnOrmP7_dwO4Gdar18qm1ZbhB1RD3AZGrA,6427
12
- fastapi_sqla-3.1.1.dist-info/LICENSE,sha256=8G0-nWLqi3xRYRrtRlTE8n1mkYJcnCRoZGUhv6ZE29c,1064
13
- fastapi_sqla-3.1.1.dist-info/METADATA,sha256=caalhTVa91W2oBq_rXUhu5xahUzINgBpq39GRlsbvxc,20905
14
- fastapi_sqla-3.1.1.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
15
- fastapi_sqla-3.1.1.dist-info/entry_points.txt,sha256=haa0EueKcRo8-AlJTpHBMn08wMBiULNGA53nkvaDWj0,53
16
- fastapi_sqla-3.1.1.dist-info/RECORD,,
11
+ fastapi_sqla/sqla.py,sha256=lOikCu_BjGQYfbbtcM59ZjwTL-66cM9L_yIbCEQasAQ,6356
12
+ fastapi_sqla-3.1.2.dist-info/LICENSE,sha256=8G0-nWLqi3xRYRrtRlTE8n1mkYJcnCRoZGUhv6ZE29c,1064
13
+ fastapi_sqla-3.1.2.dist-info/METADATA,sha256=xl5jfdozvDDEJGHW0fe9bFm_ITasdlzYb3NThMDveNk,20915
14
+ fastapi_sqla-3.1.2.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
15
+ fastapi_sqla-3.1.2.dist-info/entry_points.txt,sha256=haa0EueKcRo8-AlJTpHBMn08wMBiULNGA53nkvaDWj0,53
16
+ fastapi_sqla-3.1.2.dist-info/RECORD,,