fastgenerateapi 1.2.17__tar.gz → 1.2.18__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.17 → fastgenerateapi-1.2.18}/PKG-INFO +1 -1
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/__init__.py +3 -1
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_all_view.py +5 -3
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_relation_view.py +3 -3
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_tree_view.py +2 -2
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/base_mixin.py +5 -3
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +28 -6
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +15 -5
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/filter_controller.py +28 -11
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/tortoise_utils.py +3 -3
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/base_model.py +5 -4
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/filter_schema_factory.py +5 -16
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/app_settings.py +2 -2
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/str_util.py +7 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/LICENSE +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/README.md +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/base_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/create_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_one_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/switch_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/update_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/tortoise_type.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/common_function.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/all_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/validator/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/validator/validator.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/setup.cfg +0 -0
- {fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/setup.py +0 -0
|
@@ -25,12 +25,14 @@ from fastgenerateapi.channel.websocket_view import WebsocketView
|
|
|
25
25
|
from fastgenerateapi.channel.consumer import Consumer
|
|
26
26
|
|
|
27
27
|
# 模型相关类
|
|
28
|
-
from fastgenerateapi.pydantic_utils.base_model import
|
|
28
|
+
from fastgenerateapi.pydantic_utils.base_model import (
|
|
29
|
+
model_config, BaseModel, PagePydantic, EmptyPydantic, SearchPydantic, IdList, IdResp)
|
|
29
30
|
|
|
30
31
|
# 类型提示
|
|
31
32
|
from fastgenerateapi.data_type.tortoise_type import T_Model
|
|
32
33
|
|
|
33
34
|
# 工具相关
|
|
35
|
+
from fastgenerateapi.controller.filter_controller import FilterUtils
|
|
34
36
|
from fastgenerateapi.api_view.mixin.utils.docx_util import DocxUtil
|
|
35
37
|
from fastgenerateapi.api_view.mixin.utils.file_util import FileUtil
|
|
36
38
|
from fastgenerateapi.api_view.mixin.utils.pdf_util import PdfUtil
|
|
@@ -90,7 +90,9 @@ class GetAllView(BaseView, GetMixin):
|
|
|
90
90
|
|
|
91
91
|
async def set_get_all_model_list(self, model_list: List[T_Model], *args, **kwargs) -> List[T_Model]:
|
|
92
92
|
"""
|
|
93
|
-
对于查询的model
|
|
93
|
+
对于查询的model列表进行数据处理
|
|
94
|
+
使用场景示例:
|
|
95
|
+
model的某个id通过http请求获取相关信息。此处统一请求,储存在kwargs["extra_filters"]里,在set_get_all_model赋值
|
|
94
96
|
"""
|
|
95
97
|
return model_list
|
|
96
98
|
|
|
@@ -225,8 +227,8 @@ class GetAllView(BaseView, GetMixin):
|
|
|
225
227
|
def _handler_get_all_settings(self):
|
|
226
228
|
if not self.get_all_route:
|
|
227
229
|
return
|
|
228
|
-
self.search_controller = SearchController(self.get_base_filter(self.search_fields))
|
|
229
|
-
self.filter_controller = FilterController(self.get_base_filter(self.filter_fields, self.filter_schema))
|
|
230
|
+
self.search_controller = SearchController(self.get_base_filter(self.search_fields, model_class=self.model_class))
|
|
231
|
+
self.filter_controller = FilterController(self.get_base_filter(self.filter_fields, self.filter_schema, model_class=self.model_class))
|
|
230
232
|
|
|
231
233
|
func_type = inspect.signature(self.get_all).return_annotation
|
|
232
234
|
if func_type != inspect._empty and func_type is not None:
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
@@ -177,9 +177,9 @@ class GetRelationView(BaseView):
|
|
|
177
177
|
def _handler_get_relation_settings(self):
|
|
178
178
|
if not self.get_relation_route:
|
|
179
179
|
return
|
|
180
|
-
self.search_controller = SearchController(self.get_base_filter(self.search_fields))
|
|
181
|
-
self.filter_controller = FilterController(self.get_base_filter(self.filter_fields))
|
|
182
|
-
self.filter_relation_controller = FilterController(self.get_base_filter(self.relation_filter_fields))
|
|
180
|
+
self.search_controller = SearchController(self.get_base_filter(self.search_fields, model_class=self.model_class))
|
|
181
|
+
self.filter_controller = FilterController(self.get_base_filter(self.filter_fields, model_class=self.model_class))
|
|
182
|
+
self.filter_relation_controller = FilterController(self.get_base_filter(self.relation_filter_fields, model_class=self.model_class))
|
|
183
183
|
|
|
184
184
|
func_type = inspect.signature(self.get_relation).return_annotation
|
|
185
185
|
if func_type != inspect._empty and func_type is not None:
|
|
@@ -178,8 +178,8 @@ class GetTreeView(BaseView):
|
|
|
178
178
|
def _handler_get_tree_settings(self):
|
|
179
179
|
if not self.get_tree_route:
|
|
180
180
|
return
|
|
181
|
-
self.search_controller = SearchController(self.get_base_filter(self.search_fields))
|
|
182
|
-
self.filter_controller = FilterController(self.get_base_filter(self.filter_fields))
|
|
181
|
+
self.search_controller = SearchController(self.get_base_filter(self.search_fields, model_class=self.model_class))
|
|
182
|
+
self.filter_controller = FilterController(self.get_base_filter(self.filter_fields, model_class=self.model_class))
|
|
183
183
|
|
|
184
184
|
func_type = inspect.signature(self.get_tree).return_annotation
|
|
185
185
|
if func_type != inspect._empty and func_type is not None:
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/base_mixin.py
RENAMED
|
@@ -4,6 +4,8 @@ from typing import List, Callable, Any, Union, Optional, Generic, Type
|
|
|
4
4
|
|
|
5
5
|
from fastapi import APIRouter
|
|
6
6
|
from fastapi.types import DecoratedCallable
|
|
7
|
+
from tortoise import Model
|
|
8
|
+
|
|
7
9
|
from fastgenerateapi.utils.exception import NOT_FOUND
|
|
8
10
|
|
|
9
11
|
from fastgenerateapi.controller.filter_controller import BaseFilter
|
|
@@ -48,12 +50,12 @@ class BaseMixin(Generic[T], APIRouter, ABC):
|
|
|
48
50
|
getattr(self, route_field_func)()
|
|
49
51
|
|
|
50
52
|
@staticmethod
|
|
51
|
-
def get_base_filter(fields: list, schema: Optional[PYDANTIC_SCHEMA] = None) -> list:
|
|
53
|
+
def get_base_filter(fields: list, schema: Optional[PYDANTIC_SCHEMA] = None, model_class: Optional[Type[Model]] = None) -> list:
|
|
52
54
|
bast_filter_list = []
|
|
53
55
|
if fields:
|
|
54
|
-
bast_filter_list += [BaseFilter(field) if not isinstance(field, BaseFilter) else field for field in fields]
|
|
56
|
+
bast_filter_list += [BaseFilter(field, model_class) if not isinstance(field, BaseFilter) else field for field in fields]
|
|
55
57
|
if schema:
|
|
56
|
-
bast_filter_list += [BaseFilter((field, model_field.alias)) for field, model_field in schema.
|
|
58
|
+
bast_filter_list += [BaseFilter((field, model_field.alias), model_class) for field, model_field in schema.model_fields.items()]
|
|
57
59
|
return bast_filter_list
|
|
58
60
|
|
|
59
61
|
@staticmethod
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py
RENAMED
|
@@ -22,6 +22,10 @@ class DBModelMixin:
|
|
|
22
22
|
except:
|
|
23
23
|
return "id"
|
|
24
24
|
|
|
25
|
+
@staticmethod
|
|
26
|
+
def get_model_description(model_class: Optional[Type[Model]]) -> str:
|
|
27
|
+
return model_class._meta.table_description or model_class.__name__
|
|
28
|
+
|
|
25
29
|
@staticmethod
|
|
26
30
|
def get_field_description(model_class: Type[Model], fields: Union[str, list, tuple, set]) -> str:
|
|
27
31
|
if fields in ["id", "pk"]:
|
|
@@ -39,10 +43,7 @@ class DBModelMixin:
|
|
|
39
43
|
description = ""
|
|
40
44
|
description += DBModelMixin.get_field_description(model_class=model_class, fields=field_list[0])
|
|
41
45
|
if field_list[1] in DBModelMixin.others_description:
|
|
42
|
-
description += DBModelMixin.
|
|
43
|
-
model_class=model_class,
|
|
44
|
-
fields=field_list[1]
|
|
45
|
-
)
|
|
46
|
+
description += DBModelMixin.others_description.get(field_list[1], "")
|
|
46
47
|
else:
|
|
47
48
|
description += DBModelMixin.get_field_description(
|
|
48
49
|
model_class=DBModelMixin._get_foreign_key_relation_class(model_class=model_class, field=field_list[0]),
|
|
@@ -65,8 +66,29 @@ class DBModelMixin:
|
|
|
65
66
|
return ",".join(list(fields))
|
|
66
67
|
|
|
67
68
|
@staticmethod
|
|
68
|
-
def
|
|
69
|
-
|
|
69
|
+
def get_model_field_type(model_class: Optional[Type[Model]], field: str) -> type:
|
|
70
|
+
if field in ["id", "pk"]:
|
|
71
|
+
return str
|
|
72
|
+
try:
|
|
73
|
+
field_info = model_class._meta.fields_map.get(field)
|
|
74
|
+
field_info_fk = model_class._meta.fields_map.get(field.removesuffix("_id"))
|
|
75
|
+
if field_info:
|
|
76
|
+
return field_info.field_type
|
|
77
|
+
elif field.endswith("_id") and field_info_fk:
|
|
78
|
+
return str
|
|
79
|
+
elif "__" in field:
|
|
80
|
+
field_list = field.split("__", maxsplit=1)
|
|
81
|
+
if field_list[1] in DBModelMixin.others_description:
|
|
82
|
+
return DBModelMixin.get_model_field_type(model_class, field_list[0])
|
|
83
|
+
else:
|
|
84
|
+
return DBModelMixin.get_model_field_type(
|
|
85
|
+
model_class=DBModelMixin._get_foreign_key_relation_class(model_class=model_class, field=field_list[0]),
|
|
86
|
+
field=field_list[1]
|
|
87
|
+
)
|
|
88
|
+
else:
|
|
89
|
+
return str
|
|
90
|
+
except Exception as e:
|
|
91
|
+
return str
|
|
70
92
|
|
|
71
93
|
@staticmethod
|
|
72
94
|
def get_model_prefix_name(model_class: Type[Model]) -> str:
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py
RENAMED
|
@@ -89,12 +89,15 @@ class XlsxUtil:
|
|
|
89
89
|
model_list: List[Model],
|
|
90
90
|
fields: List[str],
|
|
91
91
|
index: Optional[bool] = False,
|
|
92
|
+
model_handler: Callable = None,
|
|
92
93
|
model_handler_list: List[Callable] = None,
|
|
93
94
|
fields_handler: dict = None,
|
|
94
95
|
filename: Optional[str] = '导出文件.xlsx',
|
|
95
96
|
file_save_path: Optional[str] = None,
|
|
96
97
|
sheet: Optional[str] = None,
|
|
97
98
|
model_class: Optional[Model] = None,
|
|
99
|
+
*args,
|
|
100
|
+
**kwargs,
|
|
98
101
|
) -> StreamingResponse:
|
|
99
102
|
"""
|
|
100
103
|
导出excel文件
|
|
@@ -102,7 +105,8 @@ class XlsxUtil:
|
|
|
102
105
|
:param model_list: 模型列表
|
|
103
106
|
:param fields: 字段列表
|
|
104
107
|
:param index: 是否导出序号字段
|
|
105
|
-
:param
|
|
108
|
+
:param model_handler: 模型列表的处理方法
|
|
109
|
+
:param model_handler_list: 单个模型处理方法
|
|
106
110
|
:param fields_handler: 字段处理方法
|
|
107
111
|
:param filename: 导出文件名
|
|
108
112
|
:param file_save_path: 指定文件路径保存,不返回
|
|
@@ -128,13 +132,19 @@ class XlsxUtil:
|
|
|
128
132
|
|
|
129
133
|
col_width_list = XlsxUtil.write_headers(sh, headers)
|
|
130
134
|
|
|
135
|
+
if model_handler:
|
|
136
|
+
if is_async_callable(model_handler):
|
|
137
|
+
model_list = await model_handler(model_list, *args, **kwargs)
|
|
138
|
+
else:
|
|
139
|
+
model_list = model_handler(model_list, *args, **kwargs)
|
|
140
|
+
|
|
131
141
|
for row, model in enumerate(model_list, start_row + 1):
|
|
132
142
|
if model_handler_list:
|
|
133
143
|
for model_handler in model_handler_list:
|
|
134
144
|
if is_async_callable(model_handler):
|
|
135
|
-
model = await model_handler(model)
|
|
145
|
+
model = await model_handler(model, *args, **kwargs)
|
|
136
146
|
else:
|
|
137
|
-
model = model_handler(model)
|
|
147
|
+
model = model_handler(model, *args, **kwargs)
|
|
138
148
|
start_col = 1
|
|
139
149
|
if index:
|
|
140
150
|
write(sh, row, start_col, str(row-start_row))
|
|
@@ -144,9 +154,9 @@ class XlsxUtil:
|
|
|
144
154
|
handler = fields_handler.get(field)
|
|
145
155
|
if handler and hasattr(handler, "__call__"):
|
|
146
156
|
if is_async_callable(handler):
|
|
147
|
-
info = await handler(info)
|
|
157
|
+
info = await handler(info, *args, **kwargs)
|
|
148
158
|
else:
|
|
149
|
-
info = handler(info)
|
|
159
|
+
info = handler(info, *args, **kwargs)
|
|
150
160
|
write(sh, row, col, info)
|
|
151
161
|
|
|
152
162
|
XlsxUtil.adaptive_format(sh, col_width_list, len(headers))
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/filter_controller.py
RENAMED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
from datetime import datetime, date, time
|
|
2
|
-
from typing import Union, Any, Optional
|
|
2
|
+
from typing import Union, Any, Optional, Type
|
|
3
3
|
|
|
4
4
|
from pydantic.fields import FieldInfo
|
|
5
|
+
from tortoise import Model
|
|
5
6
|
from tortoise.expressions import Q
|
|
6
7
|
from tortoise.queryset import QuerySet
|
|
7
8
|
|
|
8
|
-
from fastgenerateapi.
|
|
9
|
+
from fastgenerateapi.api_view.mixin.dbmodel_mixin import DBModelMixin
|
|
10
|
+
from fastgenerateapi.pydantic_utils.base_model import alias_generator
|
|
9
11
|
|
|
10
12
|
|
|
11
13
|
class FilterUtils:
|
|
@@ -53,18 +55,20 @@ class BaseFilter:
|
|
|
53
55
|
BaseFilter
|
|
54
56
|
"""
|
|
55
57
|
|
|
56
|
-
def __init__(self, filter_str: Union[str, tuple]):
|
|
58
|
+
def __init__(self, filter_str: Union[str, tuple], model_class: Optional[Type[Model]] = None):
|
|
57
59
|
"""
|
|
58
|
-
:param
|
|
60
|
+
:param
|
|
61
|
+
filter_str: Union[str, tuple]
|
|
59
62
|
当tuple时,第一个为str,后面参数无顺序和数量要求,可以是 类型、重命名字符串、用于修改传值的方法
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
example:
|
|
64
|
+
name__contains
|
|
65
|
+
(create_at__gt, datetime)
|
|
66
|
+
(create_at__gt, datetime, create_time)
|
|
67
|
+
(publish_date, datetime, FilterUtils.date_to_datetime_23)
|
|
68
|
+
(publish_date, datetime, FieldInfo())
|
|
69
|
+
model_class: 当有值时,会从这里获取到相关的类型和备注
|
|
66
70
|
"""
|
|
67
|
-
field_type =
|
|
71
|
+
field_type = None
|
|
68
72
|
model_field = filter_str
|
|
69
73
|
filter_field = None
|
|
70
74
|
field_info = None
|
|
@@ -85,6 +89,19 @@ class BaseFilter:
|
|
|
85
89
|
if not filter_field:
|
|
86
90
|
filter_field = model_field
|
|
87
91
|
|
|
92
|
+
if not field_type:
|
|
93
|
+
if model_class:
|
|
94
|
+
field_type = DBModelMixin.get_model_field_type(model_class, model_field)
|
|
95
|
+
else:
|
|
96
|
+
field_type = str
|
|
97
|
+
|
|
98
|
+
if not field_info:
|
|
99
|
+
description = DBModelMixin.get_field_description(model_class, model_field)
|
|
100
|
+
field_info = FieldInfo(default=None, title=description, description=description)
|
|
101
|
+
|
|
102
|
+
if alias_generator:
|
|
103
|
+
field_info.alias = alias_generator(filter_field or model_field)
|
|
104
|
+
|
|
88
105
|
self.field_type = field_type
|
|
89
106
|
self.model_field = model_field
|
|
90
107
|
self.filter_field = filter_field
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/tortoise_utils.py
RENAMED
|
@@ -12,7 +12,7 @@ def _get_connection(connection_name: Optional[str]) -> BaseDBAsyncClient:
|
|
|
12
12
|
:param connection_name:
|
|
13
13
|
:return:
|
|
14
14
|
"""
|
|
15
|
-
# tortoise-orm==0.25.1
|
|
15
|
+
# 来源 tortoise-orm==0.25.1
|
|
16
16
|
# if connection_name:
|
|
17
17
|
# connection = connections.get(connection_name)
|
|
18
18
|
# elif len(connections.db_config) == 1:
|
|
@@ -28,7 +28,7 @@ def _get_connection(connection_name: Optional[str]) -> BaseDBAsyncClient:
|
|
|
28
28
|
connection = connections.get(connection_name)
|
|
29
29
|
elif len(connections.db_config) >= 1:
|
|
30
30
|
# 默认选排序第一个
|
|
31
|
-
connection_name = next(iter(connections.db_config.keys()))
|
|
31
|
+
connection_name = connections.db_config.get("default") or next(iter(connections.db_config.keys()))
|
|
32
32
|
connection = connections.get(connection_name)
|
|
33
33
|
else:
|
|
34
34
|
raise ParamsError(
|
|
@@ -42,7 +42,7 @@ def ForeignKeyField(
|
|
|
42
42
|
model_name: str,
|
|
43
43
|
related_name: Union[str, None, Literal[False]] = None,
|
|
44
44
|
on_delete: OnDelete = CASCADE,
|
|
45
|
-
db_constraint: bool =
|
|
45
|
+
db_constraint: bool = False,
|
|
46
46
|
null: bool = False,
|
|
47
47
|
**kwargs: Any,
|
|
48
48
|
) -> Union[ForeignKeyRelation[MODEL], ForeignKeyNullableRelation[MODEL]]:
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/base_model.py
RENAMED
|
@@ -98,10 +98,6 @@ class PagePydantic(BaseModel):
|
|
|
98
98
|
return data
|
|
99
99
|
|
|
100
100
|
|
|
101
|
-
class IdList(BaseModel):
|
|
102
|
-
id_list: List[str] = Field([], description="id数组")
|
|
103
|
-
|
|
104
|
-
|
|
105
101
|
class EmptyPydantic(BaseModel):
|
|
106
102
|
...
|
|
107
103
|
|
|
@@ -110,5 +106,10 @@ class SearchPydantic(BaseModel):
|
|
|
110
106
|
search: Optional[str] = Field(None, description="搜索")
|
|
111
107
|
|
|
112
108
|
|
|
109
|
+
class IdList(BaseModel):
|
|
110
|
+
id_list: List[str] = Field([], description="id数组")
|
|
111
|
+
|
|
113
112
|
|
|
113
|
+
class IdResp(BaseModel):
|
|
114
|
+
id: str = Field(..., description="主键")
|
|
114
115
|
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
from
|
|
1
|
+
from logging import warning
|
|
2
|
+
from typing import Type, Optional
|
|
2
3
|
|
|
3
|
-
from fastapi import Query
|
|
4
4
|
from pydantic import BaseModel, create_model
|
|
5
|
-
from pydantic.fields import FieldInfo
|
|
6
5
|
|
|
7
6
|
from fastgenerateapi.pydantic_utils.base_model import model_config
|
|
8
|
-
from fastgenerateapi.api_view.mixin.dbmodel_mixin import DBModelMixin
|
|
9
7
|
from fastgenerateapi.controller.filter_controller import BaseFilter
|
|
10
8
|
from tortoise import Model
|
|
11
9
|
|
|
@@ -20,8 +18,8 @@ def filter_schema_factory(model_class: Type[Model], fields: list[str, tuple[str,
|
|
|
20
18
|
|
|
21
19
|
for base_field in fields or []:
|
|
22
20
|
if not isinstance(base_field, BaseFilter):
|
|
23
|
-
base_field = BaseFilter(base_field)
|
|
24
|
-
f = base_field.
|
|
21
|
+
base_field = BaseFilter(base_field, model_class)
|
|
22
|
+
f = base_field.model_field
|
|
25
23
|
t = base_field.field_type
|
|
26
24
|
if base_field.field_info:
|
|
27
25
|
model_fields.update({
|
|
@@ -31,16 +29,7 @@ def filter_schema_factory(model_class: Type[Model], fields: list[str, tuple[str,
|
|
|
31
29
|
)
|
|
32
30
|
})
|
|
33
31
|
else:
|
|
34
|
-
|
|
35
|
-
model_fields.update({
|
|
36
|
-
f: (
|
|
37
|
-
Optional[t],
|
|
38
|
-
FieldInfo(
|
|
39
|
-
title=f"{description}",
|
|
40
|
-
default=Query("", description=description),
|
|
41
|
-
description=f"{description}"
|
|
42
|
-
))
|
|
43
|
-
})
|
|
32
|
+
warning(f"模型{model_class.__name__}筛选参数{base_field.model_field}未起效果")
|
|
44
33
|
|
|
45
34
|
filter_params_model: Type[BaseModel] = create_model(
|
|
46
35
|
model_class.__name__+"CommonFilterParams",
|
|
@@ -9,9 +9,9 @@ from fastgenerateapi.pydantic_utils.base_settings import BaseSettings
|
|
|
9
9
|
class AppSettings(BaseSettings):
|
|
10
10
|
# ####################################### 请求参数相关 ###############################################
|
|
11
11
|
# 字段配置
|
|
12
|
-
# 【驼峰格式】 推荐<fastgenerateapi.alias_to_camel> 可选<pydantic.alias_generators.
|
|
12
|
+
# 【驼峰格式】 推荐<fastgenerateapi.alias_to_camel> 可选<pydantic.alias_generators.to_camel><会忽略双下划线转单下划线配置>
|
|
13
13
|
# 【下划线】<pydantic.alias_generators.to_snake>
|
|
14
|
-
ALIAS_GENERATOR: Optional[str] = Field(default=
|
|
14
|
+
ALIAS_GENERATOR: Optional[str] = Field(default="alias_name", description="序列化参数命名方法路径")
|
|
15
15
|
# 分页对应字段以及配置默认值
|
|
16
16
|
WHETHER_PAGE_FIELD: Optional[str] = Field(default="no_page", description="判断是否分页字段")
|
|
17
17
|
CURRENT_PAGE_FIELD: Optional[str] = Field(default="page", description="当前页字段")
|
|
@@ -122,6 +122,13 @@ def alias_to_camel(value: str) -> str:
|
|
|
122
122
|
return to_camel(value)
|
|
123
123
|
|
|
124
124
|
|
|
125
|
+
def alias_name(value: str) -> str:
|
|
126
|
+
if settings.app_settings.FILTER_UNDERLINE_WHETHER_DOUBLE_TO_SINGLE:
|
|
127
|
+
value = value.replace("__", "_")
|
|
128
|
+
|
|
129
|
+
return value
|
|
130
|
+
|
|
131
|
+
|
|
125
132
|
if __name__ == '__main__':
|
|
126
133
|
# test parse_str_to_list
|
|
127
134
|
print(parse_str_to_list("我、你,他,她"))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_filter_view.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_tree_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/get_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/save_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/docx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/file_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/pdf_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/zip_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/update_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/channel/connection_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/router_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/ws_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/mysql_data_type.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/tortoise_type.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/deps/filter_params_deps.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
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/param_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/response_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.17 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/base_settings.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/json_encoders.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/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
|
|
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.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/redis_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/system_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.17 → fastgenerateapi-1.2.18}/fastgenerateapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|