fastgenerateapi 1.2.8__tar.gz → 1.2.10__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.8 → fastgenerateapi-1.2.10}/PKG-INFO +1 -1
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/base_view.py +16 -21
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/create_view.py +2 -2
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/get_all_view.py +1 -2
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/get_one_view.py +13 -1
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/switch_view.py +1 -1
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/update_view.py +2 -2
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/common_function.py +59 -12
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/common_schema_factory.py +20 -12
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +5 -3
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -1
- fastgenerateapi-1.2.10/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +102 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +60 -36
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/app_settings.py +3 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- fastgenerateapi-1.2.8/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -79
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/LICENSE +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/README.md +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/delete_view.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/get_relation_view.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/get_tree_view.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/sql_get_view.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/deps/paginator_deps.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/tortoise_utils.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/all_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/setup.cfg +0 -0
- {fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/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,30 +214,25 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
214
214
|
result[key] = val[0]
|
|
215
215
|
return result
|
|
216
216
|
|
|
217
|
-
def
|
|
218
|
-
if not hasattr(self, "get_one_schema") or not self.get_one_schema:
|
|
219
|
-
get_one_schema_include = []
|
|
220
|
-
if hasattr(self, "is_with_prefetch") and self.is_with_prefetch and self.prefetch_related_fields:
|
|
221
|
-
for key, value in self.prefetch_related_fields.items():
|
|
222
|
-
if value and type(value) in [list, tuple, set]:
|
|
223
|
-
for val in value:
|
|
224
|
-
val_str = val
|
|
225
|
-
if type(val) in [list, tuple, set]:
|
|
226
|
-
val_str = val[0]
|
|
227
|
-
get_one_schema_include.append(key + "__" + val_str)
|
|
228
|
-
self.get_one_schema = get_one_schema_factory(model_class=self.model_class, include=get_one_schema_include)
|
|
229
|
-
|
|
230
|
-
return self.get_one_schema
|
|
231
|
-
|
|
232
|
-
def gen_get_one_response_schema_factory(self):
|
|
217
|
+
def get_response_schema(self):
|
|
233
218
|
"""
|
|
234
|
-
如果
|
|
219
|
+
如果response_schema不存在,则生成
|
|
235
220
|
:return:
|
|
236
221
|
"""
|
|
237
|
-
self.
|
|
238
|
-
|
|
222
|
+
if not self.response_schema:
|
|
223
|
+
self.response_schema = get_one_schema_factory(model_class=self.model_class)
|
|
239
224
|
|
|
240
|
-
return self.
|
|
225
|
+
return self.response_schema
|
|
226
|
+
|
|
227
|
+
def get_response_schema_factory(self):
|
|
228
|
+
"""
|
|
229
|
+
如果response_schema不存在,则生成
|
|
230
|
+
:return:
|
|
231
|
+
"""
|
|
232
|
+
self.get_response_schema()
|
|
233
|
+
self.response_schema_factory = response_factory(self.response_schema, name="Common")
|
|
234
|
+
|
|
235
|
+
return self.response_schema_factory
|
|
241
236
|
|
|
242
237
|
|
|
243
238
|
|
|
@@ -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"
|
|
@@ -193,8 +193,7 @@ class GetAllView(BaseView, GetMixin):
|
|
|
193
193
|
if type(val) in [list, tuple, set]:
|
|
194
194
|
val_str = val[0]
|
|
195
195
|
get_all_schema_include.append(key + "__" + val_str)
|
|
196
|
-
self.get_all_schema = get_all_schema_factory(self.model_class,
|
|
197
|
-
if (get_all_schema_include or hasattr_get_all_schema(self.model_class)) else self.gen_get_one_response_schema()
|
|
196
|
+
self.get_all_schema = get_all_schema_factory(self.model_class, extra_include=get_all_schema_include)
|
|
198
197
|
self.get_page_schema = get_page_schema_factory(self.get_all_schema)
|
|
199
198
|
self.get_list_schema = get_list_schema_factory(self.get_all_schema)
|
|
200
199
|
self.get_all_response_schema_factory = response_factory(self.get_page_schema, name="GetPage")
|
|
@@ -75,7 +75,19 @@ 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
|
-
|
|
78
|
+
get_one_schema_include = []
|
|
79
|
+
if self.is_with_prefetch and self.prefetch_related_fields:
|
|
80
|
+
for key, value in self.prefetch_related_fields.items():
|
|
81
|
+
if value and type(value) in [list, tuple, set]:
|
|
82
|
+
for val in value:
|
|
83
|
+
val_str = val
|
|
84
|
+
if type(val) in [list, tuple, set]:
|
|
85
|
+
val_str = val[0]
|
|
86
|
+
get_one_schema_include.append(key + "__" + val_str)
|
|
87
|
+
self.get_one_schema = get_one_schema_factory(
|
|
88
|
+
model_class=self.model_class,
|
|
89
|
+
extra_include=get_one_schema_include
|
|
90
|
+
)
|
|
79
91
|
self.get_one_response_schema_factory = response_factory(self.get_one_schema, name="GetOne")
|
|
80
92
|
if not self.get_one_summary:
|
|
81
93
|
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.8 → fastgenerateapi-1.2.10}/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
|
|
|
@@ -155,13 +169,27 @@ def get_model_validate_text_to_list(fields: Optional[List[str]]) -> dict:
|
|
|
155
169
|
if not fields:
|
|
156
170
|
return {}
|
|
157
171
|
def func(cls, data):
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
172
|
+
if isinstance(data, dict):
|
|
173
|
+
for field in fields:
|
|
174
|
+
value_str = data.get(field, None)
|
|
175
|
+
if isinstance(value_str, (list, tuple, set)):
|
|
176
|
+
field_value = list(value_str)
|
|
177
|
+
elif isinstance(value_str, str):
|
|
178
|
+
field_value = value_str.split(settings.app_settings.TEXT_TO_LIST_SPLIT_VALUE)
|
|
162
179
|
else:
|
|
163
|
-
field_value =
|
|
164
|
-
|
|
180
|
+
field_value = value_str
|
|
181
|
+
data[field] = field_value
|
|
182
|
+
else:
|
|
183
|
+
for field in fields:
|
|
184
|
+
if hasattr(data, field):
|
|
185
|
+
value_str = getattr(data, field)
|
|
186
|
+
if isinstance(value_str, (list, tuple, set)):
|
|
187
|
+
field_value = list(value_str)
|
|
188
|
+
elif isinstance(value_str, str):
|
|
189
|
+
field_value = getattr(data, field).split(settings.app_settings.TEXT_TO_LIST_SPLIT_VALUE)
|
|
190
|
+
else:
|
|
191
|
+
field_value = []
|
|
192
|
+
setattr(data, field, field_value)
|
|
165
193
|
return data
|
|
166
194
|
|
|
167
195
|
return {
|
|
@@ -178,12 +206,31 @@ def get_model_validate_list_to_text(fields: Optional[List[str]]) -> dict:
|
|
|
178
206
|
if not fields:
|
|
179
207
|
return {}
|
|
180
208
|
def func(cls, data: dict):
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
209
|
+
if isinstance(data, dict):
|
|
210
|
+
for field in fields:
|
|
211
|
+
if alias_generator:
|
|
212
|
+
field = alias_generator(field)
|
|
213
|
+
value_list = data.get(field, None)
|
|
214
|
+
if isinstance(value_list, (list, tuple, set)):
|
|
215
|
+
field_value = settings.app_settings.TEXT_TO_LIST_SPLIT_VALUE.join(list(value_list))
|
|
216
|
+
elif isinstance(value_list, str):
|
|
217
|
+
field_value = value_list
|
|
218
|
+
else:
|
|
219
|
+
field_value = None
|
|
220
|
+
data[field] = field_value
|
|
221
|
+
else:
|
|
222
|
+
for field in fields:
|
|
223
|
+
if alias_generator:
|
|
224
|
+
field = alias_generator(field)
|
|
225
|
+
if hasattr(data, field):
|
|
226
|
+
value_list = getattr(data, field)
|
|
227
|
+
if isinstance(value_list, (list, tuple, set)):
|
|
228
|
+
field_value = settings.app_settings.TEXT_TO_LIST_SPLIT_VALUE.join(list(value_list))
|
|
229
|
+
elif isinstance(value_list, str):
|
|
230
|
+
field_value = value_list
|
|
231
|
+
else:
|
|
232
|
+
field_value = None
|
|
233
|
+
setattr(data, field, field_value)
|
|
187
234
|
return data
|
|
188
235
|
|
|
189
236
|
return {
|
|
@@ -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,22 +29,28 @@ 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
34
|
all_fields_info.update(include_fields_dict)
|
|
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.update(include_fields_dict)
|
|
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.update(include_fields_dict)
|
|
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
56
|
all_fields_info.update(include_fields_dict)
|
|
@@ -156,15 +156,17 @@ def get_all_schema_factory(
|
|
|
156
156
|
return schema
|
|
157
157
|
|
|
158
158
|
|
|
159
|
-
def get_list_schema_factory(schema_cls: Type[T] = None, name: str = "") -> Type[T]:
|
|
159
|
+
def get_list_schema_factory(schema_cls: Type[T] = None, response_field: Optional[str] = None, name: str = "") -> Type[T]:
|
|
160
|
+
if not response_field:
|
|
161
|
+
response_field = settings.app_settings.LIST_RESPONSE_FIELD
|
|
160
162
|
if schema_cls:
|
|
161
163
|
fields = {
|
|
162
|
-
|
|
164
|
+
response_field: (Optional[List[schema_cls]], FieldInfo(default=[], description="数据返回")),
|
|
163
165
|
}
|
|
164
166
|
name = schema_cls.__name__ + name + "GetListSchema"
|
|
165
167
|
else:
|
|
166
168
|
fields = {
|
|
167
|
-
|
|
169
|
+
response_field: (Optional[List], FieldInfo(default=[], description="数据返回")),
|
|
168
170
|
}
|
|
169
171
|
name = name + "GetListSchema"
|
|
170
172
|
schema: Type[T] = create_model(name, **fields, __config__=model_config)
|
|
@@ -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
|
+
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from typing import Type, Optional, Union, List
|
|
2
2
|
|
|
3
|
-
from fastgenerateapi.schemas_factory.get_one_schema_factory import get_one_schema_factory
|
|
4
3
|
from pydantic.fields import FieldInfo
|
|
5
4
|
from tortoise import Model
|
|
6
5
|
from pydantic import create_model
|
|
7
6
|
|
|
8
7
|
from fastgenerateapi.data_type.data_type import T
|
|
9
8
|
from fastgenerateapi.pydantic_utils.base_model import model_config
|
|
10
|
-
from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta
|
|
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
11
|
from fastgenerateapi.settings.all_settings import settings
|
|
12
12
|
|
|
13
13
|
|
|
@@ -16,47 +16,65 @@ def get_tree_schema_factory(
|
|
|
16
16
|
include: Union[list, tuple, set] = None,
|
|
17
17
|
extra_include: Union[list, tuple, set] = None,
|
|
18
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,
|
|
19
26
|
name: Optional[str] = None
|
|
20
27
|
) -> Optional[Type[T]]:
|
|
21
28
|
"""
|
|
22
29
|
Is used to create a GetTreeSchema
|
|
23
30
|
"""
|
|
24
|
-
schema_name = name if name else model_class.__name__ + "GetTreeSchema"
|
|
25
|
-
|
|
26
31
|
all_fields_info: dict = get_dict_from_model_fields(model_class)
|
|
27
32
|
|
|
28
33
|
include_fields = set()
|
|
29
34
|
exclude_fields = set()
|
|
30
|
-
|
|
31
|
-
if hasattr(model_class.PydanticMeta, "get_tree_include"):
|
|
32
|
-
get_tree_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_tree_include)
|
|
33
|
-
all_fields_info.update(get_tree_include_fields_dict)
|
|
34
|
-
include_fields.update(get_tree_include_fields_dict.keys())
|
|
35
|
-
if hasattr(model_class.PydanticMeta, "include"):
|
|
36
|
-
include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
|
|
37
|
-
all_fields_info.update(include_fields_dict)
|
|
38
|
-
include_fields.update(include_fields_dict.keys())
|
|
39
|
-
else:
|
|
40
|
-
include_fields.update(all_fields_info.keys())
|
|
41
|
-
|
|
42
|
-
if hasattr(model_class.PydanticMeta, "get_include"):
|
|
43
|
-
get_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_include)
|
|
44
|
-
all_fields_info.update(get_include_fields_dict)
|
|
45
|
-
include_fields.update(get_include_fields_dict.keys())
|
|
46
|
-
if hasattr(model_class.PydanticMeta, "get_exclude"):
|
|
47
|
-
exclude_fields.update(model_class.PydanticMeta.get_exclude)
|
|
48
|
-
|
|
49
|
-
if hasattr(model_class.PydanticMeta, "get_tree_exclude"):
|
|
50
|
-
exclude_fields.update(model_class.PydanticMeta.get_tree_exclude)
|
|
51
|
-
if hasattr(model_class.PydanticMeta, "exclude"):
|
|
52
|
-
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
53
|
-
else:
|
|
54
|
-
include_fields.update(all_fields_info.keys())
|
|
55
|
-
|
|
35
|
+
text_to_list_fields = set()
|
|
56
36
|
if include:
|
|
57
37
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
58
38
|
all_fields_info.update(include_fields_dict)
|
|
59
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
|
+
|
|
60
78
|
if extra_include:
|
|
61
79
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
62
80
|
all_fields_info.update(include_fields_dict)
|
|
@@ -65,20 +83,26 @@ def get_tree_schema_factory(
|
|
|
65
83
|
exclude_fields.update(exclude)
|
|
66
84
|
|
|
67
85
|
all_fields = include_fields.difference(exclude_fields)
|
|
68
|
-
|
|
69
|
-
all_fields_info.setdefault(
|
|
70
|
-
settings.app_settings.DEFAULT_TREE_CHILDREN_FIELD,
|
|
71
|
-
(Optional[List[schema_name]], FieldInfo(default=[], description="子级目录"))
|
|
72
|
-
)
|
|
73
86
|
all_fields.add(settings.app_settings.DEFAULT_TREE_CHILDREN_FIELD)
|
|
74
87
|
if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
|
|
75
88
|
try:
|
|
76
89
|
all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
77
90
|
except Exception:
|
|
78
91
|
...
|
|
92
|
+
schema_name = name if name else model_class.__name__ + "GetTreeSchema"
|
|
79
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)
|
|
80
100
|
schema: Type[T] = create_model(
|
|
81
|
-
schema_name,
|
|
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
|
+
)
|
|
82
106
|
|
|
83
107
|
return schema
|
|
84
108
|
|
|
@@ -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",
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
from typing import Type, Optional, Union, List
|
|
2
|
-
|
|
3
|
-
from fastgenerateapi.schemas_factory.get_one_schema_factory import get_one_schema_factory
|
|
4
|
-
from pydantic.fields import FieldInfo
|
|
5
|
-
from tortoise import Model
|
|
6
|
-
from pydantic import create_model
|
|
7
|
-
|
|
8
|
-
from fastgenerateapi.data_type.data_type import T
|
|
9
|
-
from fastgenerateapi.pydantic_utils.base_model import model_config
|
|
10
|
-
from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta
|
|
11
|
-
from fastgenerateapi.settings.all_settings import settings
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def get_relation_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
|
-
name: Optional[str] = None
|
|
20
|
-
) -> Optional[Type[T]]:
|
|
21
|
-
"""
|
|
22
|
-
Is used to create a GetRelationSchema
|
|
23
|
-
"""
|
|
24
|
-
all_fields_info: dict = get_dict_from_model_fields(model_class)
|
|
25
|
-
|
|
26
|
-
include_fields = set()
|
|
27
|
-
exclude_fields = set()
|
|
28
|
-
if hasattr(model_class, "PydanticMeta"):
|
|
29
|
-
if hasattr(model_class.PydanticMeta, "get_relation_include"):
|
|
30
|
-
get_tree_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_tree_include)
|
|
31
|
-
all_fields_info.update(get_tree_include_fields_dict)
|
|
32
|
-
include_fields.update(get_tree_include_fields_dict.keys())
|
|
33
|
-
if hasattr(model_class.PydanticMeta, "include"):
|
|
34
|
-
include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
|
|
35
|
-
all_fields_info.update(include_fields_dict)
|
|
36
|
-
include_fields.update(include_fields_dict.keys())
|
|
37
|
-
else:
|
|
38
|
-
include_fields.update(all_fields_info.keys())
|
|
39
|
-
if hasattr(model_class.PydanticMeta, "get_relation_exclude"):
|
|
40
|
-
exclude_fields.update(model_class.PydanticMeta.get_tree_exclude)
|
|
41
|
-
if hasattr(model_class.PydanticMeta, "exclude"):
|
|
42
|
-
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
43
|
-
else:
|
|
44
|
-
include_fields.update(all_fields_info.keys())
|
|
45
|
-
|
|
46
|
-
if include:
|
|
47
|
-
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
48
|
-
all_fields_info.update(include_fields_dict)
|
|
49
|
-
include_fields.update(include_fields_dict.keys())
|
|
50
|
-
if extra_include:
|
|
51
|
-
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
52
|
-
all_fields_info.update(include_fields_dict)
|
|
53
|
-
include_fields.update(include_fields_dict.keys())
|
|
54
|
-
if exclude:
|
|
55
|
-
exclude_fields.update(exclude)
|
|
56
|
-
|
|
57
|
-
all_fields = include_fields.difference(exclude_fields)
|
|
58
|
-
|
|
59
|
-
if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
|
|
60
|
-
try:
|
|
61
|
-
all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
62
|
-
except Exception:
|
|
63
|
-
...
|
|
64
|
-
|
|
65
|
-
schema_name = name if name else model_class.__name__ + "GetRelationSchema"
|
|
66
|
-
schema: Type[T] = create_model(
|
|
67
|
-
schema_name, **{field: all_fields_info[field] for field in all_fields}, __config__=model_config)
|
|
68
|
-
|
|
69
|
-
return schema
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/delete_filter_view.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/delete_tree_view.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/base_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/get_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/save_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/docx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/file_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/pdf_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/zip_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/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.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/channel/connection_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/filter_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/router_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/ws_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/data_type/mysql_data_type.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.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/param_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/response_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/tortoise_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.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/base_model.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/base_settings.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/json_encoders.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/response_factory.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.2.8 → fastgenerateapi-1.2.10}/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.2.8 → fastgenerateapi-1.2.10}/fastgenerateapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|