fastgenerateapi 1.2.11__tar.gz → 1.2.13__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.11 → fastgenerateapi-1.2.13}/PKG-INFO +1 -1
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/update_view.py +2 -2
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/common_function.py +32 -2
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/create_schema_factory.py +60 -35
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +57 -58
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +58 -59
- fastgenerateapi-1.2.13/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +101 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +34 -35
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/update_schema_factory.py +62 -37
- fastgenerateapi-1.2.13/fastgenerateapi/validator/__init__.py +0 -0
- fastgenerateapi-1.2.13/fastgenerateapi/validator/validator.py +61 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi.egg-info/SOURCES.txt +2 -0
- fastgenerateapi-1.2.11/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -102
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/LICENSE +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/README.md +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/base_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/create_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/delete_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/get_all_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/get_one_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/get_relation_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/get_tree_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/sql_get_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/switch_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/deps/paginator_deps.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/fastapi_utils/tortoise_utils.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/all_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/app_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/setup.cfg +0 -0
- {fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/setup.py +0 -0
|
@@ -59,8 +59,8 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
59
59
|
async def set_update_model(self, model: Model, data_dict: dict, *args, **kwargs) -> Model:
|
|
60
60
|
"""
|
|
61
61
|
在数据模型校验前后修改值:
|
|
62
|
-
-
|
|
63
|
-
-
|
|
62
|
+
- 这里修改将不做唯一字段校验
|
|
63
|
+
- 可用于例如租户id等全局修改,或者字段变更记录等
|
|
64
64
|
data_dict.update({
|
|
65
65
|
"user_id": request.user.id,
|
|
66
66
|
})
|
{fastgenerateapi-1.2.11 → fastgenerateapi-1.2.13}/fastgenerateapi/schemas_factory/common_function.py
RENAMED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import time
|
|
2
2
|
from datetime import datetime
|
|
3
|
-
from typing import Type, Optional, Union, List
|
|
3
|
+
from typing import Type, Optional, Union, List, Callable
|
|
4
4
|
|
|
5
|
+
from fastapi import HTTPException
|
|
5
6
|
from pydantic import field_validator, model_validator
|
|
6
7
|
from pydantic.fields import FieldInfo
|
|
7
8
|
from tortoise import Model
|
|
8
9
|
|
|
9
10
|
from fastgenerateapi.api_view.mixin.dbmodel_mixin import DBModelMixin
|
|
10
|
-
from fastgenerateapi.pydantic_utils.base_model import alias_generator
|
|
11
|
+
from fastgenerateapi.pydantic_utils.base_model import alias_generator, BaseModel
|
|
11
12
|
from fastgenerateapi.settings.all_settings import settings
|
|
12
13
|
|
|
13
14
|
|
|
@@ -165,6 +166,35 @@ def get_validate_dict_from_fields(fields_info: dict) -> dict:
|
|
|
165
166
|
return validator_dict
|
|
166
167
|
|
|
167
168
|
|
|
169
|
+
class FieldValidateInfo(BaseModel):
|
|
170
|
+
name: str
|
|
171
|
+
is_required: bool
|
|
172
|
+
description: str
|
|
173
|
+
func: Callable
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def get_field_validate_dict(infos: List[FieldValidateInfo]) -> dict:
|
|
177
|
+
"""
|
|
178
|
+
字段做校验
|
|
179
|
+
:param infos:
|
|
180
|
+
:return:
|
|
181
|
+
"""
|
|
182
|
+
if not infos:
|
|
183
|
+
return {}
|
|
184
|
+
|
|
185
|
+
def _func(i: FieldValidateInfo):
|
|
186
|
+
def func(cls, value):
|
|
187
|
+
is_empty = value is None or value == ''
|
|
188
|
+
if i.is_required and is_empty:
|
|
189
|
+
raise HTTPException(status_code=422, detail=i.description+"不能为空")
|
|
190
|
+
if not is_empty and not i.func(value):
|
|
191
|
+
raise HTTPException(status_code=422, detail=i.description+"校验不通过")
|
|
192
|
+
return value
|
|
193
|
+
return func
|
|
194
|
+
|
|
195
|
+
return {"check_"+info.name: field_validator(info.name)(_func(info)) for info in infos}
|
|
196
|
+
|
|
197
|
+
|
|
168
198
|
def get_model_validate_text_to_list(fields: Optional[List[str]]) -> dict:
|
|
169
199
|
"""
|
|
170
200
|
详情列表用于返回
|
|
@@ -8,7 +8,7 @@ from tortoise import Model
|
|
|
8
8
|
|
|
9
9
|
from fastgenerateapi.data_type.data_type import T
|
|
10
10
|
from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
|
|
11
|
-
get_validate_dict_from_fields, get_model_validate_list_to_text
|
|
11
|
+
get_validate_dict_from_fields, get_model_validate_list_to_text, FieldValidateInfo, get_field_validate_dict
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
def create_schema_factory(
|
|
@@ -17,12 +17,15 @@ def create_schema_factory(
|
|
|
17
17
|
extra_include: Union[list, tuple, set] = None,
|
|
18
18
|
exclude: Union[list, tuple, set] = None,
|
|
19
19
|
frozen_exclude: Union[list, tuple, set] = ("created_at", "updated_at", "modified_at"),
|
|
20
|
+
pydantic_meta: Optional[bool] = True,
|
|
20
21
|
pydantic_meta_include: Union[list, tuple, set] = None,
|
|
21
22
|
pydantic_meta_exclude: Optional[bool] = True,
|
|
22
23
|
pydantic_meta_save_include: Optional[bool] = True,
|
|
23
24
|
pydantic_meta_save_exclude: Optional[bool] = True,
|
|
24
25
|
pydantic_meta_create_include: Optional[bool] = True,
|
|
25
26
|
pydantic_meta_create_exclude: Optional[bool] = True,
|
|
27
|
+
pydantic_meta_save_validate: Optional[bool] = True,
|
|
28
|
+
pydantic_meta_create_validate: Optional[bool] = True,
|
|
26
29
|
pydantic_meta_text_to_list: Optional[bool] = True,
|
|
27
30
|
name: Optional[str] = None
|
|
28
31
|
) -> Type[T]:
|
|
@@ -36,6 +39,8 @@ def create_schema_factory(
|
|
|
36
39
|
- save_exclude: 增改通用,指定排除字段
|
|
37
40
|
- create_include: 增使用,额外添加字段
|
|
38
41
|
- create_exclude: 增使用,指定排除字段
|
|
42
|
+
- save_validate: 增改通用,指定字段做校验
|
|
43
|
+
- create_validate: 增使用,指定字段做校验
|
|
39
44
|
|
|
40
45
|
逻辑顺序:合并所有include和exclude,排除include下包含的exclude字段
|
|
41
46
|
|
|
@@ -65,53 +70,72 @@ def create_schema_factory(
|
|
|
65
70
|
("item_id_list", List[str], FieldInfo(description="多对多关联id列表")),
|
|
66
71
|
]
|
|
67
72
|
save_exclude = ["ignore_field"]
|
|
73
|
+
save_validate = [("phone", phone_validate), ("id_card", id_card_validate)]
|
|
68
74
|
create_include = ["create_user"]
|
|
69
75
|
create_exclude = []
|
|
76
|
+
create_validate = []
|
|
70
77
|
"""
|
|
71
78
|
all_fields_info = get_dict_from_model_fields(model_class)
|
|
72
79
|
|
|
73
80
|
include_fields = set()
|
|
74
81
|
exclude_fields = set()
|
|
75
82
|
text_to_list_fields = set()
|
|
83
|
+
validate_field_info = []
|
|
76
84
|
if include:
|
|
77
85
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
78
86
|
all_fields_info.update(include_fields_dict)
|
|
79
87
|
include_fields.update(include_fields_dict.keys())
|
|
80
|
-
|
|
81
|
-
if
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
all_fields_info.update(include_fields_dict)
|
|
90
|
-
include_fields.update(include_fields_dict.keys())
|
|
91
|
-
else:
|
|
92
|
-
include_fields.update(all_fields_info.keys())
|
|
93
|
-
if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
|
|
94
|
-
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
95
|
-
if pydantic_meta_save_include and hasattr(model_class.PydanticMeta, "save_include"):
|
|
96
|
-
save_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.save_include)
|
|
97
|
-
all_fields_info.update(save_include_fields_dict)
|
|
98
|
-
include_fields.update(save_include_fields_dict.keys())
|
|
99
|
-
if pydantic_meta_create_include and hasattr(model_class.PydanticMeta, "create_include"):
|
|
100
|
-
create_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.create_include)
|
|
101
|
-
all_fields_info.update(create_include_fields_dict)
|
|
102
|
-
include_fields.update(create_include_fields_dict.keys())
|
|
103
|
-
if pydantic_meta_save_exclude and hasattr(model_class.PydanticMeta, "save_exclude"):
|
|
104
|
-
exclude_fields.update(model_class.PydanticMeta.save_exclude)
|
|
105
|
-
if pydantic_meta_create_exclude and hasattr(model_class.PydanticMeta, "create_exclude"):
|
|
106
|
-
exclude_fields.update(model_class.PydanticMeta.create_exclude)
|
|
107
|
-
if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
|
|
108
|
-
text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
|
|
109
|
-
for field in text_to_list_fields:
|
|
110
|
-
field_info = all_fields_info.get(field)[1]
|
|
111
|
-
field_type = Union[List[str], str] if field_info.is_required() else Union[List[str], str, None]
|
|
112
|
-
all_fields_info.update({field: (field_type, field_info)})
|
|
88
|
+
elif pydantic_meta and hasattr(model_class, "PydanticMeta"):
|
|
89
|
+
if pydantic_meta_include:
|
|
90
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, pydantic_meta_include)
|
|
91
|
+
all_fields_info.update(include_fields_dict)
|
|
92
|
+
include_fields.update(include_fields_dict.keys())
|
|
93
|
+
elif hasattr(model_class.PydanticMeta, "include"):
|
|
94
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
|
|
95
|
+
all_fields_info.update(include_fields_dict)
|
|
96
|
+
include_fields.update(include_fields_dict.keys())
|
|
113
97
|
else:
|
|
114
98
|
include_fields.update(all_fields_info.keys())
|
|
99
|
+
if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
|
|
100
|
+
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
101
|
+
if pydantic_meta_save_include and hasattr(model_class.PydanticMeta, "save_include"):
|
|
102
|
+
save_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.save_include)
|
|
103
|
+
all_fields_info.update(save_include_fields_dict)
|
|
104
|
+
include_fields.update(save_include_fields_dict.keys())
|
|
105
|
+
if pydantic_meta_create_include and hasattr(model_class.PydanticMeta, "create_include"):
|
|
106
|
+
create_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.create_include)
|
|
107
|
+
all_fields_info.update(create_include_fields_dict)
|
|
108
|
+
include_fields.update(create_include_fields_dict.keys())
|
|
109
|
+
if pydantic_meta_save_exclude and hasattr(model_class.PydanticMeta, "save_exclude"):
|
|
110
|
+
exclude_fields.update(model_class.PydanticMeta.save_exclude)
|
|
111
|
+
if pydantic_meta_create_exclude and hasattr(model_class.PydanticMeta, "create_exclude"):
|
|
112
|
+
exclude_fields.update(model_class.PydanticMeta.create_exclude)
|
|
113
|
+
if pydantic_meta_save_validate and hasattr(model_class.PydanticMeta, "save_validate"):
|
|
114
|
+
for validate in model_class.PydanticMeta.save_validate:
|
|
115
|
+
file_type, file_info = all_fields_info.get(validate[0])
|
|
116
|
+
validate_field_info.append(FieldValidateInfo(
|
|
117
|
+
name=validate[0],
|
|
118
|
+
is_required=file_info.is_required(),
|
|
119
|
+
description=file_info.description,
|
|
120
|
+
func=validate[1],
|
|
121
|
+
))
|
|
122
|
+
if pydantic_meta_create_validate and hasattr(model_class.PydanticMeta, "create_validate"):
|
|
123
|
+
for validate in model_class.PydanticMeta.create_validate:
|
|
124
|
+
file_type, file_info = all_fields_info.get(validate[0])
|
|
125
|
+
validate_field_info.append(FieldValidateInfo(
|
|
126
|
+
name=validate[0],
|
|
127
|
+
is_required=file_info.is_required(),
|
|
128
|
+
description=file_info.description,
|
|
129
|
+
func=validate[1],
|
|
130
|
+
))
|
|
131
|
+
if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
|
|
132
|
+
text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
|
|
133
|
+
for field in text_to_list_fields:
|
|
134
|
+
field_info = all_fields_info.get(field)[1]
|
|
135
|
+
field_type = Union[List[str], str] if field_info.is_required() else Union[List[str], str, None]
|
|
136
|
+
all_fields_info.update({field: (field_type, field_info)})
|
|
137
|
+
else:
|
|
138
|
+
include_fields.update(all_fields_info.keys())
|
|
115
139
|
|
|
116
140
|
if extra_include:
|
|
117
141
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
@@ -136,12 +160,13 @@ def create_schema_factory(
|
|
|
136
160
|
schema_name = name if name else model_class.__name__ + "CreateSchema"
|
|
137
161
|
schema_field_dict = {field: all_fields_info[field] for field in all_fields}
|
|
138
162
|
validators_dict = get_validate_dict_from_fields(schema_field_dict)
|
|
163
|
+
field_validators = get_field_validate_dict(validate_field_info)
|
|
139
164
|
text_to_list_validators_dict = get_model_validate_list_to_text(text_to_list_fields)
|
|
140
165
|
schema: Type[T] = create_model(
|
|
141
166
|
schema_name,
|
|
142
167
|
**schema_field_dict,
|
|
143
168
|
__config__=model_config,
|
|
144
|
-
__validators__={**validators_dict, **text_to_list_validators_dict},
|
|
169
|
+
__validators__={**validators_dict, **field_validators, **text_to_list_validators_dict},
|
|
145
170
|
)
|
|
146
171
|
return schema
|
|
147
172
|
|
|
@@ -24,6 +24,7 @@ def get_all_schema_factory(
|
|
|
24
24
|
include: Union[list, tuple, set] = None,
|
|
25
25
|
extra_include: Union[list, tuple, set] = None,
|
|
26
26
|
exclude: Union[list, tuple, set] = None,
|
|
27
|
+
pydantic_meta: Optional[bool] = True,
|
|
27
28
|
pydantic_meta_include: Union[list, tuple, set] = None,
|
|
28
29
|
pydantic_meta_exclude: Optional[bool] = True,
|
|
29
30
|
pydantic_meta_get_include: Optional[bool] = True,
|
|
@@ -93,67 +94,65 @@ def get_all_schema_factory(
|
|
|
93
94
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
94
95
|
all_fields_info = {**include_fields_dict, **all_fields_info}
|
|
95
96
|
include_fields.update(include_fields_dict.keys())
|
|
96
|
-
|
|
97
|
-
if
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
all_fields_info.update(include_fields_dict)
|
|
106
|
-
include_fields.update(include_fields_dict.keys())
|
|
107
|
-
else:
|
|
108
|
-
include_fields.update(all_fields_info.keys())
|
|
109
|
-
if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
|
|
110
|
-
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
111
|
-
|
|
112
|
-
if pydantic_meta_get_include and hasattr(model_class.PydanticMeta, "get_include"):
|
|
113
|
-
get_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_include)
|
|
114
|
-
all_fields_info.update(get_include_fields_dict)
|
|
115
|
-
include_fields.update(get_include_fields_dict.keys())
|
|
116
|
-
if pydantic_meta_get_exclude and hasattr(model_class.PydanticMeta, "get_exclude"):
|
|
117
|
-
exclude_fields.update(model_class.PydanticMeta.get_exclude)
|
|
118
|
-
|
|
119
|
-
if pydantic_meta_get_all_include and hasattr(model_class.PydanticMeta, "get_all_include"):
|
|
120
|
-
get_all_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_all_include)
|
|
121
|
-
all_fields_info.update(get_all_include_fields_dict)
|
|
122
|
-
include_fields.update(get_all_include_fields_dict.keys())
|
|
123
|
-
if pydantic_meta_get_all_exclude and hasattr(model_class.PydanticMeta, "get_all_exclude"):
|
|
124
|
-
exclude_fields.update(model_class.PydanticMeta.get_all_exclude)
|
|
125
|
-
if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
|
|
126
|
-
text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
|
|
127
|
-
for field in text_to_list_fields:
|
|
128
|
-
field_info = all_fields_info.get(field)[1]
|
|
129
|
-
field_type = List[str] if field_info.is_required() else Optional[List[str]]
|
|
130
|
-
all_fields_info.update({field: (field_type, field_info)})
|
|
97
|
+
elif pydantic_meta and hasattr(model_class, "PydanticMeta"):
|
|
98
|
+
if pydantic_meta_include:
|
|
99
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, pydantic_meta_include)
|
|
100
|
+
all_fields_info.update(include_fields_dict)
|
|
101
|
+
include_fields.update(include_fields_dict.keys())
|
|
102
|
+
elif hasattr(model_class.PydanticMeta, "include"):
|
|
103
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
|
|
104
|
+
all_fields_info.update(include_fields_dict)
|
|
105
|
+
include_fields.update(include_fields_dict.keys())
|
|
131
106
|
else:
|
|
132
107
|
include_fields.update(all_fields_info.keys())
|
|
108
|
+
if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
|
|
109
|
+
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
110
|
+
|
|
111
|
+
if pydantic_meta_get_include and hasattr(model_class.PydanticMeta, "get_include"):
|
|
112
|
+
get_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_include)
|
|
113
|
+
all_fields_info.update(get_include_fields_dict)
|
|
114
|
+
include_fields.update(get_include_fields_dict.keys())
|
|
115
|
+
if pydantic_meta_get_exclude and hasattr(model_class.PydanticMeta, "get_exclude"):
|
|
116
|
+
exclude_fields.update(model_class.PydanticMeta.get_exclude)
|
|
117
|
+
|
|
118
|
+
if pydantic_meta_get_all_include and hasattr(model_class.PydanticMeta, "get_all_include"):
|
|
119
|
+
get_all_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_all_include)
|
|
120
|
+
all_fields_info.update(get_all_include_fields_dict)
|
|
121
|
+
include_fields.update(get_all_include_fields_dict.keys())
|
|
122
|
+
if pydantic_meta_get_all_exclude and hasattr(model_class.PydanticMeta, "get_all_exclude"):
|
|
123
|
+
exclude_fields.update(model_class.PydanticMeta.get_all_exclude)
|
|
124
|
+
if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
|
|
125
|
+
text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
|
|
126
|
+
for field in text_to_list_fields:
|
|
127
|
+
field_info = all_fields_info.get(field)[1]
|
|
128
|
+
field_type = List[str] if field_info.is_required() else Optional[List[str]]
|
|
129
|
+
all_fields_info.update({field: (field_type, field_info)})
|
|
130
|
+
else:
|
|
131
|
+
include_fields.update(all_fields_info.keys())
|
|
133
132
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
133
|
+
if extra_include:
|
|
134
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
135
|
+
all_fields_info.update(include_fields_dict)
|
|
136
|
+
include_fields.update(include_fields_dict.keys())
|
|
137
|
+
if exclude:
|
|
138
|
+
exclude_fields.update(exclude)
|
|
139
|
+
|
|
140
|
+
all_fields = include_fields.difference(exclude_fields)
|
|
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__ + "GetAllSchema"
|
|
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
|
|
157
156
|
|
|
158
157
|
|
|
159
158
|
def get_list_schema_factory(schema_cls: Type[T] = None, response_field: Optional[str] = None, name: str = "") -> Type[T]:
|
|
@@ -25,6 +25,7 @@ def get_one_schema_factory(
|
|
|
25
25
|
include: Union[list, tuple, set] = None,
|
|
26
26
|
extra_include: Union[list, tuple, set] = None,
|
|
27
27
|
exclude: Union[list, tuple, set] = None,
|
|
28
|
+
pydantic_meta: Optional[bool] = True,
|
|
28
29
|
pydantic_meta_include: Union[list, tuple, set] = None,
|
|
29
30
|
pydantic_meta_exclude: Optional[bool] = True,
|
|
30
31
|
pydantic_meta_get_include: Optional[bool] = True,
|
|
@@ -91,68 +92,66 @@ def get_one_schema_factory(
|
|
|
91
92
|
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
92
93
|
all_fields_info = {**include_fields_dict, **all_fields_info}
|
|
93
94
|
include_fields.update(include_fields_dict.keys())
|
|
94
|
-
|
|
95
|
-
if
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
all_fields_info.update(include_fields_dict)
|
|
104
|
-
include_fields.update(include_fields_dict.keys())
|
|
105
|
-
else:
|
|
106
|
-
include_fields.update(all_fields_info.keys())
|
|
107
|
-
if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
|
|
108
|
-
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
109
|
-
|
|
110
|
-
if pydantic_meta_get_include and hasattr(model_class.PydanticMeta, "get_include"):
|
|
111
|
-
get_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_include)
|
|
112
|
-
all_fields_info.update(get_include_fields_dict)
|
|
113
|
-
include_fields.update(get_include_fields_dict.keys())
|
|
114
|
-
if pydantic_meta_get_exclude and hasattr(model_class.PydanticMeta, "get_exclude"):
|
|
115
|
-
exclude_fields.update(model_class.PydanticMeta.get_exclude)
|
|
116
|
-
|
|
117
|
-
if pydantic_meta_get_one_include and hasattr(model_class.PydanticMeta, "get_one_include"):
|
|
118
|
-
get_one_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_one_include)
|
|
119
|
-
all_fields_info.update(get_one_include_fields_dict)
|
|
120
|
-
include_fields.update(get_one_include_fields_dict.keys())
|
|
121
|
-
if pydantic_meta_get_one_exclude and hasattr(model_class.PydanticMeta, "get_one_exclude"):
|
|
122
|
-
exclude_fields.update(model_class.PydanticMeta.get_one_exclude)
|
|
123
|
-
if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
|
|
124
|
-
text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
|
|
125
|
-
for field in text_to_list_fields:
|
|
126
|
-
field_info = all_fields_info.get(field)[1]
|
|
127
|
-
field_type = List[str] if field_info.is_required() else Optional[List[str]]
|
|
128
|
-
all_fields_info.update({field: (field_type, field_info)})
|
|
95
|
+
elif pydantic_meta and hasattr(model_class, "PydanticMeta"):
|
|
96
|
+
if pydantic_meta_include:
|
|
97
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, pydantic_meta_include)
|
|
98
|
+
all_fields_info.update(include_fields_dict)
|
|
99
|
+
include_fields.update(include_fields_dict.keys())
|
|
100
|
+
elif hasattr(model_class.PydanticMeta, "include"):
|
|
101
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
|
|
102
|
+
all_fields_info.update(include_fields_dict)
|
|
103
|
+
include_fields.update(include_fields_dict.keys())
|
|
129
104
|
else:
|
|
130
105
|
include_fields.update(all_fields_info.keys())
|
|
106
|
+
if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
|
|
107
|
+
exclude_fields.update(model_class.PydanticMeta.exclude)
|
|
108
|
+
|
|
109
|
+
if pydantic_meta_get_include and hasattr(model_class.PydanticMeta, "get_include"):
|
|
110
|
+
get_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_include)
|
|
111
|
+
all_fields_info.update(get_include_fields_dict)
|
|
112
|
+
include_fields.update(get_include_fields_dict.keys())
|
|
113
|
+
if pydantic_meta_get_exclude and hasattr(model_class.PydanticMeta, "get_exclude"):
|
|
114
|
+
exclude_fields.update(model_class.PydanticMeta.get_exclude)
|
|
115
|
+
|
|
116
|
+
if pydantic_meta_get_one_include and hasattr(model_class.PydanticMeta, "get_one_include"):
|
|
117
|
+
get_one_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_one_include)
|
|
118
|
+
all_fields_info.update(get_one_include_fields_dict)
|
|
119
|
+
include_fields.update(get_one_include_fields_dict.keys())
|
|
120
|
+
if pydantic_meta_get_one_exclude and hasattr(model_class.PydanticMeta, "get_one_exclude"):
|
|
121
|
+
exclude_fields.update(model_class.PydanticMeta.get_one_exclude)
|
|
122
|
+
if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
|
|
123
|
+
text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
|
|
124
|
+
for field in text_to_list_fields:
|
|
125
|
+
field_info = all_fields_info.get(field)[1]
|
|
126
|
+
field_type = List[str] if field_info.is_required() else Optional[List[str]]
|
|
127
|
+
all_fields_info.update({field: (field_type, field_info)})
|
|
128
|
+
else:
|
|
129
|
+
include_fields.update(all_fields_info.keys())
|
|
131
130
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
131
|
+
if extra_include:
|
|
132
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
133
|
+
all_fields_info.update(include_fields_dict)
|
|
134
|
+
include_fields.update(include_fields_dict.keys())
|
|
135
|
+
if exclude:
|
|
136
|
+
exclude_fields.update(exclude)
|
|
137
|
+
|
|
138
|
+
all_fields = include_fields.difference(exclude_fields)
|
|
139
|
+
|
|
140
|
+
if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
|
|
141
|
+
try:
|
|
142
|
+
all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
143
|
+
except Exception:
|
|
144
|
+
...
|
|
145
|
+
|
|
146
|
+
schema_name = name if name else model_class.__name__ + "GetOneSchema"
|
|
147
|
+
text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
|
|
148
|
+
schema: Type[T] = create_model(
|
|
149
|
+
schema_name,
|
|
150
|
+
**{field: all_fields_info[field] for field in all_fields},
|
|
151
|
+
__config__=model_config,
|
|
152
|
+
__validators__={**text_to_list_validators_dict},
|
|
153
|
+
)
|
|
154
|
+
return schema
|
|
156
155
|
|
|
157
156
|
|
|
158
157
|
|
|
@@ -0,0 +1,101 @@
|
|
|
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: Optional[bool] = True,
|
|
19
|
+
pydantic_meta_include: Union[list, tuple, set] = None,
|
|
20
|
+
pydantic_meta_exclude: Optional[bool] = True,
|
|
21
|
+
pydantic_meta_get_relation_include: Optional[bool] = True,
|
|
22
|
+
pydantic_meta_get_relation_exclude: Optional[bool] = True,
|
|
23
|
+
pydantic_meta_text_to_list: Optional[bool] = True,
|
|
24
|
+
name: Optional[str] = None
|
|
25
|
+
) -> Optional[Type[T]]:
|
|
26
|
+
"""
|
|
27
|
+
Is used to create a GetRelationSchema
|
|
28
|
+
"""
|
|
29
|
+
all_fields_info: dict = get_dict_from_model_fields(model_class)
|
|
30
|
+
|
|
31
|
+
include_fields = set()
|
|
32
|
+
exclude_fields = set()
|
|
33
|
+
text_to_list_fields = set()
|
|
34
|
+
if include:
|
|
35
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
|
|
36
|
+
all_fields_info.update(include_fields_dict)
|
|
37
|
+
include_fields.update(include_fields_dict.keys())
|
|
38
|
+
elif pydantic_meta and 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
|
+
elif 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
|
+
|
|
52
|
+
if pydantic_meta_get_relation_include and hasattr(model_class.PydanticMeta, "get_relation_include"):
|
|
53
|
+
get_tree_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_tree_include)
|
|
54
|
+
all_fields_info.update(get_tree_include_fields_dict)
|
|
55
|
+
include_fields.update(get_tree_include_fields_dict.keys())
|
|
56
|
+
if pydantic_meta_get_relation_exclude and hasattr(model_class.PydanticMeta, "get_relation_exclude"):
|
|
57
|
+
exclude_fields.update(model_class.PydanticMeta.get_tree_exclude)
|
|
58
|
+
if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
|
|
59
|
+
text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
|
|
60
|
+
for field in text_to_list_fields:
|
|
61
|
+
field_info = all_fields_info.get(field)[1]
|
|
62
|
+
field_type = List[str] if field_info.is_required() else Optional[List[str]]
|
|
63
|
+
all_fields_info.update({field: (field_type, field_info)})
|
|
64
|
+
else:
|
|
65
|
+
include_fields.update(all_fields_info.keys())
|
|
66
|
+
|
|
67
|
+
if extra_include:
|
|
68
|
+
include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
|
|
69
|
+
all_fields_info.update(include_fields_dict)
|
|
70
|
+
include_fields.update(include_fields_dict.keys())
|
|
71
|
+
if exclude:
|
|
72
|
+
exclude_fields.update(exclude)
|
|
73
|
+
|
|
74
|
+
all_fields = include_fields.difference(exclude_fields)
|
|
75
|
+
|
|
76
|
+
if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
|
|
77
|
+
try:
|
|
78
|
+
all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
79
|
+
except Exception:
|
|
80
|
+
...
|
|
81
|
+
|
|
82
|
+
schema_name = name if name else model_class.__name__ + "GetRelationSchema"
|
|
83
|
+
text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
|
|
84
|
+
schema: Type[T] = create_model(
|
|
85
|
+
schema_name,
|
|
86
|
+
**{field: all_fields_info[field] for field in all_fields},
|
|
87
|
+
__config__=model_config,
|
|
88
|
+
__validators__={**text_to_list_validators_dict},
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
return schema
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|