fastgenerateapi 1.1.14__tar.gz → 1.1.16__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.
Potentially problematic release.
This version of fastgenerateapi might be problematic. Click here for more details.
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/PKG-INFO +2 -2
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/README.md +1 -1
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/base_view.py +19 -19
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/get_all_view.py +14 -5
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/get_one_view.py +11 -2
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/base_mixin.py +2 -1
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/update_view.py +1 -1
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/common_function.py +10 -8
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi.egg-info/PKG-INFO +2 -2
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/LICENSE +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/create_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/delete_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/get_relation_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/get_tree_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/sql_get_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/switch_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/deps/paginator_deps.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/all_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/app_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/script/__init__.py +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/setup.cfg +0 -0
- {fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fastgenerateapi
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.16
|
|
4
4
|
Summary: FastAPIView Class View
|
|
5
5
|
Author: ShiLiang
|
|
6
6
|
Author-email: 2509144896@qq.com
|
|
@@ -25,7 +25,7 @@ License-File: LICENSE
|
|
|
25
25
|
|
|
26
26
|
#### 版本说明
|
|
27
27
|
[pydantic-v2]
|
|
28
|
-
稳定版本:v1.1.
|
|
28
|
+
稳定版本:v1.1.15+
|
|
29
29
|
建议python版本:3.9+
|
|
30
30
|
推荐fastapi版本:0.103.2+
|
|
31
31
|
推荐pydantic版本:2.11.5+
|
|
@@ -58,11 +58,10 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
58
58
|
|
|
59
59
|
return self.get_active_queryset(self.model_class)
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
@staticmethod
|
|
62
|
+
def get_active_queryset(model_class: Union[Type[Model], QuerySet, None] = None) -> QuerySet:
|
|
62
63
|
if not model_class:
|
|
63
|
-
|
|
64
|
-
return self.error(msg="model_class not allow None")
|
|
65
|
-
model_class = self.model_class
|
|
64
|
+
raise ResponseMixin.error(f"model_class not allow None")
|
|
66
65
|
delete_filter_dict = {settings.app_settings.WHETHER_DELETE_FIELD: True}
|
|
67
66
|
if settings.app_settings.DELETE_FIELD_TYPE == "time":
|
|
68
67
|
delete_filter_dict = {settings.app_settings.WHETHER_DELETE_FIELD: 0}
|
|
@@ -76,26 +75,26 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
76
75
|
return self.error(msg="relation_model_class not allow None")
|
|
77
76
|
return self.get_active_queryset(self.relation_model_class)
|
|
78
77
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
else:
|
|
83
|
-
queryset = self.queryset.filter(id=pk)
|
|
78
|
+
@classmethod
|
|
79
|
+
async def get_object(cls, pk, model_class, is_with_prefetch=False):
|
|
80
|
+
queryset = cls.get_active_queryset(model_class).filter(id=pk)
|
|
84
81
|
if is_with_prefetch:
|
|
85
|
-
queryset = queryset.prefetch_related(*
|
|
82
|
+
queryset = queryset.prefetch_related(*cls.prefetch_related_fields.keys())
|
|
86
83
|
model = await queryset.first()
|
|
87
84
|
if model:
|
|
88
85
|
return model
|
|
89
86
|
else:
|
|
90
87
|
raise NOT_FOUND
|
|
91
88
|
|
|
92
|
-
|
|
89
|
+
@staticmethod
|
|
90
|
+
def _delete_value():
|
|
93
91
|
result = False
|
|
94
92
|
if settings.app_settings.DELETE_FIELD_TYPE == "time":
|
|
95
93
|
result = int(time.time() * 1000)
|
|
96
94
|
return result
|
|
97
95
|
|
|
98
|
-
|
|
96
|
+
@staticmethod
|
|
97
|
+
async def delete_queryset(queryset: QuerySet):
|
|
99
98
|
"""
|
|
100
99
|
考虑到不一定会集成已有的模型,删除根据是否存在字段来判断
|
|
101
100
|
:param queryset:
|
|
@@ -103,7 +102,7 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
103
102
|
"""
|
|
104
103
|
if settings.app_settings.WHETHER_DELETE_FIELD in queryset.fields:
|
|
105
104
|
await queryset.update(**{
|
|
106
|
-
settings.app_settings.WHETHER_DELETE_FIELD:
|
|
105
|
+
settings.app_settings.WHETHER_DELETE_FIELD: BaseView._delete_value()
|
|
107
106
|
})
|
|
108
107
|
else:
|
|
109
108
|
await queryset.delete()
|
|
@@ -155,20 +154,21 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
155
154
|
)
|
|
156
155
|
return schema.model_validate(model_dict)
|
|
157
156
|
|
|
157
|
+
@classmethod
|
|
158
158
|
async def check_unique_field(
|
|
159
|
-
|
|
159
|
+
cls,
|
|
160
160
|
request_data: Union[BaseModel, Model], # 创建或修改的参数数据
|
|
161
161
|
model_class: Type[Model], # 数据库模型
|
|
162
162
|
model: Union[Model, None] = None
|
|
163
163
|
):
|
|
164
|
-
check_unique_fields =
|
|
165
|
-
check_unique_together_fields =
|
|
164
|
+
check_unique_fields = cls._get_unique_fields(model_class) + cls._get_foreign_key_fields(model_class)
|
|
165
|
+
check_unique_together_fields = cls._get_unique_together_fields(model_class)
|
|
166
166
|
for unique_field in check_unique_fields:
|
|
167
167
|
if hasattr(request_data, unique_field):
|
|
168
168
|
if model and getattr(request_data, unique_field) == getattr(model, unique_field):
|
|
169
169
|
continue
|
|
170
170
|
if await model_class.filter(**{unique_field: getattr(request_data, unique_field)}).first():
|
|
171
|
-
|
|
171
|
+
return cls.error(msg=f"{cls.get_field_description(model_class, unique_field)}已存在相同值:{getattr(request_data, unique_field)}")
|
|
172
172
|
for unique_together_fields in check_unique_together_fields:
|
|
173
173
|
filter_fields = {}
|
|
174
174
|
is_equal = True
|
|
@@ -193,8 +193,8 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
193
193
|
if await model_class.filter(**filter_fields).first():
|
|
194
194
|
if settings.app_settings.WHETHER_DELETE_FIELD in description_fields:
|
|
195
195
|
description_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
196
|
-
return
|
|
197
|
-
msg=f"{
|
|
196
|
+
return cls.error(
|
|
197
|
+
msg=f"{cls.get_field_description(model_class, description_fields)}已存在相同值:{[filter_fields.get(field) for field in description_fields]}"
|
|
198
198
|
)
|
|
199
199
|
|
|
200
200
|
# @staticmethod
|
|
@@ -33,6 +33,7 @@ class GetAllView(BaseView, GetMixin):
|
|
|
33
33
|
filter_schema: Optional[Type[PYDANTIC_SCHEMA]] = None
|
|
34
34
|
filter_fields: Union[None, list] = None
|
|
35
35
|
order_by_fields: Union[None, list] = None
|
|
36
|
+
auto_add_id_order: bool = True
|
|
36
37
|
"""
|
|
37
38
|
get_all_route: 获取详情路由开关,可以放依赖函数列表
|
|
38
39
|
get_all_schema: 返回序列化
|
|
@@ -45,6 +46,7 @@ class GetAllView(BaseView, GetMixin):
|
|
|
45
46
|
filter_fields: 筛选对应字段
|
|
46
47
|
example: name__contains or (create_at__gt, datetime) or (create_at__gt, datetime, create_time)
|
|
47
48
|
order_by_fields: 排序对应字段
|
|
49
|
+
auto_add_id_order: 是否自动在 order_by_fields 后面追加id排序
|
|
48
50
|
"""
|
|
49
51
|
|
|
50
52
|
async def get_all(self, search: Optional[str], filters: dict, *args, **kwargs) -> Union[BaseModel, dict, None]:
|
|
@@ -60,10 +62,11 @@ class GetAllView(BaseView, GetMixin):
|
|
|
60
62
|
queryset = await self.filter_queryset(queryset, filters, *args, **kwargs)
|
|
61
63
|
queryset = self.filter_controller.query(queryset=queryset, values=filters)
|
|
62
64
|
queryset = queryset.prefetch_related(*self.prefetch_related_fields.keys())
|
|
65
|
+
if self.auto_add_id_order:
|
|
66
|
+
self.order_by_fields = self.order_by_fields or []
|
|
67
|
+
self.order_by_fields.append("id")
|
|
63
68
|
if self.order_by_fields:
|
|
64
|
-
queryset = queryset.order_by(*self.order_by_fields
|
|
65
|
-
else:
|
|
66
|
-
queryset = queryset.order_by("id")
|
|
69
|
+
queryset = queryset.order_by(*self.order_by_fields)
|
|
67
70
|
|
|
68
71
|
return queryset
|
|
69
72
|
|
|
@@ -166,9 +169,15 @@ class GetAllView(BaseView, GetMixin):
|
|
|
166
169
|
return
|
|
167
170
|
self.search_controller = SearchController(self.get_base_filter(self.search_fields))
|
|
168
171
|
self.filter_controller = FilterController(self.get_base_filter(self.filter_fields, self.filter_schema))
|
|
172
|
+
get_all_schema_include = []
|
|
173
|
+
if self.prefetch_related_fields:
|
|
174
|
+
for key, value in self.prefetch_related_fields.items():
|
|
175
|
+
if value and type(value) in [list, tuple, set]:
|
|
176
|
+
for val in value:
|
|
177
|
+
get_all_schema_include.append(key + "__" + val)
|
|
169
178
|
self.get_all_schema = self.get_all_schema or get_all_schema_factory(
|
|
170
|
-
self.model_class
|
|
171
|
-
|
|
179
|
+
self.model_class, include=get_all_schema_include
|
|
180
|
+
) or self.get_one_schema if hasattr(self, "get_one_schema") else get_one_schema_factory(self.model_class)
|
|
172
181
|
self.get_page_schema = get_page_schema_factory(self.get_all_schema)
|
|
173
182
|
self.get_list_schema = get_list_schema_factory(self.get_all_schema)
|
|
174
183
|
self.get_all_response_schema = response_factory(self.get_page_schema, name="GetPage")
|
|
@@ -38,7 +38,7 @@ class GetOneView(BaseView, GetMixin):
|
|
|
38
38
|
"""
|
|
39
39
|
|
|
40
40
|
async def get_one(self, pk: str, *args, **kwargs):
|
|
41
|
-
model = await self.get_object(pk, is_with_prefetch=self.is_with_prefetch)
|
|
41
|
+
model = await self.get_object(pk, self.model_class, is_with_prefetch=self.is_with_prefetch)
|
|
42
42
|
if self.is_with_prefetch:
|
|
43
43
|
await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields, *args, **kwargs)
|
|
44
44
|
|
|
@@ -66,7 +66,16 @@ class GetOneView(BaseView, GetMixin):
|
|
|
66
66
|
def _handler_get_one_settings(self):
|
|
67
67
|
if not self.get_one_route:
|
|
68
68
|
return
|
|
69
|
-
|
|
69
|
+
get_one_schema_include = []
|
|
70
|
+
if self.is_with_prefetch and self.prefetch_related_fields:
|
|
71
|
+
for key, value in self.prefetch_related_fields.items():
|
|
72
|
+
if value and type(value) in [list, tuple, set]:
|
|
73
|
+
for val in value:
|
|
74
|
+
get_one_schema_include.append(key + "__" + val)
|
|
75
|
+
self.get_one_schema = self.schema or self.get_one_schema or get_one_schema_factory(
|
|
76
|
+
model_class=self.model_class,
|
|
77
|
+
include=get_one_schema_include,
|
|
78
|
+
)
|
|
70
79
|
self.get_one_response_schema = response_factory(self.get_one_schema, name="GetOne")
|
|
71
80
|
doc = self.get_one.__doc__
|
|
72
81
|
summary = doc.strip().split("\n")[0] if self.get_one.__doc__ else "Get One"
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/base_mixin.py
RENAMED
|
@@ -52,7 +52,8 @@ class BaseMixin(Generic[T], APIRouter, ABC):
|
|
|
52
52
|
# if hasattr(self, "_handler_sql_get_all_settings"):
|
|
53
53
|
# getattr(self, "_handler_sql_get_all_settings")()
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
@staticmethod
|
|
56
|
+
def get_base_filter(fields: list, schema: Optional[PYDANTIC_SCHEMA] = None) -> list:
|
|
56
57
|
bast_filter_list = []
|
|
57
58
|
if fields:
|
|
58
59
|
bast_filter_list += [BaseFilter(field) if not isinstance(field, BaseFilter) else field for field in fields]
|
|
@@ -29,7 +29,7 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
29
29
|
|
|
30
30
|
@atomic()
|
|
31
31
|
async def update(self, pk: str, request_data, *args, **kwargs):
|
|
32
|
-
model = await self.get_object(pk)
|
|
32
|
+
model = await self.get_object(pk, self.model_class)
|
|
33
33
|
|
|
34
34
|
request_data = await self.set_update_fields(request_data=request_data, *args, **kwargs)
|
|
35
35
|
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/common_function.py
RENAMED
|
@@ -11,18 +11,20 @@ from fastgenerateapi.settings.all_settings import settings
|
|
|
11
11
|
def get_field_info(value, description="", default_field_type=None) -> (Type, FieldInfo):
|
|
12
12
|
if value.pk:
|
|
13
13
|
return str, FieldInfo()
|
|
14
|
+
|
|
15
|
+
required = False
|
|
14
16
|
if value.field_type is None:
|
|
15
17
|
if default_field_type:
|
|
16
|
-
field_type =
|
|
18
|
+
value.field_type = default_field_type
|
|
17
19
|
else:
|
|
18
|
-
field_type =
|
|
20
|
+
value.field_type = str
|
|
21
|
+
if hasattr(value, "null") and value.null:
|
|
22
|
+
field_type = Optional[value.field_type]
|
|
19
23
|
else:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
field_info_dict = {}
|
|
25
|
-
if hasattr(value, "default") and not hasattr(value.default, '__call__'):
|
|
24
|
+
field_type = value.field_type
|
|
25
|
+
required = True
|
|
26
|
+
field_info_dict = {"required": required}
|
|
27
|
+
if not required and hasattr(value, "default") and not hasattr(value.default, '__call__'):
|
|
26
28
|
field_info_dict.setdefault("default", value.default)
|
|
27
29
|
if hasattr(value, "description"):
|
|
28
30
|
field_info_dict.setdefault("description", description + (value.description or ""))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fastgenerateapi
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.16
|
|
4
4
|
Summary: FastAPIView Class View
|
|
5
5
|
Author: ShiLiang
|
|
6
6
|
Author-email: 2509144896@qq.com
|
|
@@ -25,7 +25,7 @@ License-File: LICENSE
|
|
|
25
25
|
|
|
26
26
|
#### 版本说明
|
|
27
27
|
[pydantic-v2]
|
|
28
|
-
稳定版本:v1.1.
|
|
28
|
+
稳定版本:v1.1.15+
|
|
29
29
|
建议python版本:3.9+
|
|
30
30
|
推荐fastapi版本:0.103.2+
|
|
31
31
|
推荐pydantic版本:2.11.5+
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/delete_filter_view.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/delete_tree_view.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/get_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/save_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/docx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/file_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/pdf_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/mixin/utils/zip_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/api_view/update_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/channel/connection_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/filter_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/router_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/controller/ws_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/data_type/mysql_data_type.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/deps/filter_params_deps.py
RENAMED
|
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
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/fastapi_utils/param_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/fastapi_utils/response_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/pydantic_utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/pydantic_utils/base_model.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/pydantic_utils/base_settings.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/pydantic_utils/json_encoders.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/schemas_factory/__init__.py
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/redis_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi/settings/system_settings.py
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.1.14 → fastgenerateapi-1.1.16}/fastgenerateapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|