fastapi-sqlalchemy-toolkit 0.8.2__tar.gz → 0.8.2.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.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/PKG-INFO +1 -1
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/filtering.md +25 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/filtering.md +25 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/fastapi_sqlalchemy_toolkit/model_manager.py +28 -7
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/pyproject.toml +1 -1
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/tests/test_public_methods.py +89 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/.flake8 +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/.github/workflows/docker-test.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/.github/workflows/python-publish.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/.gitignore +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/.pylintrc +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/AUTHORS +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/LICENSE +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/Makefile +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/README.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/benefits.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/db_validation.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/extension.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/index.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/benefits.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/db_validation.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/extension.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/index.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/sorting.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/transactions.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/usage.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/utils.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/sorting.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/transactions.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/usage.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/utils.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/.env +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/api/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/api/api.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/api/deps.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/api/endpoints/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/api/endpoints/child.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/config.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/db.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/main.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/managers.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/models.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/schemas.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/fastapi_sqlalchemy_toolkit/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/fastapi_sqlalchemy_toolkit/filters.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/fastapi_sqlalchemy_toolkit/ordering.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/fastapi_sqlalchemy_toolkit/utils.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/mkdocs.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/poetry.lock +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/requirements/base.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/requirements/docs.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/requirements/lint.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/requirements/test.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/tests/Dockerfile +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/tests/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/tests/conftest.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/tests/db.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/tests/docker-compose.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/tests/models.py +0 -0
|
@@ -280,6 +280,31 @@ async def get_parents(
|
|
|
280
280
|
|
|
281
281
|
> **Note**: nesting of compound expressions (e.g. `(a & b) | c`) is not supported.
|
|
282
282
|
|
|
283
|
+
**Multiple expressions as separate arguments**
|
|
284
|
+
|
|
285
|
+
Instead of using `&` to combine expressions, you can pass them as separate arguments
|
|
286
|
+
in a tuple. Each argument supports all three expression kinds above. Non-`None`
|
|
287
|
+
expressions are combined with `AND`.
|
|
288
|
+
|
|
289
|
+
```python
|
|
290
|
+
@router.get("/parents")
|
|
291
|
+
async def get_parents(
|
|
292
|
+
session: Session,
|
|
293
|
+
title: str | None = None,
|
|
294
|
+
slug: str | None = None,
|
|
295
|
+
) -> list[ParentListSchema]:
|
|
296
|
+
return await parent_manager.list(
|
|
297
|
+
session,
|
|
298
|
+
optional_where=(Parent.title == title, Parent.slug == slug),
|
|
299
|
+
)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
`GET /parents` — no filter applied, all `Parent` objects are returned.
|
|
303
|
+
|
|
304
|
+
`GET /parents?title=foo` — only the `title` filter is applied.
|
|
305
|
+
|
|
306
|
+
`GET /parents?title=foo&slug=bar` — both filters are applied with `AND`.
|
|
307
|
+
|
|
283
308
|
### Filtering by `null` via API
|
|
284
309
|
|
|
285
310
|
If in a list API endpoint, you need to be able to filter the field value
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/filtering.md
RENAMED
|
@@ -257,6 +257,31 @@ async def get_parents(
|
|
|
257
257
|
|
|
258
258
|
> **Примечание**: вложенные составные выражения (например, `(a & b) | c`) не поддерживаются.
|
|
259
259
|
|
|
260
|
+
**Несколько выражений как отдельные аргументы**
|
|
261
|
+
|
|
262
|
+
Вместо использования `&` для объединения выражений можно передать их как отдельные
|
|
263
|
+
аргументы в виде кортежа. Каждый аргумент поддерживает все три вида выражений выше.
|
|
264
|
+
Оставшиеся (не-`None`) выражения объединяются через `AND`.
|
|
265
|
+
|
|
266
|
+
```python
|
|
267
|
+
@router.get("/parents")
|
|
268
|
+
async def get_parents(
|
|
269
|
+
session: Session,
|
|
270
|
+
title: str | None = None,
|
|
271
|
+
slug: str | None = None,
|
|
272
|
+
) -> list[ParentListSchema]:
|
|
273
|
+
return await parent_manager.list(
|
|
274
|
+
session,
|
|
275
|
+
optional_where=(Parent.title == title, Parent.slug == slug),
|
|
276
|
+
)
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Запрос `GET /parents` — фильтр не применяется, возвращаются все объекты `Parent`.
|
|
280
|
+
|
|
281
|
+
Запрос `GET /parents?title=foo` — применяется только фильтр по `title`.
|
|
282
|
+
|
|
283
|
+
Запрос `GET /parents?title=foo&slug=bar` — применяются оба фильтра через `AND`.
|
|
284
|
+
|
|
260
285
|
## Фильтрация без дополнительной обработки
|
|
261
286
|
|
|
262
287
|
Для фильтрации без дополнительной обработки в методах `list` и `paginated_list` можно
|
|
@@ -1235,10 +1235,10 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
1235
1235
|
related_pk = _get_model_pk(related_model)
|
|
1236
1236
|
return relationship.any(related_pk.in_(value))
|
|
1237
1237
|
|
|
1238
|
-
@
|
|
1239
|
-
def
|
|
1238
|
+
@classmethod
|
|
1239
|
+
def handle_optional_where_expression(cls, optional_where: Any) -> Any:
|
|
1240
1240
|
"""
|
|
1241
|
-
Обрабатывает выражение optional_where, пропуская
|
|
1241
|
+
Обрабатывает одно выражение optional_where, пропуская фильтр, если его значение None.
|
|
1242
1242
|
|
|
1243
1243
|
Поддерживает:
|
|
1244
1244
|
1. Простые выражения вида MyModel.field == value
|
|
@@ -1273,6 +1273,30 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
1273
1273
|
return None
|
|
1274
1274
|
return optional_where
|
|
1275
1275
|
|
|
1276
|
+
@classmethod
|
|
1277
|
+
def handle_optional_where(cls, optional_where: Any) -> Any:
|
|
1278
|
+
"""
|
|
1279
|
+
Обрабатывает выражения optional_where, пропуская фильтры, значения которых None.
|
|
1280
|
+
|
|
1281
|
+
Принимает одно выражение SQLAlchemy или кортеж выражений.
|
|
1282
|
+
Каждое выражение обрабатывается через handle_optional_where_expression
|
|
1283
|
+
и поддерживает все три вида выражений.
|
|
1284
|
+
При передаче кортежа оставшиеся (не-None) выражения
|
|
1285
|
+
объединяются через оператор &.
|
|
1286
|
+
"""
|
|
1287
|
+
if isinstance(optional_where, tuple):
|
|
1288
|
+
remaining = []
|
|
1289
|
+
for arg in optional_where:
|
|
1290
|
+
processed = cls.handle_optional_where_expression(arg)
|
|
1291
|
+
if processed is not None:
|
|
1292
|
+
remaining.append(processed)
|
|
1293
|
+
if not remaining:
|
|
1294
|
+
return None
|
|
1295
|
+
if len(remaining) == 1:
|
|
1296
|
+
return remaining[0]
|
|
1297
|
+
return and_(*remaining)
|
|
1298
|
+
return cls.handle_optional_where_expression(optional_where)
|
|
1299
|
+
|
|
1276
1300
|
def assemble_stmt(
|
|
1277
1301
|
self,
|
|
1278
1302
|
base_stmt: Select | None = None,
|
|
@@ -1317,10 +1341,7 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
1317
1341
|
stmt = stmt.options(option)
|
|
1318
1342
|
|
|
1319
1343
|
if where is not None:
|
|
1320
|
-
if isinstance(where, tuple)
|
|
1321
|
-
stmt = stmt.where(*where)
|
|
1322
|
-
else:
|
|
1323
|
-
stmt = stmt.where(where)
|
|
1344
|
+
stmt = stmt.where(*where) if isinstance(where, tuple) else stmt.where(where)
|
|
1324
1345
|
|
|
1325
1346
|
if limit is not None:
|
|
1326
1347
|
stmt = stmt.limit(limit)
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/tests/test_public_methods.py
RENAMED
|
@@ -990,6 +990,95 @@ async def test_list_with_optional_where_case3_or_one_none(session: AsyncSession)
|
|
|
990
990
|
assert parents[0].title == target_title
|
|
991
991
|
|
|
992
992
|
|
|
993
|
+
async def test_list_with_optional_where_multi_all_applied(session: AsyncSession):
|
|
994
|
+
"""Multi-arg: both values not None — both filters applied with AND."""
|
|
995
|
+
target_title = "optional-where-multi-title"
|
|
996
|
+
target_slug = "optional-where-multi-slug1"
|
|
997
|
+
await session.execute(
|
|
998
|
+
insert(Parent),
|
|
999
|
+
[
|
|
1000
|
+
{
|
|
1001
|
+
"title": target_title,
|
|
1002
|
+
"slug": target_slug,
|
|
1003
|
+
},
|
|
1004
|
+
{
|
|
1005
|
+
"title": target_title,
|
|
1006
|
+
"slug": "optional-where-multi-slug2",
|
|
1007
|
+
},
|
|
1008
|
+
{
|
|
1009
|
+
"title": "optional-where-multi-title-other",
|
|
1010
|
+
"slug": "optional-where-multi-slug3",
|
|
1011
|
+
},
|
|
1012
|
+
],
|
|
1013
|
+
)
|
|
1014
|
+
await session.commit()
|
|
1015
|
+
|
|
1016
|
+
parents = await parent_manager.list(
|
|
1017
|
+
session=session,
|
|
1018
|
+
optional_where=(Parent.title == target_title, Parent.slug == target_slug),
|
|
1019
|
+
)
|
|
1020
|
+
assert len(parents) == 1
|
|
1021
|
+
assert parents[0].title == target_title
|
|
1022
|
+
assert parents[0].slug == target_slug
|
|
1023
|
+
|
|
1024
|
+
|
|
1025
|
+
async def test_list_with_optional_where_multi_one_none(session: AsyncSession):
|
|
1026
|
+
"""Multi-arg: one value is None — only non-None filter applied."""
|
|
1027
|
+
target_title = "optional-where-multi-none-title"
|
|
1028
|
+
await session.execute(
|
|
1029
|
+
insert(Parent),
|
|
1030
|
+
[
|
|
1031
|
+
{
|
|
1032
|
+
"title": target_title,
|
|
1033
|
+
"slug": "optional-where-multi-none-slug1",
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
"title": target_title,
|
|
1037
|
+
"slug": "optional-where-multi-none-slug2",
|
|
1038
|
+
},
|
|
1039
|
+
{
|
|
1040
|
+
"title": "optional-where-multi-none-title-other",
|
|
1041
|
+
"slug": "optional-where-multi-none-slug3",
|
|
1042
|
+
},
|
|
1043
|
+
],
|
|
1044
|
+
)
|
|
1045
|
+
await session.commit()
|
|
1046
|
+
|
|
1047
|
+
none_value = None
|
|
1048
|
+
parents = await parent_manager.list(
|
|
1049
|
+
session=session,
|
|
1050
|
+
optional_where=(Parent.title == target_title, Parent.slug == none_value),
|
|
1051
|
+
)
|
|
1052
|
+
assert len(parents) == 2
|
|
1053
|
+
for parent in parents:
|
|
1054
|
+
assert parent.title == target_title
|
|
1055
|
+
|
|
1056
|
+
|
|
1057
|
+
async def test_list_with_optional_where_multi_all_none(session: AsyncSession):
|
|
1058
|
+
"""Multi-arg: all values are None — filter skipped (all returned)."""
|
|
1059
|
+
await session.execute(
|
|
1060
|
+
insert(Parent),
|
|
1061
|
+
[
|
|
1062
|
+
{
|
|
1063
|
+
"title": "optional-where-multi-all-none-title-1",
|
|
1064
|
+
"slug": "optional-where-multi-all-none-slug1",
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
"title": "optional-where-multi-all-none-title-2",
|
|
1068
|
+
"slug": "optional-where-multi-all-none-slug2",
|
|
1069
|
+
},
|
|
1070
|
+
],
|
|
1071
|
+
)
|
|
1072
|
+
await session.commit()
|
|
1073
|
+
|
|
1074
|
+
none_value = None
|
|
1075
|
+
parents = await parent_manager.list(
|
|
1076
|
+
session=session,
|
|
1077
|
+
optional_where=(Parent.title == none_value, Parent.slug == none_value),
|
|
1078
|
+
)
|
|
1079
|
+
assert len(parents) == 2
|
|
1080
|
+
|
|
1081
|
+
|
|
993
1082
|
async def test_create_unique_constraint_validation(session: AsyncSession):
|
|
994
1083
|
await parent_manager.create(
|
|
995
1084
|
session=session,
|
|
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.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/db_validation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/db_validation.md
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/extension.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/ru/transactions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/docs/transactions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/__init__.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/api/__init__.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/api/api.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/api/deps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/config.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/main.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/managers.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/examples/app/models.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.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
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/requirements/base.txt
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/requirements/docs.txt
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/requirements/lint.txt
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/requirements/test.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.8.2 → fastapi_sqlalchemy_toolkit-0.8.2.1}/tests/docker-compose.yml
RENAMED
|
File without changes
|
|
File without changes
|