fastgenerateapi 1.2.5__tar.gz → 1.2.6__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.5 → fastgenerateapi-1.2.6}/PKG-INFO +1 -1
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/base_view.py +5 -16
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/create_view.py +5 -5
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/delete_filter_view.py +5 -5
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/delete_tree_view.py +5 -5
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/delete_view.py +5 -18
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/get_all_view.py +16 -8
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/get_one_view.py +6 -5
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/get_relation_view.py +5 -4
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/get_tree_view.py +5 -4
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -5
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/get_mixin.py +1 -1
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/update_relation_view.py +5 -5
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/update_view.py +5 -4
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/router_controller.py +5 -38
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/ws_controller.py +3 -13
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/deps/filter_params_deps.py +24 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/example/views.py +0 -4
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/all_settings.py +6 -4
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/LICENSE +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/README.md +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/sql_get_view.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/switch_view.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/deps/paginator_deps.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/tortoise_utils.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/common_function.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/app_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/setup.cfg +0 -0
- {fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/setup.py +0 -0
|
@@ -29,7 +29,7 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
29
29
|
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: List[str] = None # 检查唯一字段报错时,不展示这个字段
|
|
33
33
|
|
|
34
34
|
"""
|
|
35
35
|
# 增加外键字段显示
|
|
@@ -38,20 +38,6 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
38
38
|
"avatar": ["id", ("url", "avatar_url")] # 增加 avatar_id,avatar_url2个字段
|
|
39
39
|
}
|
|
40
40
|
is_with_prefetch: 是否带有列表的prefetch_related_fields
|
|
41
|
-
|
|
42
|
-
# router_args: List[Union[str, tuple, BaseRouterSummary]] = None
|
|
43
|
-
# 给函数设置路由以及其他参数
|
|
44
|
-
# key为方法名,例如:"get_one", "view_get_data"
|
|
45
|
-
router_args = {
|
|
46
|
-
"get_one": {
|
|
47
|
-
"response_model": CommonResponse;
|
|
48
|
-
"summary": "备注",
|
|
49
|
-
"dependencies": ["依赖函数"],
|
|
50
|
-
}
|
|
51
|
-
// 或者 "get_one": CommonResponse,
|
|
52
|
-
// 或者 "get_one": "备注",
|
|
53
|
-
// 或者 "get_one": ["依赖函数"],
|
|
54
|
-
}
|
|
55
41
|
"""
|
|
56
42
|
|
|
57
43
|
@property
|
|
@@ -162,13 +148,15 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
162
148
|
cls,
|
|
163
149
|
data_dict: dict,
|
|
164
150
|
model_class: Type[Model],
|
|
165
|
-
model: Union[Model, None] = None
|
|
151
|
+
model: Union[Model, None] = None,
|
|
152
|
+
check_ignore_error_fields: List[str] = None,
|
|
166
153
|
):
|
|
167
154
|
"""
|
|
168
155
|
校验模型中设置了 唯一索引和联合唯一索引 的字段
|
|
169
156
|
:param data_dict: 修改或创建的数据字典
|
|
170
157
|
:param model_class: 数据库模型
|
|
171
158
|
:param model: 修改前的数据,用于判断是否修改了字段,当唯一字段与数据data_dict一致时,不会做校验
|
|
159
|
+
:param check_ignore_error_fields: 错误提示忽略字段,会合并类上的字段
|
|
172
160
|
:return:
|
|
173
161
|
"""
|
|
174
162
|
check_unique_fields = cls._get_unique_fields(model_class)
|
|
@@ -204,6 +192,7 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
204
192
|
continue
|
|
205
193
|
|
|
206
194
|
if await model_class.filter(**filter_fields).first():
|
|
195
|
+
ignore_error_field_list = check_ignore_error_fields or []
|
|
207
196
|
if settings.app_settings.WHETHER_DELETE_FIELD in description_fields:
|
|
208
197
|
description_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
|
|
209
198
|
return cls.error(
|
|
@@ -20,7 +20,7 @@ from fastgenerateapi.settings.all_settings import settings
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class CreateView(BaseView, SaveMixin):
|
|
23
|
-
|
|
23
|
+
create_summary: Optional[str] = None
|
|
24
24
|
create_route: Union[bool, DEPENDENCIES] = True
|
|
25
25
|
create_schema: Optional[Type[BaseModel]] = None
|
|
26
26
|
create_response_schema: Optional[Type[BaseModel]] = None
|
|
@@ -116,16 +116,16 @@ class CreateView(BaseView, SaveMixin):
|
|
|
116
116
|
else:
|
|
117
117
|
self.create_response_schema_factory = self.gen_get_one_response_schema_factory()
|
|
118
118
|
self.create_response_schema = self.get_one_schema
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
if not self.create_summary:
|
|
120
|
+
doc = self.create.__doc__
|
|
121
|
+
self.create_summary = doc.strip().split("\n")[0] if doc else f"Create"
|
|
122
122
|
path = f"/{settings.app_settings.ROUTER_CREATE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
123
123
|
self._add_api_route(
|
|
124
124
|
path=path,
|
|
125
125
|
endpoint=self._create_decorator(),
|
|
126
126
|
methods=["POST"],
|
|
127
127
|
response_model=self.create_response_schema_factory, # type: ignore
|
|
128
|
-
summary=
|
|
128
|
+
summary=self.create_summary,
|
|
129
129
|
dependencies=self.create_route,
|
|
130
130
|
)
|
|
131
131
|
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/delete_filter_view.py
RENAMED
|
@@ -17,7 +17,7 @@ from fastgenerateapi.settings.all_settings import settings
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class DeleteFilterView(BaseView):
|
|
20
|
-
|
|
20
|
+
delete_filter_summary: Optional[str] = None
|
|
21
21
|
delete_filter_route: Union[bool, DEPENDENCIES] = True
|
|
22
22
|
delete_filter_response_schema: Optional[Type[BaseModel]] = None
|
|
23
23
|
"""
|
|
@@ -64,16 +64,16 @@ class DeleteFilterView(BaseView):
|
|
|
64
64
|
self.delete_filter_response_schema = func_type
|
|
65
65
|
if self.delete_filter_response_schema:
|
|
66
66
|
self.delete_filter_response_schema_factory = response_factory(self.delete_filter_response_schema, name="DeleteFilter")
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
if not self.delete_filter_summary:
|
|
68
|
+
doc = self.destroy_filter.__doc__
|
|
69
|
+
self.delete_filter_summary = doc.strip().split("\n")[0] if doc else "Delete Filter"
|
|
70
70
|
path = f"/{settings.app_settings.ROUTER_FILTER_DELETE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
71
71
|
self._add_api_route(
|
|
72
72
|
path=path,
|
|
73
73
|
endpoint=self._delete_filter_decorator(),
|
|
74
74
|
methods=["DELETE"],
|
|
75
75
|
response_model=self.delete_filter_response_schema_factory,
|
|
76
|
-
summary=
|
|
76
|
+
summary=self.delete_filter_summary,
|
|
77
77
|
dependencies=self.delete_filter_route,
|
|
78
78
|
)
|
|
79
79
|
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/delete_tree_view.py
RENAMED
|
@@ -18,7 +18,7 @@ from fastgenerateapi.settings.all_settings import settings
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class DeleteTreeView(BaseView):
|
|
21
|
-
|
|
21
|
+
delete_tree_summary: Optional[str] = None
|
|
22
22
|
delete_tree_route: Union[bool, DEPENDENCIES] = True
|
|
23
23
|
delete_tree_schema: Optional[Type[BaseModel]] = IdList
|
|
24
24
|
delete_tree_response_schema: Optional[Type[BaseModel]] = None
|
|
@@ -89,16 +89,16 @@ class DeleteTreeView(BaseView):
|
|
|
89
89
|
self.delete_tree_response_schema = func_type
|
|
90
90
|
if self.delete_tree_response_schema:
|
|
91
91
|
self.delete_tree_response_schema_factory = response_factory(self.delete_tree_response_schema, name="DeleteTree")
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
if not self.delete_tree_summary:
|
|
93
|
+
doc = self.destroy_tree.__doc__
|
|
94
|
+
self.delete_tree_summary = doc.strip().split("\n")[0] if doc else "Delete Tree"
|
|
95
95
|
path = f"/{settings.app_settings.ROUTER_RECURSION_DELETE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
96
96
|
self._add_api_route(
|
|
97
97
|
path=path,
|
|
98
98
|
endpoint=self._delete_tree_decorator(),
|
|
99
99
|
methods=["DELETE"],
|
|
100
100
|
response_model=self.delete_tree_response_schema_factory,
|
|
101
|
-
summary=
|
|
101
|
+
summary=self.delete_tree_summary,
|
|
102
102
|
dependencies=self.delete_tree_route,
|
|
103
103
|
)
|
|
104
104
|
|
|
@@ -18,7 +18,7 @@ from fastgenerateapi.settings.all_settings import settings
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class DeleteView(BaseView):
|
|
21
|
-
|
|
21
|
+
delete_summary: Optional[str] = None
|
|
22
22
|
delete_route: Union[bool, DEPENDENCIES] = True
|
|
23
23
|
delete_schema: Optional[Type[BaseModel]] = IdList
|
|
24
24
|
delete_response_schema: Optional[Type[BaseModel]] = IdList
|
|
@@ -35,19 +35,6 @@ class DeleteView(BaseView):
|
|
|
35
35
|
|
|
36
36
|
return
|
|
37
37
|
|
|
38
|
-
# 弃用思路:唯一字段加时间戳
|
|
39
|
-
# if unique_fields := self._get_unique_fields(self.model_class):
|
|
40
|
-
# for model in await queryset:
|
|
41
|
-
# model.is_active = False
|
|
42
|
-
# for field in unique_fields:
|
|
43
|
-
# try:
|
|
44
|
-
# setattr(model, field, getattr(model, field) + f"__{int(time.time() * 1000)}")
|
|
45
|
-
# except Exception as e:
|
|
46
|
-
# setattr(model, field, getattr(model, field) + f"__{int(time.time() * 1000)}")
|
|
47
|
-
# await model.save()
|
|
48
|
-
# else:
|
|
49
|
-
# await queryset.update(is_active=False)
|
|
50
|
-
|
|
51
38
|
async def get_del_queryset(self, request_data, *args, **kwargs):
|
|
52
39
|
queryset = self.queryset.filter(id__in=request_data.id_list)
|
|
53
40
|
return queryset
|
|
@@ -80,16 +67,16 @@ class DeleteView(BaseView):
|
|
|
80
67
|
self.delete_response_schema = func_type
|
|
81
68
|
if self.delete_response_schema:
|
|
82
69
|
self.delete_response_schema_factory = response_factory(self.delete_response_schema, name="Delete")
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
70
|
+
if not self.delete_summary:
|
|
71
|
+
doc = self.destroy.__doc__
|
|
72
|
+
summary = doc.strip().split("\n")[0] if doc else "Delete All"
|
|
86
73
|
path = f"/{settings.app_settings.ROUTER_DELETE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
87
74
|
self._add_api_route(
|
|
88
75
|
path=path,
|
|
89
76
|
endpoint=self._delete_decorator(),
|
|
90
77
|
methods=["DELETE"],
|
|
91
78
|
response_model=self.delete_response_schema_factory,
|
|
92
|
-
summary=
|
|
79
|
+
summary=self.delete_summary,
|
|
93
80
|
dependencies=self.delete_route,
|
|
94
81
|
)
|
|
95
82
|
|
|
@@ -20,7 +20,7 @@ from fastgenerateapi.cache.key_builder import generate_key_builder
|
|
|
20
20
|
from fastgenerateapi.controller import SearchController, BaseFilter, FilterController
|
|
21
21
|
from fastgenerateapi.data_type.data_type import DEPENDENCIES, PYDANTIC_SCHEMA
|
|
22
22
|
from fastgenerateapi.deps import paginator_deps, filter_params_deps
|
|
23
|
-
from fastgenerateapi.deps.filter_params_deps import search_params_deps
|
|
23
|
+
from fastgenerateapi.deps.filter_params_deps import search_params_deps, extra_filter_params_deps
|
|
24
24
|
from fastgenerateapi.schemas_factory import get_all_schema_factory, get_page_schema_factory, get_one_schema_factory, \
|
|
25
25
|
response_factory
|
|
26
26
|
from fastgenerateapi.schemas_factory.get_all_schema_factory import get_list_schema_factory, hasattr_get_all_schema
|
|
@@ -28,11 +28,13 @@ from fastgenerateapi.settings.all_settings import settings
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class GetAllView(BaseView, GetMixin):
|
|
31
|
+
get_all_summary: Optional[str] = None
|
|
31
32
|
get_all_route: Union[bool, DEPENDENCIES] = True
|
|
32
33
|
get_all_schema: Optional[Type[PYDANTIC_SCHEMA]] = None
|
|
33
34
|
search_fields: Union[None, list] = None
|
|
34
|
-
filter_schema: Optional[Type[PYDANTIC_SCHEMA]] = None
|
|
35
35
|
filter_fields: Union[None, list] = None
|
|
36
|
+
filter_schema: Optional[Type[PYDANTIC_SCHEMA]] = None
|
|
37
|
+
extra_filter_schema: Optional[Type[PYDANTIC_SCHEMA]] = None
|
|
36
38
|
order_by_fields: Union[None, list] = None
|
|
37
39
|
auto_add_id_order: bool = True
|
|
38
40
|
"""
|
|
@@ -46,6 +48,9 @@ class GetAllView(BaseView, GetMixin):
|
|
|
46
48
|
example:("name__contains", str, "name") 类型是str的时候可以省略,没有第三个值时,自动双下划线转单下划线
|
|
47
49
|
filter_fields: 筛选对应字段
|
|
48
50
|
example: name__contains or (create_at__gt, datetime) or (create_at__gt, datetime, create_time)
|
|
51
|
+
filter_schema: 筛选对应字段
|
|
52
|
+
与filter_fields结果合并,存在相同值时,filter_schema覆盖filter_fields
|
|
53
|
+
extra_filter_schema: 不用于筛选,可用于返回值判断
|
|
49
54
|
order_by_fields: 排序对应字段
|
|
50
55
|
auto_add_id_order: 是否自动在 order_by_fields 后面追加id排序
|
|
51
56
|
"""
|
|
@@ -78,7 +83,7 @@ class GetAllView(BaseView, GetMixin):
|
|
|
78
83
|
"""
|
|
79
84
|
return queryset
|
|
80
85
|
|
|
81
|
-
async def set_get_all_model(self, model: Model) -> Model:
|
|
86
|
+
async def set_get_all_model(self, model: Model, *args, **kwargs) -> Model:
|
|
82
87
|
"""
|
|
83
88
|
对于查询的model,展示数据处理
|
|
84
89
|
"""
|
|
@@ -110,8 +115,8 @@ class GetAllView(BaseView, GetMixin):
|
|
|
110
115
|
await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields, *args, **kwargs)
|
|
111
116
|
|
|
112
117
|
# await self.setattr_model_rpc(self.rpc_class, model, self.rpc_param)
|
|
113
|
-
model = await self.set_get_model(model)
|
|
114
|
-
model = await self.set_get_all_model(model)
|
|
118
|
+
model = await self.set_get_model(model, *args, **kwargs)
|
|
119
|
+
model = await self.set_get_all_model(model, *args, **kwargs)
|
|
115
120
|
|
|
116
121
|
if schema:
|
|
117
122
|
data_list.append(schema.from_orm(model))
|
|
@@ -150,12 +155,14 @@ class GetAllView(BaseView, GetMixin):
|
|
|
150
155
|
paginator = Depends(paginator_deps()),
|
|
151
156
|
search: Optional[str] = Depends(search_params_deps(self.search_fields)),
|
|
152
157
|
filters: dict = Depends(filter_params_deps(model_class=self.model_class, fields=self.filter_fields, schema=self.filter_schema)),
|
|
158
|
+
extra_filters: dict = Depends(extra_filter_params_deps(schema=self.extra_filter_schema)),
|
|
153
159
|
token: Optional[str] = Depends(OAuth2PasswordBearer(tokenUrl="token", auto_error=False)),
|
|
154
160
|
) -> JSONResponse:
|
|
155
161
|
data = await self.get_all(
|
|
156
162
|
paginator=paginator,
|
|
157
163
|
search=search,
|
|
158
164
|
filters=filters,
|
|
165
|
+
extra_filters=extra_filters,
|
|
159
166
|
request=request,
|
|
160
167
|
token=token,
|
|
161
168
|
*args,
|
|
@@ -191,14 +198,15 @@ class GetAllView(BaseView, GetMixin):
|
|
|
191
198
|
self.get_page_schema = get_page_schema_factory(self.get_all_schema)
|
|
192
199
|
self.get_list_schema = get_list_schema_factory(self.get_all_schema)
|
|
193
200
|
self.get_all_response_schema_factory = response_factory(self.get_page_schema, name="GetPage")
|
|
194
|
-
|
|
195
|
-
|
|
201
|
+
if not self.get_all_summary:
|
|
202
|
+
doc = self.get_all.__doc__
|
|
203
|
+
self.get_all_summary = doc.strip().split("\n")[0] if doc else "Get All"
|
|
196
204
|
path = f"/{settings.app_settings.ROUTER_GET_ALL_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
197
205
|
self._add_api_route(
|
|
198
206
|
path=path,
|
|
199
207
|
endpoint=self._get_all_decorator(),
|
|
200
208
|
methods=["GET"],
|
|
201
209
|
response_model=self.get_all_response_schema_factory,
|
|
202
|
-
summary=
|
|
210
|
+
summary=self.get_all_summary,
|
|
203
211
|
dependencies=self.get_all_route,
|
|
204
212
|
)
|
|
@@ -22,7 +22,7 @@ from fastgenerateapi.utils.exception import NOT_FOUND
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class GetOneView(BaseView, GetMixin):
|
|
25
|
-
|
|
25
|
+
get_one_summary: Optional[str] = None
|
|
26
26
|
get_one_route: Union[bool, DEPENDENCIES] = True
|
|
27
27
|
get_one_schema: Optional[Type[BaseModel]] = None
|
|
28
28
|
"""
|
|
@@ -45,7 +45,7 @@ class GetOneView(BaseView, GetMixin):
|
|
|
45
45
|
await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields, *args, **kwargs)
|
|
46
46
|
|
|
47
47
|
# await self.setattr_model_rpc(self.rpc_class, model, self.rpc_param)
|
|
48
|
-
model = await self.set_get_model(model)
|
|
48
|
+
model = await self.set_get_model(model, *args, **kwargs)
|
|
49
49
|
|
|
50
50
|
return self.get_one_schema.from_orm(model)
|
|
51
51
|
|
|
@@ -77,15 +77,16 @@ class GetOneView(BaseView, GetMixin):
|
|
|
77
77
|
if not self.get_one_schema:
|
|
78
78
|
self.get_one_schema = self.gen_get_one_response_schema()
|
|
79
79
|
self.get_one_response_schema_factory = response_factory(self.get_one_schema, name="GetOne")
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
if not self.get_one_summary:
|
|
81
|
+
doc = self.get_one.__doc__
|
|
82
|
+
self.get_one_summary = doc.strip().split("\n")[0] if self.get_one.__doc__ else "Get One"
|
|
82
83
|
path = f"/{settings.app_settings.ROUTER_GET_ONE_SUFFIX_FIELD}/{'{pk}'}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else "/{pk}"
|
|
83
84
|
self._add_api_route(
|
|
84
85
|
path=path,
|
|
85
86
|
endpoint=self._get_one_decorator(),
|
|
86
87
|
methods=["GET"],
|
|
87
88
|
response_model=self.get_one_response_schema_factory,
|
|
88
|
-
summary=
|
|
89
|
+
summary=self.get_one_summary,
|
|
89
90
|
dependencies=self.get_one_route,
|
|
90
91
|
error_responses=[NOT_FOUND],
|
|
91
92
|
)
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
@@ -22,10 +22,10 @@ from fastgenerateapi.settings.all_settings import settings
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class GetRelationView(BaseView):
|
|
25
|
-
|
|
26
25
|
path_id_name: str
|
|
27
26
|
relation_id_name: str
|
|
28
27
|
relation_model_class: Optional[Type[Model]]
|
|
28
|
+
get_relation_summary: Optional[str] = None
|
|
29
29
|
get_relation_route: Union[bool, DEPENDENCIES] = True
|
|
30
30
|
get_relation_schema: Optional[Type[BaseModel]] = None
|
|
31
31
|
search_fields: Union[None, list] = None
|
|
@@ -194,15 +194,16 @@ class GetRelationView(BaseView):
|
|
|
194
194
|
self.get_relation_page_schema = get_page_schema_factory(self.get_relation_schema)
|
|
195
195
|
self.get_relation_list_schema = get_list_schema_factory(self.get_relation_schema)
|
|
196
196
|
self.get_relation_response_schema_factory = response_factory(self.get_relation_page_schema, name="GetPage")
|
|
197
|
-
|
|
198
|
-
|
|
197
|
+
if not self.get_relation_summary:
|
|
198
|
+
doc = self.get_relation.__doc__
|
|
199
|
+
summary = doc.strip().split("\n")[0] if doc else f"Get {self.model_class.__name__.title()}"
|
|
199
200
|
path = f"/get-{self.relation_id_name.removesuffix('_id')}-by-{self.path_id_name.removesuffix('_id')}/{'{pk}'}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
200
201
|
self._add_api_route(
|
|
201
202
|
path=path,
|
|
202
203
|
endpoint=self._get_relation_decorator(),
|
|
203
204
|
methods=["GET"],
|
|
204
205
|
response_model=self.get_relation_response_schema_factory,
|
|
205
|
-
summary=
|
|
206
|
+
summary=self.get_relation_summary,
|
|
206
207
|
dependencies=self.get_relation_route,
|
|
207
208
|
)
|
|
208
209
|
|
|
@@ -31,7 +31,7 @@ from fastgenerateapi.settings.all_settings import settings
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class GetTreeView(BaseView):
|
|
34
|
-
|
|
34
|
+
get_tree_summary: Optional[str] = None
|
|
35
35
|
get_tree_route: Union[bool, DEPENDENCIES] = True
|
|
36
36
|
get_tree_schema: Optional[Type[BaseModel]] = None
|
|
37
37
|
search_fields: Union[None, list] = None
|
|
@@ -187,15 +187,16 @@ class GetTreeView(BaseView):
|
|
|
187
187
|
self.get_tree_schema = self.get_tree_schema or get_tree_schema_factory(self.model_class)
|
|
188
188
|
self.get_tree_data_schema = get_list_schema_factory(self.get_tree_schema)
|
|
189
189
|
self.get_tree_response_schema_factory = response_factory(self.get_tree_data_schema, name="GetTree")
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
if not self.get_tree_summary:
|
|
191
|
+
doc = self.get_tree.__doc__
|
|
192
|
+
self.get_tree_summary = doc.strip().split("\n")[0] if self.get_tree.__doc__ else "Get Tree"
|
|
192
193
|
path = f"/{settings.app_settings.ROUTER_GET_TREE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
193
194
|
self._add_api_route(
|
|
194
195
|
path=path,
|
|
195
196
|
endpoint=self._get_tree_decorator(),
|
|
196
197
|
methods=["GET"],
|
|
197
198
|
response_model=self.get_tree_response_schema_factory,
|
|
198
|
-
summary=
|
|
199
|
+
summary=self.get_tree_summary,
|
|
199
200
|
dependencies=self.get_tree_route,
|
|
200
201
|
)
|
|
201
202
|
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/base_mixin.py
RENAMED
|
@@ -8,9 +8,7 @@ from fastgenerateapi.utils.exception import NOT_FOUND
|
|
|
8
8
|
|
|
9
9
|
from fastgenerateapi.controller.filter_controller import BaseFilter
|
|
10
10
|
from fastgenerateapi.controller import RouterController
|
|
11
|
-
from fastgenerateapi.controller.ws_controller import WsController
|
|
12
11
|
|
|
13
|
-
from fastgenerateapi.settings.all_settings import settings
|
|
14
12
|
from starlette.exceptions import HTTPException
|
|
15
13
|
|
|
16
14
|
from fastgenerateapi.data_type.data_type import DEPENDENCIES, T, PYDANTIC_SCHEMA
|
|
@@ -48,9 +46,6 @@ class BaseMixin(Generic[T], APIRouter, ABC):
|
|
|
48
46
|
route_field_func = f"_handler_{route_field.rsplit('_', 1)[0]}_settings"
|
|
49
47
|
if hasattr(self, route_field) and getattr(self, route_field) and hasattr(self, route_field_func):
|
|
50
48
|
getattr(self, route_field_func)()
|
|
51
|
-
# if self.table_name:
|
|
52
|
-
# if hasattr(self, "_handler_sql_get_all_settings"):
|
|
53
|
-
# getattr(self, "_handler_sql_get_all_settings")()
|
|
54
49
|
|
|
55
50
|
@staticmethod
|
|
56
51
|
def get_base_filter(fields: list, schema: Optional[PYDANTIC_SCHEMA] = None) -> list:
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/update_relation_view.py
RENAMED
|
@@ -20,11 +20,11 @@ from fastgenerateapi.utils.exception import NOT_FOUND
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class UpdateRelationView(BaseView, SaveMixin):
|
|
23
|
-
|
|
24
23
|
path_id_name: str
|
|
25
24
|
relation_id_name: str
|
|
26
25
|
update_relation_schema: Optional[Type[BaseModel]] = IdList
|
|
27
26
|
update_relation_response_schema: Optional[Type[BaseModel]] = None
|
|
27
|
+
update_relation_summary: Optional[str] = None
|
|
28
28
|
update_relation_route: Union[bool, DEPENDENCIES] = True
|
|
29
29
|
"""
|
|
30
30
|
path_id_name: 路径id在模型中对应的字段名
|
|
@@ -83,16 +83,16 @@ class UpdateRelationView(BaseView, SaveMixin):
|
|
|
83
83
|
self.update_relation_response_schema = func_type
|
|
84
84
|
if self.update_relation_response_schema:
|
|
85
85
|
self.update_relation_response_schema_factory = response_factory(self.update_relation_response_schema, name="UpdateRelation")
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
if not self.update_relation_summary:
|
|
87
|
+
doc = self.update_relation.__doc__
|
|
88
|
+
self.update_relation_summary = doc.strip().split("\n")[0] if doc else f"Update {self.model_class.__name__.title()}"
|
|
89
89
|
path = f"/update-{self.relation_id_name.removesuffix('_id')}-by-{self.path_id_name.removesuffix('_id')}/{'{pk}'}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else "/{pk}"
|
|
90
90
|
self._add_api_route(
|
|
91
91
|
path=path,
|
|
92
92
|
endpoint=self._update_relation_decorator(),
|
|
93
93
|
methods=["PUT"],
|
|
94
94
|
response_model=self.update_relation_response_schema_factory,
|
|
95
|
-
summary=
|
|
95
|
+
summary=self.update_relation_summary,
|
|
96
96
|
dependencies=self.update_relation_route,
|
|
97
97
|
error_responses=[NOT_FOUND],
|
|
98
98
|
)
|
|
@@ -25,6 +25,7 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
25
25
|
|
|
26
26
|
update_schema: Optional[Type[BaseModel]] = None
|
|
27
27
|
update_response_schema: Optional[Type[BaseModel]] = None
|
|
28
|
+
update_summary: Optional[str] = None
|
|
28
29
|
update_route: Union[bool, DEPENDENCIES] = True
|
|
29
30
|
"""
|
|
30
31
|
update_schema: 修改请求模型
|
|
@@ -108,16 +109,16 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
108
109
|
else:
|
|
109
110
|
self.update_response_schema_factory = self.gen_get_one_response_schema_factory()
|
|
110
111
|
self.update_response_schema = self.get_one_schema
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
if not self.update_summary:
|
|
113
|
+
doc = self.update.__doc__
|
|
114
|
+
self.update_summary = doc.strip().split("\n")[0] if doc else f"Update"
|
|
114
115
|
path = f"/{settings.app_settings.ROUTER_UPDATE_SUFFIX_FIELD}/{'{pk}'}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else "/{pk}"
|
|
115
116
|
self._add_api_route(
|
|
116
117
|
path=path,
|
|
117
118
|
endpoint=self._update_decorator(),
|
|
118
119
|
methods=["PUT"],
|
|
119
120
|
response_model=self.update_response_schema_factory,
|
|
120
|
-
summary=
|
|
121
|
+
summary=self.update_summary,
|
|
121
122
|
dependencies=self.update_route,
|
|
122
123
|
error_responses=[NOT_FOUND],
|
|
123
124
|
)
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/router_controller.py
RENAMED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import inspect
|
|
2
|
-
from typing import Union
|
|
3
2
|
|
|
4
3
|
from fastgenerateapi.settings.all_settings import settings
|
|
5
4
|
from pydantic import BaseModel
|
|
@@ -26,41 +25,19 @@ class BaseRouter(ResponseMixin):
|
|
|
26
25
|
else:
|
|
27
26
|
self.error(msg=f"方法 {func_name} 中 {method} 不符合规范")
|
|
28
27
|
|
|
29
|
-
# 此方案放弃
|
|
30
|
-
# if self.method == "GET" and not prefix.endswith("/") and not prefix.endswith("{pk}"):
|
|
31
|
-
# prefix += "/"
|
|
32
28
|
self.prefix = prefix
|
|
33
|
-
|
|
34
|
-
# if function in ["get_one", "get_all", "create", "update", "update_optional", "destroy", "switch"]:
|
|
35
|
-
# self.is_new = False
|
|
36
|
-
# else:
|
|
37
|
-
# self.is_new = True
|
|
38
|
-
router_args = router_class.router_args.get(func_name, {}) if router_class.router_args else {}
|
|
39
|
-
if router_args:
|
|
40
|
-
if type(router_args).__name__ == 'ModelMetaclass' and issubclass(router_args, BaseModel):
|
|
41
|
-
router_args = {"response_model": router_args}
|
|
42
|
-
if isinstance(router_args, list):
|
|
43
|
-
router_args = {"dependencies": router_args}
|
|
44
|
-
if isinstance(router_args, str):
|
|
45
|
-
router_args = {"summary": router_args}
|
|
46
|
-
|
|
47
|
-
self.dependencies = router_args.get("dependencies") if router_args and router_args.get("dependencies") else []
|
|
48
|
-
self.dependencies += dependencies if dependencies else []
|
|
49
|
-
|
|
50
|
-
if router_args and router_args.get("summary"):
|
|
51
|
-
summary = router_args.get("summary")
|
|
52
|
-
if summary is None:
|
|
29
|
+
if not summary:
|
|
53
30
|
doc = getattr(router_class, func_name).__doc__
|
|
54
|
-
summary = doc.strip().split("\n")[0] if doc else func_name.lstrip("view_").rstrip("_pk").replace(
|
|
55
|
-
|
|
31
|
+
summary = doc.strip().split("\n")[0] if doc else func_name.lstrip("view_").rstrip("_pk").replace(
|
|
32
|
+
"_"," ").title()
|
|
56
33
|
self.summary = summary
|
|
57
34
|
|
|
58
35
|
if func_type != inspect._empty and func_type is not None:
|
|
59
36
|
self.response_model = response_factory(func_type)
|
|
60
|
-
elif router_args and router_args.get("response_model"):
|
|
61
|
-
self.response_model = response_factory(router_args.get("response_model"))
|
|
62
37
|
else:
|
|
63
38
|
self.response_model = None
|
|
39
|
+
self.dependencies = dependencies
|
|
40
|
+
|
|
64
41
|
|
|
65
42
|
|
|
66
43
|
class RouterController:
|
|
@@ -101,13 +78,3 @@ class RouterController:
|
|
|
101
78
|
prefix = prefix_field + middle_field + suffix_field
|
|
102
79
|
|
|
103
80
|
self.router_data.append(BaseRouter(router_class, func_name, func_type, method, prefix))
|
|
104
|
-
# self.router_data.setdefault(func_name, BaseRouter(router_class, func_name, method, prefix))
|
|
105
|
-
|
|
106
|
-
# def get_summary(self, func_name):
|
|
107
|
-
#
|
|
108
|
-
# return self.router_data.get(func_name).summary
|
|
109
|
-
#
|
|
110
|
-
# def get_dependencies(self, func_name, default: Union[bool, DEPENDENCIES] = None):
|
|
111
|
-
# dependencies = [] if default is None or isinstance(default, bool) else default
|
|
112
|
-
#
|
|
113
|
-
# return dependencies | self.router_data.get(func_name).dependencies
|
|
@@ -4,22 +4,12 @@ from fastgenerateapi.settings.all_settings import settings
|
|
|
4
4
|
class WsRouter:
|
|
5
5
|
|
|
6
6
|
def __init__(self, router_class, path, func_name):
|
|
7
|
-
|
|
8
|
-
if router_args and isinstance(router_args, list):
|
|
9
|
-
router_args = {"dependencies": router_args}
|
|
10
|
-
|
|
11
|
-
self.dependencies = router_args.get("dependencies") if router_args and router_args.get("dependencies") else []
|
|
7
|
+
self.dependencies = []
|
|
12
8
|
self.path = path
|
|
13
9
|
self.func_name = func_name
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
name = router_args.get("name")
|
|
18
|
-
if name is None:
|
|
19
|
-
doc = getattr(router_class, func_name).__doc__
|
|
20
|
-
if doc:
|
|
21
|
-
name = doc.strip().split("\n")[0]
|
|
22
|
-
self.name = name or None
|
|
11
|
+
doc = getattr(router_class, func_name).__doc__
|
|
12
|
+
self.name = doc.strip().split("\n")[0] if doc else None
|
|
23
13
|
|
|
24
14
|
|
|
25
15
|
class WsController:
|
|
@@ -53,3 +53,27 @@ def filter_params_deps(
|
|
|
53
53
|
return result
|
|
54
54
|
|
|
55
55
|
return filter_query
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def extra_filter_params_deps(
|
|
59
|
+
schema: Optional[PYDANTIC_SCHEMA] = None
|
|
60
|
+
):
|
|
61
|
+
"""
|
|
62
|
+
生成filter依赖
|
|
63
|
+
"""
|
|
64
|
+
filter_schema_dep = schema or EmptyPydantic
|
|
65
|
+
|
|
66
|
+
def extra_filter_query(
|
|
67
|
+
filter_schema: filter_schema_dep = Depends(),
|
|
68
|
+
) -> dict[str, Any]:
|
|
69
|
+
"""
|
|
70
|
+
filter 筛选字段依赖
|
|
71
|
+
:param filter_schema:
|
|
72
|
+
:return:
|
|
73
|
+
"""
|
|
74
|
+
result = filter_schema.dict(exclude_none=True)
|
|
75
|
+
return result
|
|
76
|
+
|
|
77
|
+
return extra_filter_query
|
|
78
|
+
|
|
79
|
+
|
|
@@ -26,10 +26,6 @@ class StaffView(APIView):
|
|
|
26
26
|
self.model_class = StaffInfo
|
|
27
27
|
self.order_by_fields = ["-created_at"]
|
|
28
28
|
self.prefetch_related_fields = {"company": ["name"]}
|
|
29
|
-
# self.router_args = {
|
|
30
|
-
# # "view_get_staff_list": ListTestSchema
|
|
31
|
-
# "view_get_staff_list": TestSchema
|
|
32
|
-
# }
|
|
33
29
|
self.get_all_schema = StaffReadSchema
|
|
34
30
|
# self.dependencies = [Depends(ADG.authenticate_user_deps), ]
|
|
35
31
|
super().__init__()
|
|
@@ -84,8 +84,8 @@ class SettingsModel(BaseModel):
|
|
|
84
84
|
Etcd配置优先级:
|
|
85
85
|
application.yaml > path指定文件 > .env
|
|
86
86
|
其他属性优先级:
|
|
87
|
-
|
|
88
|
-
除了.env,其他都是yaml
|
|
87
|
+
application.yaml > path指定文件 > Etcd配置文件 > .env
|
|
88
|
+
除了.env,其他都是yaml格式。同是yaml格式会覆盖
|
|
89
89
|
:return:
|
|
90
90
|
"""
|
|
91
91
|
data_dict = {}
|
|
@@ -106,7 +106,8 @@ class SettingsModel(BaseModel):
|
|
|
106
106
|
res, metadata = etcd_settings.client.get(etcd_settings.ETCD_SETTING_KEY)
|
|
107
107
|
if not res:
|
|
108
108
|
raise ValidationException("未读取到Etcd的配置文件")
|
|
109
|
-
|
|
109
|
+
yaml_dict = yaml.safe_load(res)
|
|
110
|
+
data_dict = {**yaml_dict, **data_dict}
|
|
110
111
|
|
|
111
112
|
setting_dict = {}
|
|
112
113
|
setting_models = cls.model_fields.copy()
|
|
@@ -119,7 +120,8 @@ class SettingsModel(BaseModel):
|
|
|
119
120
|
env_prefix = v.annotation.model_config.get("env_prefix")
|
|
120
121
|
if env_prefix:
|
|
121
122
|
annotation_dict = {
|
|
122
|
-
k_i.removeprefix(env_prefix): v_i for k_i, v_i in
|
|
123
|
+
k_i.removeprefix(env_prefix): v_i for k_i, v_i in
|
|
124
|
+
data_dict.get(v.annotation.__name__, {}).items()
|
|
123
125
|
}
|
|
124
126
|
else:
|
|
125
127
|
annotation_dict = data_dict.get(v.annotation.__name__, {})
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/save_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/docx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/file_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/pdf_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/zip_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/channel/connection_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/filter_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/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
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/param_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/response_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/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.5 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/base_model.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/base_settings.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/json_encoders.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.5 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/common_function.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.5 → fastgenerateapi-1.2.6}/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
|
|
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.5 → fastgenerateapi-1.2.6}/fastgenerateapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|