fastgenerateapi 1.2.16__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.16 → fastgenerateapi-1.2.18}/PKG-INFO +1 -1
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/__init__.py +6 -1
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/base_view.py +3 -2
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/create_view.py +3 -4
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_all_view.py +8 -6
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_relation_view.py +5 -4
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_tree_view.py +2 -2
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/base_mixin.py +5 -3
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +28 -6
- fastgenerateapi-1.2.18/fastgenerateapi/api_view/mixin/get_mixin.py +11 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +15 -5
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/update_view.py +2 -3
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/filter_controller.py +28 -11
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/data_type.py +1 -3
- fastgenerateapi-1.2.18/fastgenerateapi/data_type/tortoise_type.py +7 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/all.py +1 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/tortoise_utils.py +30 -5
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/base_model.py +5 -4
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/filter_schema_factory.py +5 -16
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/app_settings.py +2 -2
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/str_util.py +7 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi.egg-info/SOURCES.txt +1 -0
- fastgenerateapi-1.2.16/fastgenerateapi/api_view/mixin/get_mixin.py +0 -13
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/LICENSE +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/README.md +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_view.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_one_view.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/switch_view.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/common_function.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/all_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/validator/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/validator/validator.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/setup.cfg +0 -0
- {fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/setup.py +0 -0
|
@@ -25,9 +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)
|
|
30
|
+
|
|
31
|
+
# 类型提示
|
|
32
|
+
from fastgenerateapi.data_type.tortoise_type import T_Model
|
|
29
33
|
|
|
30
34
|
# 工具相关
|
|
35
|
+
from fastgenerateapi.controller.filter_controller import FilterUtils
|
|
31
36
|
from fastgenerateapi.api_view.mixin.utils.docx_util import DocxUtil
|
|
32
37
|
from fastgenerateapi.api_view.mixin.utils.file_util import FileUtil
|
|
33
38
|
from fastgenerateapi.api_view.mixin.utils.pdf_util import PdfUtil
|
|
@@ -16,6 +16,7 @@ from fastgenerateapi.api_view.mixin.base_mixin import BaseMixin
|
|
|
16
16
|
from fastgenerateapi.api_view.mixin.dbmodel_mixin import DBModelMixin
|
|
17
17
|
from fastgenerateapi.api_view.mixin.response_mixin import ResponseMixin
|
|
18
18
|
from fastgenerateapi.api_view.mixin.tool_mixin import ToolMixin
|
|
19
|
+
from fastgenerateapi.data_type.tortoise_type import T_Model
|
|
19
20
|
from fastgenerateapi.schemas_factory import get_one_schema_factory, response_factory
|
|
20
21
|
from fastgenerateapi.settings.all_settings import settings
|
|
21
22
|
from fastgenerateapi.utils.exception import NOT_FOUND
|
|
@@ -24,7 +25,7 @@ from fastgenerateapi.utils.exception import NOT_FOUND
|
|
|
24
25
|
class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
25
26
|
|
|
26
27
|
prefix: Optional[str] = None # 路由追加后缀
|
|
27
|
-
model_class: Optional[Type[
|
|
28
|
+
model_class: Optional[Type[T_Model]] = None # 数据库模型
|
|
28
29
|
prefetch_related_fields: Optional[dict] = None
|
|
29
30
|
is_with_prefetch: Optional[bool] = False
|
|
30
31
|
response_schema: Optional[Type[BaseModel]] = None # 通用返回序列化
|
|
@@ -66,7 +67,7 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
|
|
|
66
67
|
return self.get_active_queryset(self.relation_model_class)
|
|
67
68
|
|
|
68
69
|
@classmethod
|
|
69
|
-
async def get_object(cls, pk, model_class, is_with_prefetch=False):
|
|
70
|
+
async def get_object(cls, pk, model_class: Type[T_Model], is_with_prefetch=False) -> T_Model:
|
|
70
71
|
queryset = cls.get_active_queryset(model_class).filter(id=pk)
|
|
71
72
|
if is_with_prefetch:
|
|
72
73
|
queryset = queryset.prefetch_related(*cls.prefetch_related_fields.keys())
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
from typing import Optional, Type, Union, Any
|
|
3
3
|
|
|
4
|
-
from pydantic import BaseModel as PydanticBaseModel
|
|
5
|
-
|
|
6
4
|
from fastapi import Depends
|
|
7
5
|
from fastapi.security import OAuth2PasswordBearer
|
|
8
6
|
from fastapi.types import DecoratedCallable
|
|
@@ -15,7 +13,8 @@ from tortoise.transactions import atomic
|
|
|
15
13
|
from fastgenerateapi.api_view.base_view import BaseView
|
|
16
14
|
from fastgenerateapi.api_view.mixin.save_mixin import SaveMixin
|
|
17
15
|
from fastgenerateapi.data_type.data_type import DEPENDENCIES
|
|
18
|
-
from fastgenerateapi.
|
|
16
|
+
from fastgenerateapi.data_type.tortoise_type import T_Model
|
|
17
|
+
from fastgenerateapi.schemas_factory import create_schema_factory, response_factory
|
|
19
18
|
from fastgenerateapi.settings.all_settings import settings
|
|
20
19
|
|
|
21
20
|
|
|
@@ -64,7 +63,7 @@ class CreateView(BaseView, SaveMixin):
|
|
|
64
63
|
|
|
65
64
|
return request_data.dict(exclude_unset=True)
|
|
66
65
|
|
|
67
|
-
async def set_create_model(self, data_dict: dict, request_data, *args, **kwargs) ->
|
|
66
|
+
async def set_create_model(self, data_dict: dict, request_data, *args, **kwargs) -> T_Model:
|
|
68
67
|
"""
|
|
69
68
|
在数据模型校验前后修改值
|
|
70
69
|
- 可用于全局修改
|
|
@@ -10,7 +10,6 @@ from pydantic import BaseModel
|
|
|
10
10
|
from starlette._utils import is_async_callable
|
|
11
11
|
from starlette.requests import Request
|
|
12
12
|
from starlette.responses import JSONResponse
|
|
13
|
-
from tortoise import Model
|
|
14
13
|
from tortoise.expressions import Q
|
|
15
14
|
from tortoise.queryset import QuerySet
|
|
16
15
|
|
|
@@ -20,6 +19,7 @@ from fastgenerateapi.cache.cache_decorator import get_all_cache_decorator
|
|
|
20
19
|
from fastgenerateapi.cache.key_builder import generate_key_builder
|
|
21
20
|
from fastgenerateapi.controller import SearchController, BaseFilter, FilterController
|
|
22
21
|
from fastgenerateapi.data_type.data_type import DEPENDENCIES, PYDANTIC_SCHEMA
|
|
22
|
+
from fastgenerateapi.data_type.tortoise_type import T_Model
|
|
23
23
|
from fastgenerateapi.deps import filter_params_deps
|
|
24
24
|
from fastgenerateapi.deps.filter_params_deps import search_params_deps, extra_filter_params_deps
|
|
25
25
|
from fastgenerateapi.pydantic_utils.base_model import PagePydantic
|
|
@@ -88,13 +88,15 @@ class GetAllView(BaseView, GetMixin):
|
|
|
88
88
|
"""
|
|
89
89
|
return queryset
|
|
90
90
|
|
|
91
|
-
async def set_get_all_model_list(self, model_list: List[
|
|
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
|
|
|
97
|
-
async def set_get_all_model(self, model:
|
|
99
|
+
async def set_get_all_model(self, model: T_Model, *args, **kwargs) -> T_Model:
|
|
98
100
|
"""
|
|
99
101
|
对于查询的model,展示数据处理
|
|
100
102
|
"""
|
|
@@ -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.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
@@ -14,6 +14,7 @@ from tortoise.queryset import QuerySet
|
|
|
14
14
|
from fastgenerateapi.api_view.base_view import BaseView
|
|
15
15
|
from fastgenerateapi.controller import SearchController, BaseFilter, FilterController
|
|
16
16
|
from fastgenerateapi.data_type.data_type import DEPENDENCIES
|
|
17
|
+
from fastgenerateapi.data_type.tortoise_type import T_Model
|
|
17
18
|
from fastgenerateapi.deps import filter_params_deps
|
|
18
19
|
from fastgenerateapi.deps.filter_params_deps import search_params_deps
|
|
19
20
|
from fastgenerateapi.pydantic_utils.base_model import PagePydantic
|
|
@@ -100,7 +101,7 @@ class GetRelationView(BaseView):
|
|
|
100
101
|
"""
|
|
101
102
|
return queryset
|
|
102
103
|
|
|
103
|
-
async def set_get_relation_model(self, model:
|
|
104
|
+
async def set_get_relation_model(self, model: T_Model) -> T_Model:
|
|
104
105
|
"""
|
|
105
106
|
对于查询的model,展示数据处理
|
|
106
107
|
"""
|
|
@@ -176,9 +177,9 @@ class GetRelationView(BaseView):
|
|
|
176
177
|
def _handler_get_relation_settings(self):
|
|
177
178
|
if not self.get_relation_route:
|
|
178
179
|
return
|
|
179
|
-
self.search_controller = SearchController(self.get_base_filter(self.search_fields))
|
|
180
|
-
self.filter_controller = FilterController(self.get_base_filter(self.filter_fields))
|
|
181
|
-
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))
|
|
182
183
|
|
|
183
184
|
func_type = inspect.signature(self.get_relation).return_annotation
|
|
184
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.16 → 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.16 → 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.16 → 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))
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
from typing import Optional, Type, Union, Any
|
|
3
3
|
|
|
4
|
-
from pydantic import BaseModel as PydanticBaseModel
|
|
5
|
-
|
|
6
4
|
from fastapi import Depends
|
|
7
5
|
from fastapi.security import OAuth2PasswordBearer
|
|
8
6
|
from fastapi.types import DecoratedCallable
|
|
@@ -15,6 +13,7 @@ from tortoise.transactions import atomic
|
|
|
15
13
|
from fastgenerateapi.api_view.base_view import BaseView
|
|
16
14
|
from fastgenerateapi.api_view.mixin.save_mixin import SaveMixin
|
|
17
15
|
from fastgenerateapi.data_type.data_type import DEPENDENCIES, CALLABLE
|
|
16
|
+
from fastgenerateapi.data_type.tortoise_type import T_Model
|
|
18
17
|
from fastgenerateapi.pydantic_utils.base_model import BaseModel
|
|
19
18
|
from fastgenerateapi.schemas_factory import update_schema_factory, get_one_schema_factory, response_factory
|
|
20
19
|
from fastgenerateapi.settings.all_settings import settings
|
|
@@ -56,7 +55,7 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
56
55
|
|
|
57
56
|
return request_data.dict(exclude_unset=True)
|
|
58
57
|
|
|
59
|
-
async def set_update_model(self, model:
|
|
58
|
+
async def set_update_model(self, model: T_Model, data_dict: dict, *args, **kwargs) -> T_Model:
|
|
60
59
|
"""
|
|
61
60
|
在数据模型校验前后修改值:
|
|
62
61
|
- 这里修改将不做唯一字段校验
|
{fastgenerateapi-1.2.16 → 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
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
from typing import Callable, List, Optional, Sequence, TypeVar, Dict, Union, Type
|
|
2
2
|
|
|
3
3
|
from fastapi import Depends
|
|
4
|
-
|
|
5
|
-
from fastgenerateapi.pydantic_utils.base_model import BaseModel
|
|
6
|
-
|
|
4
|
+
from pydantic import BaseModel
|
|
7
5
|
|
|
8
6
|
PAGINATION = Dict[str, Optional[int]]
|
|
9
7
|
PYDANTIC_SCHEMA = BaseModel
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/tortoise_utils.py
RENAMED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
from typing import Optional
|
|
1
|
+
from typing import Optional, Any, Literal, Union
|
|
2
2
|
|
|
3
|
-
from tortoise import BaseDBAsyncClient, connections, transactions
|
|
3
|
+
from tortoise import BaseDBAsyncClient, connections, transactions, fields, ForeignKeyFieldInstance
|
|
4
4
|
from tortoise.exceptions import ParamsError
|
|
5
|
+
from tortoise.fields import ForeignKeyRelation, CASCADE, OnDelete, ForeignKeyNullableRelation
|
|
6
|
+
from tortoise.models import MODEL
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
def _get_connection(connection_name: Optional[str]) -> BaseDBAsyncClient:
|
|
8
|
-
|
|
10
|
+
"""
|
|
11
|
+
修改目的:当多数据库源时,@atomic()有默认的源
|
|
12
|
+
:param connection_name:
|
|
13
|
+
:return:
|
|
14
|
+
"""
|
|
15
|
+
# 来源 tortoise-orm==0.25.1
|
|
9
16
|
# if connection_name:
|
|
10
17
|
# connection = connections.get(connection_name)
|
|
11
18
|
# elif len(connections.db_config) == 1:
|
|
@@ -21,7 +28,7 @@ def _get_connection(connection_name: Optional[str]) -> BaseDBAsyncClient:
|
|
|
21
28
|
connection = connections.get(connection_name)
|
|
22
29
|
elif len(connections.db_config) >= 1:
|
|
23
30
|
# 默认选排序第一个
|
|
24
|
-
connection_name = next(iter(connections.db_config.keys()))
|
|
31
|
+
connection_name = connections.db_config.get("default") or next(iter(connections.db_config.keys()))
|
|
25
32
|
connection = connections.get(connection_name)
|
|
26
33
|
else:
|
|
27
34
|
raise ParamsError(
|
|
@@ -31,9 +38,27 @@ def _get_connection(connection_name: Optional[str]) -> BaseDBAsyncClient:
|
|
|
31
38
|
return connection
|
|
32
39
|
|
|
33
40
|
|
|
34
|
-
|
|
41
|
+
def ForeignKeyField(
|
|
42
|
+
model_name: str,
|
|
43
|
+
related_name: Union[str, None, Literal[False]] = None,
|
|
44
|
+
on_delete: OnDelete = CASCADE,
|
|
45
|
+
db_constraint: bool = False,
|
|
46
|
+
null: bool = False,
|
|
47
|
+
**kwargs: Any,
|
|
48
|
+
) -> Union[ForeignKeyRelation[MODEL], ForeignKeyNullableRelation[MODEL]]:
|
|
49
|
+
"""
|
|
50
|
+
修改内容 db_constraint: bool = False
|
|
51
|
+
修改目的:取消数据库外键约束
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
return ForeignKeyFieldInstance(
|
|
55
|
+
model_name, related_name, on_delete, db_constraint=db_constraint, null=null, **kwargs
|
|
56
|
+
)
|
|
35
57
|
|
|
36
58
|
|
|
59
|
+
transactions._get_connection = _get_connection
|
|
60
|
+
fields.ForeignKeyField = ForeignKeyField
|
|
61
|
+
|
|
37
62
|
|
|
38
63
|
|
|
39
64
|
|
{fastgenerateapi-1.2.16 → 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("我、你,他,她"))
|
|
@@ -50,6 +50,7 @@ fastgenerateapi/controller/ws_controller.py
|
|
|
50
50
|
fastgenerateapi/data_type/__init__.py
|
|
51
51
|
fastgenerateapi/data_type/data_type.py
|
|
52
52
|
fastgenerateapi/data_type/mysql_data_type.py
|
|
53
|
+
fastgenerateapi/data_type/tortoise_type.py
|
|
53
54
|
fastgenerateapi/deps/__init__.py
|
|
54
55
|
fastgenerateapi/deps/filter_params_deps.py
|
|
55
56
|
fastgenerateapi/deps/tree_params_deps.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_filter_view.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/delete_tree_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/save_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/docx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/file_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/pdf_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/api_view/mixin/utils/zip_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.16 → 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
|
{fastgenerateapi-1.2.16 → 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.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/router_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/controller/ws_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/data_type/mysql_data_type.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.16 → 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
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/fastapi_utils/param_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → 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.16 → fastgenerateapi-1.2.18}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/base_settings.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/pydantic_utils/json_encoders.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → fastgenerateapi-1.2.18}/fastgenerateapi/schemas_factory/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.16 → 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.16 → fastgenerateapi-1.2.18}/fastgenerateapi/settings/redis_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.16 → 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
|
{fastgenerateapi-1.2.16 → 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
|