fastgenerateapi 1.2.9__tar.gz → 1.2.11__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.
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/PKG-INFO +1 -1
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/base_view.py +15 -11
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/create_view.py +2 -2
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/get_all_view.py +7 -4
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/get_one_view.py +2 -1
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/switch_view.py +1 -1
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/update_view.py +2 -2
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/common_function.py +22 -3
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/common_schema_factory.py +22 -14
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +24 -24
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +32 -26
- fastgenerateapi-1.2.11/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +102 -0
- fastgenerateapi-1.2.11/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +111 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/app_settings.py +3 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- fastgenerateapi-1.2.9/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -79
- fastgenerateapi-1.2.9/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -164
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/LICENSE +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/README.md +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/delete_view.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/get_relation_view.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/get_tree_view.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/sql_get_view.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/deps/paginator_deps.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/fastapi_utils/tortoise_utils.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/all_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/setup.cfg +0 -0
- {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/setup.py +0 -0
|
@@ -26,7 +26,7 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
26
26
|
model_class: Optional[Type[Model]] = None # 数据库模型
|
|
27
27
|
prefetch_related_fields: Union[None, dict] = None
|
|
28
28
|
is_with_prefetch: Optional[bool] = False
|
|
29
|
-
|
|
29
|
+
response_schema: Optional[Type[BaseModel]] = None # 通用返回序列化
|
|
30
30
|
dependencies: Optional[Sequence[params.Depends]] = None
|
|
31
31
|
tags: Optional[List[str]] = None # swagger标签
|
|
32
32
|
check_ignore_error_fields: Optional[List[str]] = None # 检查唯一字段报错时,不展示这个字段
|
|
@@ -214,10 +214,14 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
214
214
|
result[key] = val[0]
|
|
215
215
|
return result
|
|
216
216
|
|
|
217
|
-
def
|
|
218
|
-
|
|
217
|
+
def get_response_schema(self):
|
|
218
|
+
"""
|
|
219
|
+
如果response_schema不存在,则生成
|
|
220
|
+
:return:
|
|
221
|
+
"""
|
|
222
|
+
if not self.response_schema:
|
|
219
223
|
get_one_schema_include = []
|
|
220
|
-
if
|
|
224
|
+
if self.is_with_prefetch and self.prefetch_related_fields:
|
|
221
225
|
for key, value in self.prefetch_related_fields.items():
|
|
222
226
|
if value and type(value) in [list, tuple, set]:
|
|
223
227
|
for val in value:
|
|
@@ -225,19 +229,19 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
225
229
|
if type(val) in [list, tuple, set]:
|
|
226
230
|
val_str = val[0]
|
|
227
231
|
get_one_schema_include.append(key + "__" + val_str)
|
|
228
|
-
self.
|
|
232
|
+
self.response_schema = get_one_schema_factory(self.model_class, extra_include=get_one_schema_include)
|
|
229
233
|
|
|
230
|
-
return self.
|
|
234
|
+
return self.response_schema
|
|
231
235
|
|
|
232
|
-
def
|
|
236
|
+
def get_response_schema_factory(self):
|
|
233
237
|
"""
|
|
234
|
-
如果
|
|
238
|
+
如果response_schema不存在,则生成
|
|
235
239
|
:return:
|
|
236
240
|
"""
|
|
237
|
-
self.
|
|
238
|
-
self.
|
|
241
|
+
self.get_response_schema()
|
|
242
|
+
self.response_schema_factory = response_factory(self.response_schema, name="Common")
|
|
239
243
|
|
|
240
|
-
return self.
|
|
244
|
+
return self.response_schema_factory
|
|
241
245
|
|
|
242
246
|
|
|
243
247
|
|
|
@@ -114,8 +114,8 @@ class CreateView(BaseView, SaveMixin):
|
|
|
114
114
|
if self.create_response_schema:
|
|
115
115
|
self.create_response_schema_factory = response_factory(self.create_response_schema, name="Create")
|
|
116
116
|
else:
|
|
117
|
-
self.create_response_schema_factory = self.
|
|
118
|
-
self.create_response_schema = self.
|
|
117
|
+
self.create_response_schema_factory = self.get_response_schema_factory()
|
|
118
|
+
self.create_response_schema = self.response_schema
|
|
119
119
|
if not self.create_summary:
|
|
120
120
|
doc = self.create.__doc__
|
|
121
121
|
self.create_summary = doc.strip().split("\n")[0] if doc else f"Create"
|
|
@@ -152,9 +152,10 @@ class GetAllView(BaseView, GetMixin):
|
|
|
152
152
|
key_builder=generate_key_builder))
|
|
153
153
|
async def route(
|
|
154
154
|
request: Request,
|
|
155
|
-
paginator
|
|
155
|
+
paginator=Depends(paginator_deps()),
|
|
156
156
|
search: Optional[str] = Depends(search_params_deps(self.search_fields)),
|
|
157
|
-
filters: dict = Depends(filter_params_deps(model_class=self.model_class, fields=self.filter_fields,
|
|
157
|
+
filters: dict = Depends(filter_params_deps(model_class=self.model_class, fields=self.filter_fields,
|
|
158
|
+
schema=self.filter_schema)),
|
|
158
159
|
extra_filters: dict = Depends(extra_filter_params_deps(schema=self.extra_filter_schema)),
|
|
159
160
|
token: Optional[str] = Depends(OAuth2PasswordBearer(tokenUrl="token", auto_error=False)),
|
|
160
161
|
) -> JSONResponse:
|
|
@@ -193,8 +194,10 @@ class GetAllView(BaseView, GetMixin):
|
|
|
193
194
|
if type(val) in [list, tuple, set]:
|
|
194
195
|
val_str = val[0]
|
|
195
196
|
get_all_schema_include.append(key + "__" + val_str)
|
|
196
|
-
|
|
197
|
-
|
|
197
|
+
if hasattr_get_all_schema(self.model_class) or get_all_schema_include:
|
|
198
|
+
self.get_all_schema = get_all_schema_factory(self.model_class, extra_include=get_all_schema_include)
|
|
199
|
+
else:
|
|
200
|
+
self.get_all_schema = self.get_response_schema()
|
|
198
201
|
self.get_page_schema = get_page_schema_factory(self.get_all_schema)
|
|
199
202
|
self.get_list_schema = get_list_schema_factory(self.get_all_schema)
|
|
200
203
|
self.get_all_response_schema_factory = response_factory(self.get_page_schema, name="GetPage")
|
|
@@ -75,7 +75,8 @@ class GetOneView(BaseView, GetMixin):
|
|
|
75
75
|
if func_type != inspect._empty and func_type is not None:
|
|
76
76
|
self.get_one_schema = func_type
|
|
77
77
|
if not self.get_one_schema:
|
|
78
|
-
self.get_one_schema = self.
|
|
78
|
+
self.get_one_schema = self.get_response_schema()
|
|
79
|
+
|
|
79
80
|
self.get_one_response_schema_factory = response_factory(self.get_one_schema, name="GetOne")
|
|
80
81
|
if not self.get_one_summary:
|
|
81
82
|
doc = self.get_one.__doc__
|
|
@@ -66,7 +66,7 @@ class SwitchView(BaseView):
|
|
|
66
66
|
path="/%s/{pk}" % ("switch_"+switch_route_field),
|
|
67
67
|
endpoint=self._switch_decorator(switch_route_field),
|
|
68
68
|
methods=["PUT"],
|
|
69
|
-
response_model=self.
|
|
69
|
+
response_model=self.get_response_schema_factory(),
|
|
70
70
|
summary=summary,
|
|
71
71
|
dependencies=True,
|
|
72
72
|
error_responses=[NOT_FOUND],
|
|
@@ -107,8 +107,8 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
107
107
|
if self.update_response_schema:
|
|
108
108
|
self.update_response_schema_factory = response_factory(self.update_response_schema, name="Update")
|
|
109
109
|
else:
|
|
110
|
-
self.update_response_schema_factory = self.
|
|
111
|
-
self.update_response_schema = self.
|
|
110
|
+
self.update_response_schema_factory = self.get_response_schema_factory()
|
|
111
|
+
self.update_response_schema = self.response_schema
|
|
112
112
|
if not self.update_summary:
|
|
113
113
|
doc = self.update.__doc__
|
|
114
114
|
self.update_summary = doc.strip().split("\n")[0] if doc else f"Update"
|
{fastgenerateapi-1.2.9 → fastgenerateapi-1.2.11}/fastgenerateapi/schemas_factory/common_function.py
RENAMED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import time
|
|
2
|
+
from datetime import datetime
|
|
1
3
|
from typing import Type, Optional, Union, List
|
|
2
4
|
|
|
3
5
|
from pydantic import field_validator, model_validator
|
|
@@ -42,6 +44,18 @@ def get_field_info(value, description="", default_field_type=None) -> (Type, Fie
|
|
|
42
44
|
if constraints:
|
|
43
45
|
for key, val in constraints.items():
|
|
44
46
|
field_info_dict.setdefault(key, val)
|
|
47
|
+
if settings.app_settings.SWAGGER_OPEN_DEFAULT_EXAMPLES:
|
|
48
|
+
examples = []
|
|
49
|
+
if value.field_type == str:
|
|
50
|
+
examples.append(value.description)
|
|
51
|
+
elif value.field_type == int:
|
|
52
|
+
if hasattr(value, "start_num"):
|
|
53
|
+
examples.append(value.start_num)
|
|
54
|
+
else:
|
|
55
|
+
examples.append(0)
|
|
56
|
+
elif value.field_type == datetime:
|
|
57
|
+
examples.append(int(time.time() * 1000))
|
|
58
|
+
field_info_dict.setdefault("examples", examples)
|
|
45
59
|
return field_type, FieldInfo(**field_info_dict)
|
|
46
60
|
|
|
47
61
|
|
|
@@ -63,11 +77,16 @@ def get_field_info_from_model_class(model_class: Type[Model], field: str, descri
|
|
|
63
77
|
return Optional[str], FieldInfo(default=None, description=f"{field}")
|
|
64
78
|
return get_field_info(value, description=description)
|
|
65
79
|
|
|
66
|
-
|
|
80
|
+
split_left_field = field.split("__", maxsplit=1)[0]
|
|
81
|
+
field_info = model_class._meta.fields_map.get(split_left_field)
|
|
67
82
|
if field_info:
|
|
68
83
|
description += field_info.description or ""
|
|
84
|
+
elif split_left_field.endswith("_id"):
|
|
85
|
+
field_info = model_class._meta.fields_map.get(split_left_field.removesuffix("_id"))
|
|
86
|
+
if field_info:
|
|
87
|
+
description += field_info.description or ""
|
|
69
88
|
|
|
70
|
-
model_class = DBModelMixin._get_foreign_key_relation_class(model_class,
|
|
89
|
+
model_class = DBModelMixin._get_foreign_key_relation_class(model_class, split_left_field)
|
|
71
90
|
|
|
72
91
|
return get_field_info_from_model_class(model_class, field.split("__", maxsplit=1)[1], description)
|
|
73
92
|
|
|
@@ -89,7 +108,7 @@ def get_dict_from_pydanticmeta(model_class: Type[Model], data: Union[list, tuple
|
|
|
89
108
|
if len(field) == 2:
|
|
90
109
|
if isinstance(field[1], str):
|
|
91
110
|
key_field = field[1]
|
|
92
|
-
|
|
111
|
+
elif isinstance(field[1], FieldInfo):
|
|
93
112
|
field_info = field[1]
|
|
94
113
|
else:
|
|
95
114
|
field_type = field[1]
|
|
@@ -17,6 +17,8 @@ def common_schema_factory(
|
|
|
17
17
|
extra_include: Union[list, tuple, set] = None,
|
|
18
18
|
exclude: Union[list, tuple, set] = None,
|
|
19
19
|
exclude_readonly: Optional[bool] = False,
|
|
20
|
+
pydantic_meta_include: Union[list, tuple, set] = None,
|
|
21
|
+
pydantic_meta_exclude: Optional[bool] = True,
|
|
20
22
|
) -> Type[T]:
|
|
21
23
|
"""
|
|
22
24
|
Is used to create a CommonSchema
|
|
@@ -27,25 +29,31 @@ def common_schema_factory(
|
|
|
27
29
|
exclude_fields = set()
|
|
28
30
|
if exclude_readonly:
|
|
29
31
|
exclude_fields.update(["id", "created_at", "modified_at", "updated_at"])
|
|
30
|
-
if hasattr(model_class, "PydanticMeta"):
|
|
31
|
-
if hasattr(model_class.PydanticMeta, "include"):
|
|
32
|
-
include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
|
|
33
|
-
all_fields_info.update(include_fields_dict)
|
|
34
|
-
include_fields.update(include_fields_dict.keys())
|
|
35
|
-
else:
|
|
36
|
-
include_fields.update(all_fields_info.keys())
|
|
37
|
-
if hasattr(model_class.PydanticMeta, "exclude"):
|
|
38
|
-
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
39
|
-
else:
|
|
40
|
-
include_fields.update(all_fields_info.keys())
|
|
41
|
-
|
|
42
32
|
if include:
|
|
43
33
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
44
|
-
all_fields_info
|
|
34
|
+
all_fields_info = {**include_fields_dict, **all_fields_info}
|
|
45
35
|
include_fields.update(include_fields_dict.keys())
|
|
36
|
+
else:
|
|
37
|
+
if hasattr(model_class, "PydanticMeta"):
|
|
38
|
+
if pydantic_meta_include:
|
|
39
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, pydantic_meta_include)
|
|
40
|
+
all_fields_info = {**include_fields_dict, **all_fields_info}
|
|
41
|
+
include_fields.update(include_fields_dict.keys())
|
|
42
|
+
else:
|
|
43
|
+
if hasattr(model_class.PydanticMeta, "include"):
|
|
44
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
|
|
45
|
+
all_fields_info = {**include_fields_dict, **all_fields_info}
|
|
46
|
+
include_fields.update(include_fields_dict.keys())
|
|
47
|
+
else:
|
|
48
|
+
include_fields.update(all_fields_info.keys())
|
|
49
|
+
if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
|
|
50
|
+
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
51
|
+
else:
|
|
52
|
+
include_fields.update(all_fields_info.keys())
|
|
53
|
+
|
|
46
54
|
if extra_include:
|
|
47
55
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
48
|
-
all_fields_info
|
|
56
|
+
all_fields_info = {**include_fields_dict, **all_fields_info}
|
|
49
57
|
include_fields.update(include_fields_dict.keys())
|
|
50
58
|
if exclude:
|
|
51
59
|
exclude_fields.update(exclude)
|
|
@@ -91,7 +91,7 @@ def get_all_schema_factory(
|
|
|
91
91
|
text_to_list_fields = set()
|
|
92
92
|
if include:
|
|
93
93
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
94
|
-
all_fields_info
|
|
94
|
+
all_fields_info = {**include_fields_dict, **all_fields_info}
|
|
95
95
|
include_fields.update(include_fields_dict.keys())
|
|
96
96
|
else:
|
|
97
97
|
if hasattr(model_class, "PydanticMeta"):
|
|
@@ -131,29 +131,29 @@ def get_all_schema_factory(
|
|
|
131
131
|
else:
|
|
132
132
|
include_fields.update(all_fields_info.keys())
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
134
|
+
if extra_include:
|
|
135
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
136
|
+
all_fields_info.update(include_fields_dict)
|
|
137
|
+
include_fields.update(include_fields_dict.keys())
|
|
138
|
+
if exclude:
|
|
139
|
+
exclude_fields.update(exclude)
|
|
140
|
+
|
|
141
|
+
all_fields = include_fields.difference(exclude_fields)
|
|
142
|
+
if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
|
|
143
|
+
try:
|
|
144
|
+
all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
145
|
+
except Exception:
|
|
146
|
+
...
|
|
147
|
+
|
|
148
|
+
schema_name = name if name else model_class.__name__ + "GetAllSchema"
|
|
149
|
+
text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
|
|
150
|
+
schema: Type[T] = create_model(
|
|
151
|
+
schema_name,
|
|
152
|
+
**{field: all_fields_info[field] for field in all_fields},
|
|
153
|
+
__config__=model_config,
|
|
154
|
+
__validators__={**text_to_list_validators_dict},
|
|
155
|
+
)
|
|
156
|
+
return schema
|
|
157
157
|
|
|
158
158
|
|
|
159
159
|
def get_list_schema_factory(schema_cls: Type[T] = None, response_field: Optional[str] = None, name: str = "") -> Type[T]:
|
|
@@ -4,7 +4,6 @@ from pydantic_core import PydanticUndefined
|
|
|
4
4
|
|
|
5
5
|
from fastgenerateapi.settings.all_settings import settings
|
|
6
6
|
|
|
7
|
-
# from fastgenerateapi.pydantic_utils.base_model import Config
|
|
8
7
|
from pydantic import create_model
|
|
9
8
|
from tortoise import Model
|
|
10
9
|
|
|
@@ -13,6 +12,13 @@ from fastgenerateapi.pydantic_utils.base_model import model_config
|
|
|
13
12
|
from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
|
|
14
13
|
get_model_validate_text_to_list
|
|
15
14
|
|
|
15
|
+
def hasattr_get_one_schema(model_class: Type[Model],):
|
|
16
|
+
if not hasattr(model_class, "PydanticMeta"):
|
|
17
|
+
return False
|
|
18
|
+
if hasattr(model_class.PydanticMeta, "get_one_include") or hasattr(model_class.PydanticMeta, "get_one_exclude"):
|
|
19
|
+
return True
|
|
20
|
+
return False
|
|
21
|
+
|
|
16
22
|
|
|
17
23
|
def get_one_schema_factory(
|
|
18
24
|
model_class: Type[Model],
|
|
@@ -83,7 +89,7 @@ def get_one_schema_factory(
|
|
|
83
89
|
text_to_list_fields = set()
|
|
84
90
|
if include:
|
|
85
91
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
86
|
-
all_fields_info
|
|
92
|
+
all_fields_info = {**include_fields_dict, **all_fields_info}
|
|
87
93
|
include_fields.update(include_fields_dict.keys())
|
|
88
94
|
else:
|
|
89
95
|
if hasattr(model_class, "PydanticMeta"):
|
|
@@ -123,30 +129,30 @@ def get_one_schema_factory(
|
|
|
123
129
|
else:
|
|
124
130
|
include_fields.update(all_fields_info.keys())
|
|
125
131
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
132
|
+
if extra_include:
|
|
133
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
134
|
+
all_fields_info.update(include_fields_dict)
|
|
135
|
+
include_fields.update(include_fields_dict.keys())
|
|
136
|
+
if exclude:
|
|
137
|
+
exclude_fields.update(exclude)
|
|
138
|
+
|
|
139
|
+
all_fields = include_fields.difference(exclude_fields)
|
|
140
|
+
|
|
141
|
+
if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
|
|
142
|
+
try:
|
|
143
|
+
all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
144
|
+
except Exception:
|
|
145
|
+
...
|
|
146
|
+
|
|
147
|
+
schema_name = name if name else model_class.__name__ + "GetOneSchema"
|
|
148
|
+
text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
|
|
149
|
+
schema: Type[T] = create_model(
|
|
150
|
+
schema_name,
|
|
151
|
+
**{field: all_fields_info[field] for field in all_fields},
|
|
152
|
+
__config__=model_config,
|
|
153
|
+
__validators__={**text_to_list_validators_dict},
|
|
154
|
+
)
|
|
155
|
+
return schema
|
|
150
156
|
|
|
151
157
|
|
|
152
158
|
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
from typing import Type, Optional, Union, List
|
|
2
|
+
|
|
3
|
+
from tortoise import Model
|
|
4
|
+
from pydantic import create_model
|
|
5
|
+
|
|
6
|
+
from fastgenerateapi.data_type.data_type import T
|
|
7
|
+
from fastgenerateapi.pydantic_utils.base_model import model_config
|
|
8
|
+
from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
|
|
9
|
+
get_model_validate_text_to_list
|
|
10
|
+
from fastgenerateapi.settings.all_settings import settings
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_relation_schema_factory(
|
|
14
|
+
model_class: Type[Model],
|
|
15
|
+
include: Union[list, tuple, set] = None,
|
|
16
|
+
extra_include: Union[list, tuple, set] = None,
|
|
17
|
+
exclude: Union[list, tuple, set] = None,
|
|
18
|
+
pydantic_meta_include: Union[list, tuple, set] = None,
|
|
19
|
+
pydantic_meta_exclude: Optional[bool] = True,
|
|
20
|
+
pydantic_meta_get_relation_include: Optional[bool] = True,
|
|
21
|
+
pydantic_meta_get_relation_exclude: Optional[bool] = True,
|
|
22
|
+
pydantic_meta_text_to_list: Optional[bool] = True,
|
|
23
|
+
name: Optional[str] = None
|
|
24
|
+
) -> Optional[Type[T]]:
|
|
25
|
+
"""
|
|
26
|
+
Is used to create a GetRelationSchema
|
|
27
|
+
"""
|
|
28
|
+
all_fields_info: dict = get_dict_from_model_fields(model_class)
|
|
29
|
+
|
|
30
|
+
include_fields = set()
|
|
31
|
+
exclude_fields = set()
|
|
32
|
+
text_to_list_fields = set()
|
|
33
|
+
if include:
|
|
34
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
35
|
+
all_fields_info.update(include_fields_dict)
|
|
36
|
+
include_fields.update(include_fields_dict.keys())
|
|
37
|
+
else:
|
|
38
|
+
if hasattr(model_class, "PydanticMeta"):
|
|
39
|
+
if pydantic_meta_include:
|
|
40
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, pydantic_meta_include)
|
|
41
|
+
all_fields_info.update(include_fields_dict)
|
|
42
|
+
include_fields.update(include_fields_dict.keys())
|
|
43
|
+
else:
|
|
44
|
+
if hasattr(model_class.PydanticMeta, "include"):
|
|
45
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
|
|
46
|
+
all_fields_info.update(include_fields_dict)
|
|
47
|
+
include_fields.update(include_fields_dict.keys())
|
|
48
|
+
else:
|
|
49
|
+
include_fields.update(all_fields_info.keys())
|
|
50
|
+
if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
|
|
51
|
+
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
52
|
+
|
|
53
|
+
if pydantic_meta_get_relation_include and hasattr(model_class.PydanticMeta, "get_relation_include"):
|
|
54
|
+
get_tree_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_tree_include)
|
|
55
|
+
all_fields_info.update(get_tree_include_fields_dict)
|
|
56
|
+
include_fields.update(get_tree_include_fields_dict.keys())
|
|
57
|
+
if pydantic_meta_get_relation_exclude and hasattr(model_class.PydanticMeta, "get_relation_exclude"):
|
|
58
|
+
exclude_fields.update(model_class.PydanticMeta.get_tree_exclude)
|
|
59
|
+
if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
|
|
60
|
+
text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
|
|
61
|
+
for field in text_to_list_fields:
|
|
62
|
+
field_info = all_fields_info.get(field)[1]
|
|
63
|
+
field_type = List[str] if field_info.is_required() else Optional[List[str]]
|
|
64
|
+
all_fields_info.update({field: (field_type, field_info)})
|
|
65
|
+
else:
|
|
66
|
+
include_fields.update(all_fields_info.keys())
|
|
67
|
+
|
|
68
|
+
if extra_include:
|
|
69
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
70
|
+
all_fields_info.update(include_fields_dict)
|
|
71
|
+
include_fields.update(include_fields_dict.keys())
|
|
72
|
+
if exclude:
|
|
73
|
+
exclude_fields.update(exclude)
|
|
74
|
+
|
|
75
|
+
all_fields = include_fields.difference(exclude_fields)
|
|
76
|
+
|
|
77
|
+
if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
|
|
78
|
+
try:
|
|
79
|
+
all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
80
|
+
except Exception:
|
|
81
|
+
...
|
|
82
|
+
|
|
83
|
+
schema_name = name if name else model_class.__name__ + "GetRelationSchema"
|
|
84
|
+
text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
|
|
85
|
+
schema: Type[T] = create_model(
|
|
86
|
+
schema_name,
|
|
87
|
+
**{field: all_fields_info[field] for field in all_fields},
|
|
88
|
+
__config__=model_config,
|
|
89
|
+
__validators__={**text_to_list_validators_dict},
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
return schema
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
from typing import Type, Optional, Union, List
|
|
2
|
+
|
|
3
|
+
from pydantic.fields import FieldInfo
|
|
4
|
+
from tortoise import Model
|
|
5
|
+
from pydantic import create_model
|
|
6
|
+
|
|
7
|
+
from fastgenerateapi.data_type.data_type import T
|
|
8
|
+
from fastgenerateapi.pydantic_utils.base_model import model_config
|
|
9
|
+
from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
|
|
10
|
+
get_model_validate_text_to_list
|
|
11
|
+
from fastgenerateapi.settings.all_settings import settings
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_tree_schema_factory(
|
|
15
|
+
model_class: Type[Model],
|
|
16
|
+
include: Union[list, tuple, set] = None,
|
|
17
|
+
extra_include: Union[list, tuple, set] = None,
|
|
18
|
+
exclude: Union[list, tuple, set] = None,
|
|
19
|
+
pydantic_meta_include: Union[list, tuple, set] = None,
|
|
20
|
+
pydantic_meta_exclude: Optional[bool] = True,
|
|
21
|
+
pydantic_meta_get_include: Optional[bool] = True,
|
|
22
|
+
pydantic_meta_get_exclude: Optional[bool] = True,
|
|
23
|
+
pydantic_meta_get_tree_include: Optional[bool] = True,
|
|
24
|
+
pydantic_meta_get_tree_exclude: Optional[bool] = True,
|
|
25
|
+
pydantic_meta_text_to_list: Optional[bool] = True,
|
|
26
|
+
name: Optional[str] = None
|
|
27
|
+
) -> Optional[Type[T]]:
|
|
28
|
+
"""
|
|
29
|
+
Is used to create a GetTreeSchema
|
|
30
|
+
"""
|
|
31
|
+
all_fields_info: dict = get_dict_from_model_fields(model_class)
|
|
32
|
+
|
|
33
|
+
include_fields = set()
|
|
34
|
+
exclude_fields = set()
|
|
35
|
+
text_to_list_fields = set()
|
|
36
|
+
if include:
|
|
37
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
38
|
+
all_fields_info.update(include_fields_dict)
|
|
39
|
+
include_fields.update(include_fields_dict.keys())
|
|
40
|
+
else:
|
|
41
|
+
if hasattr(model_class, "PydanticMeta"):
|
|
42
|
+
if pydantic_meta_include:
|
|
43
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, pydantic_meta_include)
|
|
44
|
+
all_fields_info.update(include_fields_dict)
|
|
45
|
+
include_fields.update(include_fields_dict.keys())
|
|
46
|
+
else:
|
|
47
|
+
if hasattr(model_class.PydanticMeta, "include"):
|
|
48
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
|
|
49
|
+
all_fields_info.update(include_fields_dict)
|
|
50
|
+
include_fields.update(include_fields_dict.keys())
|
|
51
|
+
else:
|
|
52
|
+
include_fields.update(all_fields_info.keys())
|
|
53
|
+
if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
|
|
54
|
+
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
55
|
+
|
|
56
|
+
if pydantic_meta_get_include and hasattr(model_class.PydanticMeta, "get_include"):
|
|
57
|
+
get_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_include)
|
|
58
|
+
all_fields_info.update(get_include_fields_dict)
|
|
59
|
+
include_fields.update(get_include_fields_dict.keys())
|
|
60
|
+
if pydantic_meta_get_exclude and hasattr(model_class.PydanticMeta, "get_exclude"):
|
|
61
|
+
exclude_fields.update(model_class.PydanticMeta.get_exclude)
|
|
62
|
+
|
|
63
|
+
if pydantic_meta_get_tree_include and hasattr(model_class.PydanticMeta, "get_tree_include"):
|
|
64
|
+
get_tree_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_tree_include)
|
|
65
|
+
all_fields_info.update(get_tree_include_fields_dict)
|
|
66
|
+
include_fields.update(get_tree_include_fields_dict.keys())
|
|
67
|
+
if pydantic_meta_get_tree_exclude and hasattr(model_class.PydanticMeta, "get_tree_exclude"):
|
|
68
|
+
exclude_fields.update(model_class.PydanticMeta.get_tree_exclude)
|
|
69
|
+
if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
|
|
70
|
+
text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
|
|
71
|
+
for field in text_to_list_fields:
|
|
72
|
+
field_info = all_fields_info.get(field)[1]
|
|
73
|
+
field_type = List[str] if field_info.is_required() else Optional[List[str]]
|
|
74
|
+
all_fields_info.update({field: (field_type, field_info)})
|
|
75
|
+
else:
|
|
76
|
+
include_fields.update(all_fields_info.keys())
|
|
77
|
+
|
|
78
|
+
if extra_include:
|
|
79
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
80
|
+
all_fields_info.update(include_fields_dict)
|
|
81
|
+
include_fields.update(include_fields_dict.keys())
|
|
82
|
+
if exclude:
|
|
83
|
+
exclude_fields.update(exclude)
|
|
84
|
+
|
|
85
|
+
all_fields = include_fields.difference(exclude_fields)
|
|
86
|
+
all_fields.add(settings.app_settings.DEFAULT_TREE_CHILDREN_FIELD)
|
|
87
|
+
if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
|
|
88
|
+
try:
|
|
89
|
+
all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
90
|
+
except Exception:
|
|
91
|
+
...
|
|
92
|
+
schema_name = name if name else model_class.__name__ + "GetTreeSchema"
|
|
93
|
+
|
|
94
|
+
all_fields_info.setdefault(
|
|
95
|
+
settings.app_settings.DEFAULT_TREE_CHILDREN_FIELD,
|
|
96
|
+
(Optional[List[schema_name]], FieldInfo(default=[], description="子级目录"))
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
|
|
100
|
+
schema: Type[T] = create_model(
|
|
101
|
+
schema_name,
|
|
102
|
+
**{field: all_fields_info[field] for field in all_fields},
|
|
103
|
+
__config__=model_config,
|
|
104
|
+
__validators__={**text_to_list_validators_dict},
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
return schema
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
@@ -89,6 +89,9 @@ class AppSettings(BaseSettings):
|
|
|
89
89
|
CACHE_TREE_WHETHER_OPEN: Optional[bool] = Field(default=False, description="树状查询是否打开缓存")
|
|
90
90
|
CACHE_TREE_SECONDS: int = Field(default=3600, description="树状查询缓存时间,单位秒")
|
|
91
91
|
|
|
92
|
+
# ####################################### Swagger文档相关 ###############################################
|
|
93
|
+
SWAGGER_OPEN_DEFAULT_EXAMPLES: Optional[bool] = Field(default=False, description="是否添加默认值")
|
|
94
|
+
|
|
92
95
|
model_config = SettingsConfigDict(
|
|
93
96
|
env_prefix="APP_",
|
|
94
97
|
env_file=".env",
|