fastapi-sqlalchemy-toolkit 0.7.4.1__tar.gz → 0.7.5.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.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/PKG-INFO +1 -1
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/usage.md +7 -1
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/fastapi_sqlalchemy_toolkit/model_manager.py +141 -7
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/pyproject.toml +1 -1
- fastapi_sqlalchemy_toolkit-0.7.5.1/requirements/docs.txt +4 -0
- fastapi_sqlalchemy_toolkit-0.7.4.1/requirements/docs.txt +0 -4
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/.flake8 +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/.github/workflows/docker-test.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/.github/workflows/python-publish.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/.gitignore +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/.pylintrc +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/AUTHORS +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/LICENSE +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/Makefile +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/README.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/benefits.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/db_validation.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/extension.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/filtering.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/index.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/benefits.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/db_validation.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/extension.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/filtering.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/index.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/sorting.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/transactions.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/utils.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/sorting.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/transactions.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/usage.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/utils.md +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/.env +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/api/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/api/api.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/api/deps.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/api/endpoints/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/api/endpoints/child.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/config.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/db.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/main.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/managers.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/models.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/schemas.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/fastapi_sqlalchemy_toolkit/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/fastapi_sqlalchemy_toolkit/filters.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/fastapi_sqlalchemy_toolkit/ordering.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/fastapi_sqlalchemy_toolkit/utils.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/mkdocs.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/requirements/base.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/requirements/lint.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/requirements/test.txt +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/tests/Dockerfile +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/tests/__init__.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/tests/conftest.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/tests/db.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/tests/docker-compose.yml +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/tests/models.py +0 -0
- {fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/tests/test_public_methods.py +0 -0
|
@@ -52,4 +52,10 @@ my_model_manager = ModelManager[MyModel, MyModelCreateSchema, MyModelUpdateSchem
|
|
|
52
52
|
Использование методов `paginated_list` и `paginated_filter`, согласно документации
|
|
53
53
|
`fastapi_pagination`, требует применения `fastapi_pagination.add_pagination`
|
|
54
54
|
к приложению `FastAPI`, и использование `fastapi_pagination.Page` в типизации ответа
|
|
55
|
-
эндпоинта FastAPI.
|
|
55
|
+
эндпоинта FastAPI.
|
|
56
|
+
|
|
57
|
+
Также доступны следующие методы для выполнения действий "пачкой":
|
|
58
|
+
|
|
59
|
+
- `bulk_create` - создание объектов (частично выполняет валидацию на уровне БД)
|
|
60
|
+
- `bulk_update` - обновление объектов (не выполняет валидацию на уровне БД)
|
|
61
|
+
- `bulk_delete` - удаление объектов
|
|
@@ -6,7 +6,17 @@ from fastapi import HTTPException, status
|
|
|
6
6
|
from fastapi_pagination.bases import BasePage
|
|
7
7
|
from fastapi_pagination.ext.sqlalchemy import paginate
|
|
8
8
|
from pydantic import BaseModel
|
|
9
|
-
from sqlalchemy import
|
|
9
|
+
from sqlalchemy import (
|
|
10
|
+
Integer,
|
|
11
|
+
Row,
|
|
12
|
+
String,
|
|
13
|
+
UniqueConstraint,
|
|
14
|
+
delete,
|
|
15
|
+
func,
|
|
16
|
+
insert,
|
|
17
|
+
select,
|
|
18
|
+
update,
|
|
19
|
+
)
|
|
10
20
|
from sqlalchemy.dialects.postgresql import BOOLEAN
|
|
11
21
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
12
22
|
from sqlalchemy.orm import DeclarativeBase, contains_eager, load_only
|
|
@@ -152,6 +162,48 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
152
162
|
await session.refresh(db_obj, attribute_names=refresh_attribute_names)
|
|
153
163
|
return db_obj
|
|
154
164
|
|
|
165
|
+
async def bulk_create(
|
|
166
|
+
self,
|
|
167
|
+
session: AsyncSession,
|
|
168
|
+
in_objs: list[CreateSchemaT],
|
|
169
|
+
*,
|
|
170
|
+
commit: bool = True,
|
|
171
|
+
returning: bool = True,
|
|
172
|
+
**attrs: Any,
|
|
173
|
+
) -> list[ModelT] | None:
|
|
174
|
+
"""
|
|
175
|
+
Создание экземпляров модели пачкой и сохранение в БД.
|
|
176
|
+
|
|
177
|
+
Валидация на уровне БД выполняется для каждого объекта
|
|
178
|
+
(могут быть ошибки, если несколько создаваемых объектов
|
|
179
|
+
имеют одинаковое значение для уникального поля).
|
|
180
|
+
|
|
181
|
+
:param session: сессия SQLAlchemy
|
|
182
|
+
|
|
183
|
+
:param in_objs: модели Pydantic для создания объектов
|
|
184
|
+
|
|
185
|
+
:param commit: нужно ли вызывать `session.commit()`, если используется
|
|
186
|
+
подход commit as you go
|
|
187
|
+
|
|
188
|
+
:param returning: нужно ли возвращать созданные объекты
|
|
189
|
+
|
|
190
|
+
:param attrs: дополнительные значения полей создаваемых экземпляров
|
|
191
|
+
|
|
192
|
+
:returns: созданные экземпляры модели или None
|
|
193
|
+
"""
|
|
194
|
+
create_data = [in_obj.model_dump() | attrs for in_obj in in_objs]
|
|
195
|
+
for in_obj in create_data:
|
|
196
|
+
await self.run_db_validation(session, in_obj)
|
|
197
|
+
|
|
198
|
+
stmt = insert(self.model).values(create_data)
|
|
199
|
+
if returning:
|
|
200
|
+
stmt = stmt.returning(self.model)
|
|
201
|
+
result = await session.execute(stmt)
|
|
202
|
+
await self.save(session, commit=commit)
|
|
203
|
+
if returning:
|
|
204
|
+
return result.scalars().all()
|
|
205
|
+
return None
|
|
206
|
+
|
|
155
207
|
async def get(
|
|
156
208
|
self,
|
|
157
209
|
session: AsyncSession,
|
|
@@ -618,6 +670,56 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
618
670
|
await session.refresh(db_obj, attribute_names=refresh_attribute_names)
|
|
619
671
|
return db_obj
|
|
620
672
|
|
|
673
|
+
async def bulk_update(
|
|
674
|
+
self,
|
|
675
|
+
session: AsyncSession,
|
|
676
|
+
in_obj: UpdateSchemaT | None = None,
|
|
677
|
+
ids: Iterable | None = None,
|
|
678
|
+
where: Any | None = None,
|
|
679
|
+
*,
|
|
680
|
+
commit: bool = True,
|
|
681
|
+
returning: bool = True,
|
|
682
|
+
**attrs: Any,
|
|
683
|
+
) -> List[ModelT] | None:
|
|
684
|
+
"""
|
|
685
|
+
Обновление экземпляров модели пачкой и сохранение в БД.
|
|
686
|
+
Не выполняет валидацию на уровне БД.
|
|
687
|
+
|
|
688
|
+
:param session: сессия SQLAlchemy
|
|
689
|
+
|
|
690
|
+
:param in_obj: модель Pydantic для обновления объектов
|
|
691
|
+
|
|
692
|
+
:param ids: ID обновляемых объектов (в списке, кортеже и т.д.)
|
|
693
|
+
|
|
694
|
+
:param where: фильтр для обновления объектов,
|
|
695
|
+
передаётся в метод .where() SQLAlchemy.
|
|
696
|
+
Используется, если не передан параметр :ids:
|
|
697
|
+
|
|
698
|
+
:param commit: нужно ли вызывать `session.commit()`, если используется
|
|
699
|
+
подход commit as you go
|
|
700
|
+
|
|
701
|
+
:param returning: нужно ли возвращать обновлённые объекты
|
|
702
|
+
|
|
703
|
+
:param attrs: дополнительные значения полей обновляемых экземпляров
|
|
704
|
+
|
|
705
|
+
:returns: обновлённые экземпляры модели или None
|
|
706
|
+
"""
|
|
707
|
+
update_data = in_obj.model_dump() if in_obj else {}
|
|
708
|
+
update_data.update(attrs)
|
|
709
|
+
|
|
710
|
+
stmt = update(self.model).values(update_data)
|
|
711
|
+
if ids:
|
|
712
|
+
stmt = stmt.where(self.model.id.in_(ids))
|
|
713
|
+
elif where:
|
|
714
|
+
stmt = stmt.where(where)
|
|
715
|
+
if returning:
|
|
716
|
+
stmt = stmt.returning(self.model)
|
|
717
|
+
result = await session.execute(stmt)
|
|
718
|
+
await self.save(session, commit=commit)
|
|
719
|
+
if returning:
|
|
720
|
+
return result.scalars().all()
|
|
721
|
+
return None
|
|
722
|
+
|
|
621
723
|
async def delete(
|
|
622
724
|
self, session: AsyncSession, db_obj: ModelT, *, commit: bool = True
|
|
623
725
|
) -> ModelT:
|
|
@@ -637,6 +739,38 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
637
739
|
await self.save(session, commit=commit)
|
|
638
740
|
return db_obj
|
|
639
741
|
|
|
742
|
+
async def bulk_delete(
|
|
743
|
+
self,
|
|
744
|
+
session: AsyncSession,
|
|
745
|
+
ids: Iterable | None = None,
|
|
746
|
+
where: Any | None = None,
|
|
747
|
+
*,
|
|
748
|
+
commit: bool = True,
|
|
749
|
+
) -> None:
|
|
750
|
+
"""
|
|
751
|
+
Удаление экземпляров модели пачкой из БД.
|
|
752
|
+
|
|
753
|
+
:param session: сессия SQLAlchemy
|
|
754
|
+
|
|
755
|
+
:param ids: ID удаляемых объектов (в списке, кортеже и т.д.)
|
|
756
|
+
|
|
757
|
+
:param where: фильтр для удаления объектов,
|
|
758
|
+
передаётся в метод .where() SQLAlchemy.
|
|
759
|
+
Используется, если не передан параметр :ids:
|
|
760
|
+
|
|
761
|
+
:param commit: нужно ли вызывать `session.commit()`, если используется
|
|
762
|
+
подход commit as you go
|
|
763
|
+
|
|
764
|
+
:returns: None
|
|
765
|
+
"""
|
|
766
|
+
stmt = delete(self.model)
|
|
767
|
+
if ids:
|
|
768
|
+
stmt = stmt.where(self.model.id.in_(ids))
|
|
769
|
+
elif where:
|
|
770
|
+
stmt = stmt.where(where)
|
|
771
|
+
await session.execute(stmt)
|
|
772
|
+
await self.save(session, commit=commit)
|
|
773
|
+
|
|
640
774
|
##################################################################################
|
|
641
775
|
# Internal methods
|
|
642
776
|
##################################################################################
|
|
@@ -779,9 +913,9 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
779
913
|
if value is None:
|
|
780
914
|
del filter_expressions[filter_expression]
|
|
781
915
|
elif "ilike" in str(filter_expression):
|
|
782
|
-
filter_expressions[
|
|
783
|
-
filter_expression
|
|
784
|
-
|
|
916
|
+
filter_expressions[filter_expression] = (
|
|
917
|
+
f"%{filter_expressions[filter_expression]}%"
|
|
918
|
+
)
|
|
785
919
|
|
|
786
920
|
@staticmethod
|
|
787
921
|
def handle_nullable_filter_expressions(
|
|
@@ -793,9 +927,9 @@ class ModelManager(Generic[ModelT, CreateSchemaT, UpdateSchemaT]):
|
|
|
793
927
|
elif value is None:
|
|
794
928
|
del nullable_filter_expressions[filter_expression]
|
|
795
929
|
elif "ilike" in str(filter_expression):
|
|
796
|
-
nullable_filter_expressions[
|
|
797
|
-
filter_expression
|
|
798
|
-
|
|
930
|
+
nullable_filter_expressions[filter_expression] = (
|
|
931
|
+
f"%{nullable_filter_expressions[filter_expression]}%"
|
|
932
|
+
)
|
|
799
933
|
|
|
800
934
|
def get_reverse_relation_filter_stmt(
|
|
801
935
|
self,
|
|
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.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/db_validation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/benefits.md
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/db_validation.md
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/extension.md
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/filtering.md
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/sorting.md
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/ru/transactions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/docs/transactions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/api/api.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/api/deps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/config.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/db.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/main.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/managers.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/models.py
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/examples/app/schemas.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/requirements/base.txt
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/requirements/lint.txt
RENAMED
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/requirements/test.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_sqlalchemy_toolkit-0.7.4.1 → fastapi_sqlalchemy_toolkit-0.7.5.1}/tests/docker-compose.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|