fastgenerateapi 1.2.4__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.4 → fastgenerateapi-1.2.6}/PKG-INFO +1 -1
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/__init__.py +1 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/base_view.py +5 -16
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/create_view.py +15 -14
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/delete_filter_view.py +9 -7
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/delete_tree_view.py +9 -7
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/delete_view.py +10 -20
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/get_all_view.py +18 -8
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/get_one_view.py +8 -5
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/get_relation_view.py +7 -4
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/get_tree_view.py +7 -4
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -5
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/get_mixin.py +1 -1
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/switch_view.py +2 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/update_relation_view.py +9 -7
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/update_view.py +14 -13
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/router_controller.py +5 -38
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/ws_controller.py +3 -13
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/deps/filter_params_deps.py +24 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/example/views.py +0 -4
- fastgenerateapi-1.2.6/fastgenerateapi/fastapi_utils/tortoise_utils.py +39 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/enum_field.py +3 -2
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/common_function.py +5 -16
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/all_settings.py +7 -5
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi.egg-info/SOURCES.txt +1 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/LICENSE +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/README.md +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/api_view/sql_get_view.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/deps/paginator_deps.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/app_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/setup.cfg +0 -0
- {fastgenerateapi-1.2.4 → fastgenerateapi-1.2.6}/setup.py +0 -0
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
# d8888P
|
|
9
9
|
|
|
10
10
|
author="石亮"
|
|
11
|
+
from fastgenerateapi.fastapi_utils.tortoise_utils import *
|
|
11
12
|
from fastgenerateapi.api_view.api_view import APIView, CreateView, GetOneView, GetAllView, UpdateView, DeleteView, \
|
|
12
13
|
SwitchView
|
|
13
14
|
from fastgenerateapi.api_view.get_tree_view import GetTreeView
|
|
@@ -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
|
|
@@ -89,17 +89,18 @@ class CreateView(BaseView, SaveMixin):
|
|
|
89
89
|
*args,
|
|
90
90
|
**kwargs
|
|
91
91
|
)
|
|
92
|
+
if isinstance(data, Model):
|
|
93
|
+
if settings.app_settings.WHETHER_CREATE_RESPONSE_DATA:
|
|
94
|
+
if self.is_with_prefetch:
|
|
95
|
+
data = await self.get_object(data.id, self.model_class, self.is_with_prefetch)
|
|
96
|
+
await self.setattr_model(data, prefetch_related_fields=self.prefetch_related_fields)
|
|
97
|
+
|
|
98
|
+
return self.success(data=self.create_response_schema.model_validate(data))
|
|
99
|
+
return self.success()
|
|
92
100
|
if isinstance(data, JSONResponse):
|
|
93
101
|
return data
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if settings.app_settings.WHETHER_CREATE_RESPONSE_DATA:
|
|
97
|
-
if self.is_with_prefetch:
|
|
98
|
-
data = await self.get_object(data.id, self.model_class, self.is_with_prefetch)
|
|
99
|
-
await self.setattr_model(data, prefetch_related_fields=self.prefetch_related_fields)
|
|
100
|
-
|
|
101
|
-
return self.success(data=self.create_response_schema.model_validate(data))
|
|
102
|
-
return self.success()
|
|
102
|
+
return self.success(data=data)
|
|
103
|
+
|
|
103
104
|
return route
|
|
104
105
|
|
|
105
106
|
def _handler_create_settings(self):
|
|
@@ -115,16 +116,16 @@ class CreateView(BaseView, SaveMixin):
|
|
|
115
116
|
else:
|
|
116
117
|
self.create_response_schema_factory = self.gen_get_one_response_schema_factory()
|
|
117
118
|
self.create_response_schema = self.get_one_schema
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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"
|
|
121
122
|
path = f"/{settings.app_settings.ROUTER_CREATE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
122
123
|
self._add_api_route(
|
|
123
124
|
path=path,
|
|
124
125
|
endpoint=self._create_decorator(),
|
|
125
126
|
methods=["POST"],
|
|
126
127
|
response_model=self.create_response_schema_factory, # type: ignore
|
|
127
|
-
summary=
|
|
128
|
+
summary=self.create_summary,
|
|
128
129
|
dependencies=self.create_route,
|
|
129
130
|
)
|
|
130
131
|
|
{fastgenerateapi-1.2.4 → 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
|
"""
|
|
@@ -42,14 +42,16 @@ class DeleteFilterView(BaseView):
|
|
|
42
42
|
filters: dict = Depends(filter_params_deps(model_class=self.model_class, fields=self.filter_fields)),
|
|
43
43
|
token: Optional[str] = Depends(OAuth2PasswordBearer(tokenUrl="token", auto_error=False)),
|
|
44
44
|
) -> JSONResponse:
|
|
45
|
-
await self.destroy_filter(
|
|
45
|
+
data = await self.destroy_filter(
|
|
46
46
|
search=search,
|
|
47
47
|
filters=filters,
|
|
48
48
|
request=request,
|
|
49
49
|
token=token,
|
|
50
50
|
*args, **kwargs
|
|
51
51
|
)
|
|
52
|
-
|
|
52
|
+
if isinstance(data, JSONResponse):
|
|
53
|
+
return data
|
|
54
|
+
return self.success(msg="删除成功", data=data)
|
|
53
55
|
return route
|
|
54
56
|
|
|
55
57
|
def _handler_destroy_filter_settings(self):
|
|
@@ -62,16 +64,16 @@ class DeleteFilterView(BaseView):
|
|
|
62
64
|
self.delete_filter_response_schema = func_type
|
|
63
65
|
if self.delete_filter_response_schema:
|
|
64
66
|
self.delete_filter_response_schema_factory = response_factory(self.delete_filter_response_schema, name="DeleteFilter")
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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"
|
|
68
70
|
path = f"/{settings.app_settings.ROUTER_FILTER_DELETE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
69
71
|
self._add_api_route(
|
|
70
72
|
path=path,
|
|
71
73
|
endpoint=self._delete_filter_decorator(),
|
|
72
74
|
methods=["DELETE"],
|
|
73
75
|
response_model=self.delete_filter_response_schema_factory,
|
|
74
|
-
summary=
|
|
76
|
+
summary=self.delete_filter_summary,
|
|
75
77
|
dependencies=self.delete_filter_route,
|
|
76
78
|
)
|
|
77
79
|
|
{fastgenerateapi-1.2.4 → 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
|
|
@@ -68,13 +68,15 @@ class DeleteTreeView(BaseView):
|
|
|
68
68
|
request: Request,
|
|
69
69
|
token: Optional[str] = Depends(OAuth2PasswordBearer(tokenUrl="token", auto_error=False)),
|
|
70
70
|
) -> JSONResponse:
|
|
71
|
-
await self.destroy_tree(
|
|
71
|
+
data = await self.destroy_tree(
|
|
72
72
|
request_data=request_data,
|
|
73
73
|
request=request,
|
|
74
74
|
token=token,
|
|
75
75
|
*args, **kwargs
|
|
76
76
|
)
|
|
77
|
-
|
|
77
|
+
if isinstance(data, JSONResponse):
|
|
78
|
+
return data
|
|
79
|
+
return self.success(msg="删除成功", data=data)
|
|
78
80
|
return route
|
|
79
81
|
|
|
80
82
|
def _handler_delete_tree_settings(self):
|
|
@@ -87,16 +89,16 @@ class DeleteTreeView(BaseView):
|
|
|
87
89
|
self.delete_tree_response_schema = func_type
|
|
88
90
|
if self.delete_tree_response_schema:
|
|
89
91
|
self.delete_tree_response_schema_factory = response_factory(self.delete_tree_response_schema, name="DeleteTree")
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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"
|
|
93
95
|
path = f"/{settings.app_settings.ROUTER_RECURSION_DELETE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
94
96
|
self._add_api_route(
|
|
95
97
|
path=path,
|
|
96
98
|
endpoint=self._delete_tree_decorator(),
|
|
97
99
|
methods=["DELETE"],
|
|
98
100
|
response_model=self.delete_tree_response_schema_factory,
|
|
99
|
-
summary=
|
|
101
|
+
summary=self.delete_tree_summary,
|
|
100
102
|
dependencies=self.delete_tree_route,
|
|
101
103
|
)
|
|
102
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
|
|
@@ -58,13 +45,16 @@ class DeleteView(BaseView):
|
|
|
58
45
|
request: Request,
|
|
59
46
|
token: Optional[str] = Depends(OAuth2PasswordBearer(tokenUrl="token", auto_error=False)),
|
|
60
47
|
) -> JSONResponse:
|
|
61
|
-
await self.destroy(
|
|
48
|
+
data = await self.destroy(
|
|
62
49
|
request_data=request_data,
|
|
63
50
|
request=request,
|
|
64
51
|
token=token,
|
|
65
52
|
*args, **kwargs
|
|
66
53
|
)
|
|
67
|
-
|
|
54
|
+
|
|
55
|
+
if isinstance(data, JSONResponse):
|
|
56
|
+
return data
|
|
57
|
+
return self.success(msg="删除成功", data=data)
|
|
68
58
|
return route
|
|
69
59
|
|
|
70
60
|
def _handler_delete_settings(self):
|
|
@@ -77,16 +67,16 @@ class DeleteView(BaseView):
|
|
|
77
67
|
self.delete_response_schema = func_type
|
|
78
68
|
if self.delete_response_schema:
|
|
79
69
|
self.delete_response_schema_factory = response_factory(self.delete_response_schema, name="Delete")
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
70
|
+
if not self.delete_summary:
|
|
71
|
+
doc = self.destroy.__doc__
|
|
72
|
+
summary = doc.strip().split("\n")[0] if doc else "Delete All"
|
|
83
73
|
path = f"/{settings.app_settings.ROUTER_DELETE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
84
74
|
self._add_api_route(
|
|
85
75
|
path=path,
|
|
86
76
|
endpoint=self._delete_decorator(),
|
|
87
77
|
methods=["DELETE"],
|
|
88
78
|
response_model=self.delete_response_schema_factory,
|
|
89
|
-
summary=
|
|
79
|
+
summary=self.delete_summary,
|
|
90
80
|
dependencies=self.delete_route,
|
|
91
81
|
)
|
|
92
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,17 +155,21 @@ 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,
|
|
162
169
|
**kwargs
|
|
163
170
|
)
|
|
171
|
+
if isinstance(data, JSONResponse):
|
|
172
|
+
return data
|
|
164
173
|
return self.success(data=data)
|
|
165
174
|
|
|
166
175
|
return route
|
|
@@ -189,14 +198,15 @@ class GetAllView(BaseView, GetMixin):
|
|
|
189
198
|
self.get_page_schema = get_page_schema_factory(self.get_all_schema)
|
|
190
199
|
self.get_list_schema = get_list_schema_factory(self.get_all_schema)
|
|
191
200
|
self.get_all_response_schema_factory = response_factory(self.get_page_schema, name="GetPage")
|
|
192
|
-
|
|
193
|
-
|
|
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"
|
|
194
204
|
path = f"/{settings.app_settings.ROUTER_GET_ALL_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
195
205
|
self._add_api_route(
|
|
196
206
|
path=path,
|
|
197
207
|
endpoint=self._get_all_decorator(),
|
|
198
208
|
methods=["GET"],
|
|
199
209
|
response_model=self.get_all_response_schema_factory,
|
|
200
|
-
summary=
|
|
210
|
+
summary=self.get_all_summary,
|
|
201
211
|
dependencies=self.get_all_route,
|
|
202
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
|
|
|
@@ -62,6 +62,8 @@ class GetOneView(BaseView, GetMixin):
|
|
|
62
62
|
token=token,
|
|
63
63
|
*args, **kwargs
|
|
64
64
|
)
|
|
65
|
+
if isinstance(data, JSONResponse):
|
|
66
|
+
return data
|
|
65
67
|
return self.success(data=data)
|
|
66
68
|
return route
|
|
67
69
|
|
|
@@ -75,15 +77,16 @@ class GetOneView(BaseView, GetMixin):
|
|
|
75
77
|
if not self.get_one_schema:
|
|
76
78
|
self.get_one_schema = self.gen_get_one_response_schema()
|
|
77
79
|
self.get_one_response_schema_factory = response_factory(self.get_one_schema, name="GetOne")
|
|
78
|
-
|
|
79
|
-
|
|
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"
|
|
80
83
|
path = f"/{settings.app_settings.ROUTER_GET_ONE_SUFFIX_FIELD}/{'{pk}'}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else "/{pk}"
|
|
81
84
|
self._add_api_route(
|
|
82
85
|
path=path,
|
|
83
86
|
endpoint=self._get_one_decorator(),
|
|
84
87
|
methods=["GET"],
|
|
85
88
|
response_model=self.get_one_response_schema_factory,
|
|
86
|
-
summary=
|
|
89
|
+
summary=self.get_one_summary,
|
|
87
90
|
dependencies=self.get_one_route,
|
|
88
91
|
error_responses=[NOT_FOUND],
|
|
89
92
|
)
|
{fastgenerateapi-1.2.4 → 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
|
|
@@ -175,6 +175,8 @@ class GetRelationView(BaseView):
|
|
|
175
175
|
*args,
|
|
176
176
|
**kwargs
|
|
177
177
|
)
|
|
178
|
+
if isinstance(data, JSONResponse):
|
|
179
|
+
return data
|
|
178
180
|
return self.success(data=data)
|
|
179
181
|
return route
|
|
180
182
|
|
|
@@ -192,15 +194,16 @@ class GetRelationView(BaseView):
|
|
|
192
194
|
self.get_relation_page_schema = get_page_schema_factory(self.get_relation_schema)
|
|
193
195
|
self.get_relation_list_schema = get_list_schema_factory(self.get_relation_schema)
|
|
194
196
|
self.get_relation_response_schema_factory = response_factory(self.get_relation_page_schema, name="GetPage")
|
|
195
|
-
|
|
196
|
-
|
|
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()}"
|
|
197
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 ""
|
|
198
201
|
self._add_api_route(
|
|
199
202
|
path=path,
|
|
200
203
|
endpoint=self._get_relation_decorator(),
|
|
201
204
|
methods=["GET"],
|
|
202
205
|
response_model=self.get_relation_response_schema_factory,
|
|
203
|
-
summary=
|
|
206
|
+
summary=self.get_relation_summary,
|
|
204
207
|
dependencies=self.get_relation_route,
|
|
205
208
|
)
|
|
206
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
|
|
@@ -170,6 +170,8 @@ class GetTreeView(BaseView):
|
|
|
170
170
|
*args,
|
|
171
171
|
**kwargs
|
|
172
172
|
)
|
|
173
|
+
if isinstance(data, JSONResponse):
|
|
174
|
+
return data
|
|
173
175
|
return self.success(data=data)
|
|
174
176
|
return route
|
|
175
177
|
|
|
@@ -185,15 +187,16 @@ class GetTreeView(BaseView):
|
|
|
185
187
|
self.get_tree_schema = self.get_tree_schema or get_tree_schema_factory(self.model_class)
|
|
186
188
|
self.get_tree_data_schema = get_list_schema_factory(self.get_tree_schema)
|
|
187
189
|
self.get_tree_response_schema_factory = response_factory(self.get_tree_data_schema, name="GetTree")
|
|
188
|
-
|
|
189
|
-
|
|
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"
|
|
190
193
|
path = f"/{settings.app_settings.ROUTER_GET_TREE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
191
194
|
self._add_api_route(
|
|
192
195
|
path=path,
|
|
193
196
|
endpoint=self._get_tree_decorator(),
|
|
194
197
|
methods=["GET"],
|
|
195
198
|
response_model=self.get_tree_response_schema_factory,
|
|
196
|
-
summary=
|
|
199
|
+
summary=self.get_tree_summary,
|
|
197
200
|
dependencies=self.get_tree_route,
|
|
198
201
|
)
|
|
199
202
|
|
{fastgenerateapi-1.2.4 → 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:
|
|
@@ -48,6 +48,8 @@ class SwitchView(BaseView):
|
|
|
48
48
|
token: Optional[str] = Depends(OAuth2PasswordBearer(tokenUrl="token", auto_error=False)),
|
|
49
49
|
) -> JSONResponse:
|
|
50
50
|
data = await self.switch(pk=pk, request=request, filed=filed, token=token, *args, **kwargs)
|
|
51
|
+
if isinstance(data, JSONResponse):
|
|
52
|
+
return data
|
|
51
53
|
return self.success(data=data)
|
|
52
54
|
return route
|
|
53
55
|
|
{fastgenerateapi-1.2.4 → 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在模型中对应的字段名
|
|
@@ -61,14 +61,16 @@ class UpdateRelationView(BaseView, SaveMixin):
|
|
|
61
61
|
request: Request,
|
|
62
62
|
token: Optional[str] = Depends(OAuth2PasswordBearer(tokenUrl="token", auto_error=False)),
|
|
63
63
|
) -> JSONResponse:
|
|
64
|
-
await self.update_relation(
|
|
64
|
+
data = await self.update_relation(
|
|
65
65
|
pk=pk,
|
|
66
66
|
request_data=request_data,
|
|
67
67
|
request=request,
|
|
68
68
|
token=token,
|
|
69
69
|
*args, **kwargs
|
|
70
70
|
)
|
|
71
|
-
|
|
71
|
+
if isinstance(data, JSONResponse):
|
|
72
|
+
return data
|
|
73
|
+
return self.success(data=data)
|
|
72
74
|
return route
|
|
73
75
|
|
|
74
76
|
def _handler_update_relation_settings(self):
|
|
@@ -81,16 +83,16 @@ class UpdateRelationView(BaseView, SaveMixin):
|
|
|
81
83
|
self.update_relation_response_schema = func_type
|
|
82
84
|
if self.update_relation_response_schema:
|
|
83
85
|
self.update_relation_response_schema_factory = response_factory(self.update_relation_response_schema, name="UpdateRelation")
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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()}"
|
|
87
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}"
|
|
88
90
|
self._add_api_route(
|
|
89
91
|
path=path,
|
|
90
92
|
endpoint=self._update_relation_decorator(),
|
|
91
93
|
methods=["PUT"],
|
|
92
94
|
response_model=self.update_relation_response_schema_factory,
|
|
93
|
-
summary=
|
|
95
|
+
summary=self.update_relation_summary,
|
|
94
96
|
dependencies=self.update_relation_route,
|
|
95
97
|
error_responses=[NOT_FOUND],
|
|
96
98
|
)
|