fastgenerateapi 1.2.7__tar.gz → 1.2.9__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.
Files changed (116) hide show
  1. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/PKG-INFO +1 -1
  2. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/__version__.py +1 -1
  3. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/base_view.py +16 -29
  4. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/delete_view.py +1 -1
  5. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/controller/filter_controller.py +11 -1
  6. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/common_function.py +84 -4
  7. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/create_schema_factory.py +12 -3
  8. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/filter_schema_factory.py +23 -15
  9. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +21 -5
  10. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +19 -3
  11. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/update_schema_factory.py +16 -3
  12. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/all_settings.py +3 -6
  13. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/app_settings.py +35 -31
  14. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi.egg-info/PKG-INFO +1 -1
  15. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/LICENSE +0 -0
  16. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/README.md +0 -0
  17. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/__init__.py +0 -0
  18. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/__init__.py +0 -0
  19. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/api_view.py +0 -0
  20. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/create_view.py +0 -0
  21. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
  22. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
  23. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/get_all_view.py +0 -0
  24. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/get_one_view.py +0 -0
  25. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/get_relation_view.py +0 -0
  26. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/get_tree_view.py +0 -0
  27. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
  28. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
  29. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
  30. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
  31. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
  32. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
  33. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
  34. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
  35. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
  36. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
  37. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
  38. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
  39. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
  40. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/sql_get_view.py +0 -0
  41. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/switch_view.py +0 -0
  42. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/update_relation_view.py +0 -0
  43. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/api_view/update_view.py +0 -0
  44. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/cache/__init__.py +0 -0
  45. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/cache/cache_decorator.py +0 -0
  46. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/cache/key_builder.py +0 -0
  47. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/channel/__init__.py +0 -0
  48. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/channel/connection_manager.py +0 -0
  49. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/channel/consumer.py +0 -0
  50. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/channel/websocket_view.py +0 -0
  51. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/controller/__init__.py +0 -0
  52. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/controller/router_controller.py +0 -0
  53. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/controller/rpc_controller.py +0 -0
  54. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/controller/search_controller.py +0 -0
  55. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/controller/ws_controller.py +0 -0
  56. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/data_type/__init__.py +0 -0
  57. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/data_type/data_type.py +0 -0
  58. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
  59. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/deps/__init__.py +0 -0
  60. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/deps/filter_params_deps.py +0 -0
  61. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/deps/paginator_deps.py +0 -0
  62. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/deps/tree_params_deps.py +0 -0
  63. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/example/__init__.py +0 -0
  64. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/example/models.py +0 -0
  65. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/example/routers.py +0 -0
  66. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/example/schemas.py +0 -0
  67. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/example/views.py +0 -0
  68. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
  69. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/fastapi_utils/all.py +0 -0
  70. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
  71. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
  72. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/fastapi_utils/tortoise_utils.py +0 -0
  73. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/model/__init__.py +0 -0
  74. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/model/base_model.py +0 -0
  75. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/my_fields/__init__.py +0 -0
  76. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/my_fields/aes_field.py +0 -0
  77. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/my_fields/enum_field.py +0 -0
  78. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/my_fields/pk_field.py +0 -0
  79. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/my_fields/pwd_field.py +0 -0
  80. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
  81. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/my_fields/validator.py +0 -0
  82. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
  83. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
  84. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
  85. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
  86. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/__init__.py +0 -0
  87. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
  88. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
  89. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
  90. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
  91. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
  92. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/__init__.py +0 -0
  93. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/db_settings.py +0 -0
  94. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/etcd_settings.py +0 -0
  95. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/file_settings.py +0 -0
  96. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/jwt_settings.py +0 -0
  97. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/otlp_settings.py +0 -0
  98. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/redis_settings.py +0 -0
  99. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/sms_settings.py +0 -0
  100. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/settings/system_settings.py +0 -0
  101. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/__init__.py +0 -0
  102. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/aes.py +0 -0
  103. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/auto_discover.py +0 -0
  104. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/exception.py +0 -0
  105. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/file_utils.py +0 -0
  106. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/pwd_utils.py +0 -0
  107. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/ramdom_utils.py +0 -0
  108. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/snowflake.py +0 -0
  109. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/str_util.py +0 -0
  110. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi/utils/swagger_to_js.py +0 -0
  111. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
  112. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
  113. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/fastgenerateapi.egg-info/top_level.txt +0 -0
  114. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/script/__init__.py +0 -0
  115. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/setup.cfg +0 -0
  116. {fastgenerateapi-1.2.7 → fastgenerateapi-1.2.9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastgenerateapi
3
- Version: 1.2.7
3
+ Version: 1.2.9
4
4
  Summary: FastAPIView Class View
5
5
  Author: ShiLiang
6
6
  Author-email: 2509144896@qq.com
@@ -8,7 +8,7 @@
8
8
  # d8888P
9
9
 
10
10
 
11
- VERSION = (1, 2, 7)
11
+ VERSION = (1, 2, 9)
12
12
 
13
13
  __version__ = '.'.join(map(str, VERSION))
14
14
 
@@ -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
- check_ignore_error_fields: List[str] = None # 检查唯一字段报错时,不展示这个字段
32
+ check_ignore_error_fields: Optional[List[str]] = None # 检查唯一字段报错时,不展示这个字段
33
33
 
34
34
  """
35
35
  # 增加外键字段显示
@@ -143,9 +143,8 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
143
143
  )
144
144
  return schema.model_validate(model_dict)
145
145
 
146
- @classmethod
147
146
  async def check_unique_field(
148
- cls,
147
+ self,
149
148
  data_dict: dict,
150
149
  model_class: Type[Model],
151
150
  model: Union[Model, None] = None,
@@ -159,15 +158,21 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
159
158
  :param check_ignore_error_fields: 错误提示忽略字段,会合并类上的字段
160
159
  :return:
161
160
  """
162
- check_unique_fields = cls._get_unique_fields(model_class)
163
- check_unique_together_fields = cls._get_unique_together_fields(model_class)
161
+ check_unique_fields = self._get_unique_fields(model_class)
162
+ check_unique_together_fields = self._get_unique_together_fields(model_class)
164
163
  for unique_field in check_unique_fields:
165
164
  if unique_field in data_dict:
166
165
  unique_field_value = data_dict.get(unique_field)
167
166
  if model and unique_field_value == getattr(model, unique_field):
168
167
  continue
169
168
  if await model_class.filter(**{unique_field: unique_field_value}).first():
170
- return cls.error(msg=f"{cls.get_field_description(model_class, unique_field)}已存在相同值:{unique_field_value}")
169
+ return self.error(msg=f"{self.get_field_description(model_class, unique_field)}已存在相同值:{unique_field_value}")
170
+ # 聚合忽略错误提示字段
171
+ ignore_error_field_list = check_ignore_error_fields or []
172
+ if settings.app_settings.CHECK_IGNORE_ERROR_FIELDS:
173
+ ignore_error_field_list.extend(settings.app_settings.CHECK_IGNORE_ERROR_FIELDS.split(","))
174
+ if self.check_ignore_error_fields:
175
+ ignore_error_field_list.extend(self.check_ignore_error_fields)
171
176
  for unique_together_fields in check_unique_together_fields:
172
177
  filter_fields = {}
173
178
  is_equal = True
@@ -192,33 +197,15 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
192
197
  continue
193
198
 
194
199
  if await model_class.filter(**filter_fields).first():
195
- ignore_error_field_list = check_ignore_error_fields or []
196
200
  if settings.app_settings.WHETHER_DELETE_FIELD in description_fields:
197
201
  description_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
198
- return cls.error(
199
- msg=f"{cls.get_field_description(model_class, description_fields)}已存在相同值:{[filter_fields.get(field) for field in description_fields]}"
202
+ for ignore_error_field in ignore_error_field_list:
203
+ if ignore_error_field in description_fields:
204
+ description_fields.remove(ignore_error_field)
205
+ return self.error(
206
+ msg=f"{self.get_field_description(model_class, description_fields)}已存在相同值:{[filter_fields.get(field) for field in description_fields]}"
200
207
  )
201
208
 
202
- # @staticmethod
203
- # async def setattr_model_rpc(
204
- # rpc_class,
205
- # model: Model,
206
- # rpc_param: Union[Dict[str, Dict[str, List[Union[str, tuple]]]], Type[RPCParam]],
207
- # *args, **kwargs
208
- # ) -> Model:
209
- # if rpc_class is None or not model or not rpc_param:
210
- # return model
211
- # if not isinstance(rpc_param, RPCParam):
212
- # rpc_param = RPCParam(rpc_param, model)
213
- # rpc_obj = rpc_class(**rpc_param.request_param)
214
- # await rpc_obj.get_data()
215
- # for base_rpc_param in rpc_param.data:
216
- # setattr(
217
- # model,
218
- # base_rpc_param.response_field_alias_name,
219
- # rpc_obj.filter(base_rpc_param.model_field_value).get(base_rpc_param.response_field_name))
220
- # return model
221
-
222
209
  @staticmethod
223
210
  async def get_params(request: Request) -> dict:
224
211
  result = {}
@@ -69,7 +69,7 @@ class DeleteView(BaseView):
69
69
  self.delete_response_schema_factory = response_factory(self.delete_response_schema, name="Delete")
70
70
  if not self.delete_summary:
71
71
  doc = self.destroy.__doc__
72
- summary = doc.strip().split("\n")[0] if doc else "Delete All"
72
+ self.delete_summary = doc.strip().split("\n")[0] if doc else "Delete"
73
73
  path = f"/{settings.app_settings.ROUTER_DELETE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
74
74
  self._add_api_route(
75
75
  path=path,
@@ -1,6 +1,7 @@
1
1
  from datetime import datetime, date, time
2
2
  from typing import Union, Any, Optional
3
3
 
4
+ from pydantic.fields import FieldInfo
4
5
  from tortoise.expressions import Q
5
6
  from tortoise.queryset import QuerySet
6
7
 
@@ -56,11 +57,17 @@ class BaseFilter:
56
57
  """
57
58
  :param filter_str: Union[str, tuple]
58
59
  当tuple时,第一个为str,后面参数无顺序和数量要求,可以是 类型、重命名字符串、用于修改传值的方法
59
- example: name__contains or (create_at__gt, datetime) or (create_at__gt, datetime, create_time)
60
+ example:
61
+ name__contains
62
+ (create_at__gt, datetime)
63
+ (create_at__gt, datetime, create_time)
64
+ (publish_date, datetime, FilterUtils.date_to_datetime_23)
65
+ (publish_date, datetime, FieldInfo())
60
66
  """
61
67
  field_type = str
62
68
  model_field = filter_str
63
69
  filter_field = None
70
+ field_info = None
64
71
  filter_func = None
65
72
  # 判断filter表达式的类型
66
73
  if isinstance(filter_str, tuple):
@@ -71,6 +78,8 @@ class BaseFilter:
71
78
  field_type = f
72
79
  elif type(f) == str:
73
80
  filter_field = f
81
+ elif isinstance(f, FieldInfo):
82
+ field_info = f
74
83
  elif callable(f):
75
84
  filter_func = f
76
85
  if not filter_field:
@@ -81,6 +90,7 @@ class BaseFilter:
81
90
  self.field_type = field_type
82
91
  self.model_field = model_field
83
92
  self.filter_field = filter_field
93
+ self.field_info = field_info
84
94
  self.filter_func = filter_func
85
95
 
86
96
  def generate_q(self, value: Union[str, list, bool]) -> Q:
@@ -1,10 +1,11 @@
1
- from typing import Type, Optional, Union
1
+ from typing import Type, Optional, Union, List
2
2
 
3
- from pydantic import field_validator
3
+ from pydantic import field_validator, model_validator
4
4
  from pydantic.fields import FieldInfo
5
5
  from tortoise import Model
6
6
 
7
7
  from fastgenerateapi.api_view.mixin.dbmodel_mixin import DBModelMixin
8
+ from fastgenerateapi.pydantic_utils.base_model import alias_generator
8
9
  from fastgenerateapi.settings.all_settings import settings
9
10
 
10
11
 
@@ -26,8 +27,12 @@ def get_field_info(value, description="", default_field_type=None) -> (Type, Fie
26
27
  field_type = value.field_type
27
28
  required = True
28
29
  field_info_dict["required"] = required
29
- if not required and hasattr(value, "default") and not hasattr(value.default, '__call__'):
30
- field_info_dict.setdefault("default", value.default)
30
+
31
+ if not required:
32
+ if hasattr(value, "default") and not hasattr(value.default, '__call__'):
33
+ field_info_dict.setdefault("default", value.default)
34
+ else:
35
+ field_info_dict["default"] = None
31
36
  if hasattr(value, "description"):
32
37
  field_info_dict.setdefault("description", description + (value.description or ""))
33
38
  if hasattr(value, "alias"):
@@ -141,5 +146,80 @@ def get_validate_dict_from_fields(fields_info: dict) -> dict:
141
146
  return validator_dict
142
147
 
143
148
 
149
+ def get_model_validate_text_to_list(fields: Optional[List[str]]) -> dict:
150
+ """
151
+ 详情列表用于返回
152
+ :param fields:
153
+ :return:
154
+ """
155
+ if not fields:
156
+ return {}
157
+ def func(cls, data):
158
+ if isinstance(data, dict):
159
+ for field in fields:
160
+ value_str = data.get(field, None)
161
+ if isinstance(value_str, (list, tuple, set)):
162
+ field_value = list(value_str)
163
+ elif isinstance(value_str, str):
164
+ field_value = value_str.split(settings.app_settings.TEXT_TO_LIST_SPLIT_VALUE)
165
+ else:
166
+ field_value = value_str
167
+ data[field] = field_value
168
+ else:
169
+ for field in fields:
170
+ if hasattr(data, field):
171
+ value_str = getattr(data, field)
172
+ if isinstance(value_str, (list, tuple, set)):
173
+ field_value = list(value_str)
174
+ elif isinstance(value_str, str):
175
+ field_value = getattr(data, field).split(settings.app_settings.TEXT_TO_LIST_SPLIT_VALUE)
176
+ else:
177
+ field_value = []
178
+ setattr(data, field, field_value)
179
+ return data
180
+
181
+ return {
182
+ "text_to_list_func": model_validator(mode='before')(func)
183
+ }
144
184
 
145
185
 
186
+ def get_model_validate_list_to_text(fields: Optional[List[str]]) -> dict:
187
+ """
188
+ 创建修改用于保存
189
+ :param fields:
190
+ :return:
191
+ """
192
+ if not fields:
193
+ return {}
194
+ def func(cls, data: dict):
195
+ if isinstance(data, dict):
196
+ for field in fields:
197
+ if alias_generator:
198
+ field = alias_generator(field)
199
+ value_list = data.get(field, None)
200
+ if isinstance(value_list, (list, tuple, set)):
201
+ field_value = settings.app_settings.TEXT_TO_LIST_SPLIT_VALUE.join(list(value_list))
202
+ elif isinstance(value_list, str):
203
+ field_value = value_list
204
+ else:
205
+ field_value = None
206
+ data[field] = field_value
207
+ else:
208
+ for field in fields:
209
+ if alias_generator:
210
+ field = alias_generator(field)
211
+ if hasattr(data, field):
212
+ value_list = getattr(data, field)
213
+ if isinstance(value_list, (list, tuple, set)):
214
+ field_value = settings.app_settings.TEXT_TO_LIST_SPLIT_VALUE.join(list(value_list))
215
+ elif isinstance(value_list, str):
216
+ field_value = value_list
217
+ else:
218
+ field_value = None
219
+ setattr(data, field, field_value)
220
+ return data
221
+
222
+ return {
223
+ "list_to_text_func": model_validator(mode='before')(func)
224
+ }
225
+
@@ -1,4 +1,4 @@
1
- from typing import Type, Union, Optional
1
+ from typing import Type, Union, Optional, List
2
2
 
3
3
  from fastgenerateapi.settings.all_settings import settings
4
4
 
@@ -8,7 +8,7 @@ from tortoise import Model
8
8
 
9
9
  from fastgenerateapi.data_type.data_type import T
10
10
  from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
11
- get_validate_dict_from_fields
11
+ get_validate_dict_from_fields, get_model_validate_list_to_text
12
12
 
13
13
 
14
14
  def create_schema_factory(
@@ -23,6 +23,7 @@ def create_schema_factory(
23
23
  pydantic_meta_save_exclude: Optional[bool] = True,
24
24
  pydantic_meta_create_include: Optional[bool] = True,
25
25
  pydantic_meta_create_exclude: Optional[bool] = True,
26
+ pydantic_meta_text_to_list: Optional[bool] = True,
26
27
  name: Optional[str] = None
27
28
  ) -> Type[T]:
28
29
  """
@@ -71,6 +72,7 @@ def create_schema_factory(
71
72
 
72
73
  include_fields = set()
73
74
  exclude_fields = set()
75
+ text_to_list_fields = set()
74
76
  if include:
75
77
  include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
76
78
  all_fields_info.update(include_fields_dict)
@@ -102,6 +104,12 @@ def create_schema_factory(
102
104
  exclude_fields.update(model_class.PydanticMeta.save_exclude)
103
105
  if pydantic_meta_create_exclude and hasattr(model_class.PydanticMeta, "create_exclude"):
104
106
  exclude_fields.update(model_class.PydanticMeta.create_exclude)
107
+ if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
108
+ text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
109
+ for field in text_to_list_fields:
110
+ field_info = all_fields_info.get(field)[1]
111
+ field_type = Union[List[str], str] if field_info.is_required() else Union[List[str], str, None]
112
+ all_fields_info.update({field: (field_type, field_info)})
105
113
  else:
106
114
  include_fields.update(all_fields_info.keys())
107
115
 
@@ -128,11 +136,12 @@ def create_schema_factory(
128
136
  schema_name = name if name else model_class.__name__ + "CreateSchema"
129
137
  schema_field_dict = {field: all_fields_info[field] for field in all_fields}
130
138
  validators_dict = get_validate_dict_from_fields(schema_field_dict)
139
+ text_to_list_validators_dict = get_model_validate_list_to_text(text_to_list_fields)
131
140
  schema: Type[T] = create_model(
132
141
  schema_name,
133
142
  **schema_field_dict,
134
143
  __config__=model_config,
135
- __validators__=validators_dict,
144
+ __validators__={**validators_dict, **text_to_list_validators_dict},
136
145
  )
137
146
  return schema
138
147
 
@@ -18,21 +18,29 @@ def filter_schema_factory(model_class: Type[Model], fields: list[str, tuple[str,
18
18
  """
19
19
  model_fields = {}
20
20
 
21
- for field_info in fields or []:
22
- if not isinstance(field_info, BaseFilter):
23
- field_info = BaseFilter(field_info)
24
- f = field_info.filter_field
25
- t = field_info.field_type
26
- description = DBModelMixin.get_field_description(model_class, field_info.model_field)
27
- model_fields.update({
28
- f: (
29
- Optional[t],
30
- FieldInfo(
31
- title=f"{description}",
32
- default=Query("", description=description),
33
- description=f"{description}"
34
- ))
35
- })
21
+ for base_field in fields or []:
22
+ if not isinstance(base_field, BaseFilter):
23
+ base_field = BaseFilter(base_field)
24
+ f = base_field.filter_field
25
+ t = base_field.field_type
26
+ if base_field.field_info:
27
+ model_fields.update({
28
+ f: (
29
+ Optional[t],
30
+ base_field.field_info
31
+ )
32
+ })
33
+ else:
34
+ description = DBModelMixin.get_field_description(model_class, base_field.model_field)
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
+ })
36
44
 
37
45
  filter_params_model: Type[BaseModel] = create_model(
38
46
  model_class.__name__+"CommonFilterParams",
@@ -7,7 +7,8 @@ from pydantic import create_model
7
7
 
8
8
  from fastgenerateapi.data_type.data_type import T
9
9
  from fastgenerateapi.pydantic_utils.base_model import model_config
10
- from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta
10
+ from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
11
+ get_model_validate_text_to_list
11
12
  from fastgenerateapi.settings.all_settings import settings
12
13
 
13
14
 
@@ -29,6 +30,7 @@ def get_all_schema_factory(
29
30
  pydantic_meta_get_exclude: Optional[bool] = True,
30
31
  pydantic_meta_get_all_include: Optional[bool] = True,
31
32
  pydantic_meta_get_all_exclude: Optional[bool] = True,
33
+ pydantic_meta_text_to_list: Optional[bool] = True,
32
34
  name: Optional[str] = None,
33
35
  ) -> Optional[Type[T]]:
34
36
  """
@@ -86,6 +88,7 @@ def get_all_schema_factory(
86
88
 
87
89
  include_fields = set()
88
90
  exclude_fields = set()
91
+ text_to_list_fields = set()
89
92
  if include:
90
93
  include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
91
94
  all_fields_info.update(include_fields_dict)
@@ -119,6 +122,12 @@ def get_all_schema_factory(
119
122
  include_fields.update(get_all_include_fields_dict.keys())
120
123
  if pydantic_meta_get_all_exclude and hasattr(model_class.PydanticMeta, "get_all_exclude"):
121
124
  exclude_fields.update(model_class.PydanticMeta.get_all_exclude)
125
+ if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
126
+ text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
127
+ for field in text_to_list_fields:
128
+ field_info = all_fields_info.get(field)[1]
129
+ field_type = List[str] if field_info.is_required() else Optional[List[str]]
130
+ all_fields_info.update({field: (field_type, field_info)})
122
131
  else:
123
132
  include_fields.update(all_fields_info.keys())
124
133
 
@@ -137,20 +146,27 @@ def get_all_schema_factory(
137
146
  ...
138
147
 
139
148
  schema_name = name if name else model_class.__name__ + "GetAllSchema"
149
+ text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
140
150
  schema: Type[T] = create_model(
141
- schema_name, **{field: all_fields_info[field] for field in all_fields}, __config__=model_config)
151
+ schema_name,
152
+ **{field: all_fields_info[field] for field in all_fields},
153
+ __config__=model_config,
154
+ __validators__={**text_to_list_validators_dict},
155
+ )
142
156
  return schema
143
157
 
144
158
 
145
- def get_list_schema_factory(schema_cls: Type[T] = None, name: str = "") -> Type[T]:
159
+ def get_list_schema_factory(schema_cls: Type[T] = None, response_field: Optional[str] = None, name: str = "") -> Type[T]:
160
+ if not response_field:
161
+ response_field = settings.app_settings.LIST_RESPONSE_FIELD
146
162
  if schema_cls:
147
163
  fields = {
148
- settings.app_settings.LIST_RESPONSE_FIELD: (Optional[List[schema_cls]], FieldInfo(default=[], description="数据返回")),
164
+ response_field: (Optional[List[schema_cls]], FieldInfo(default=[], description="数据返回")),
149
165
  }
150
166
  name = schema_cls.__name__ + name + "GetListSchema"
151
167
  else:
152
168
  fields = {
153
- settings.app_settings.LIST_RESPONSE_FIELD: (Optional[List], FieldInfo(default=[], description="数据返回")),
169
+ response_field: (Optional[List], FieldInfo(default=[], description="数据返回")),
154
170
  }
155
171
  name = name + "GetListSchema"
156
172
  schema: Type[T] = create_model(name, **fields, __config__=model_config)
@@ -1,4 +1,6 @@
1
- from typing import Type, Optional, Union
1
+ from typing import Type, Optional, Union, List
2
+
3
+ from pydantic_core import PydanticUndefined
2
4
 
3
5
  from fastgenerateapi.settings.all_settings import settings
4
6
 
@@ -8,7 +10,8 @@ from tortoise import Model
8
10
 
9
11
  from fastgenerateapi.data_type.data_type import T
10
12
  from fastgenerateapi.pydantic_utils.base_model import model_config
11
- from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta
13
+ from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
14
+ get_model_validate_text_to_list
12
15
 
13
16
 
14
17
  def get_one_schema_factory(
@@ -22,6 +25,7 @@ def get_one_schema_factory(
22
25
  pydantic_meta_get_exclude: Optional[bool] = True,
23
26
  pydantic_meta_get_one_include: Optional[bool] = True,
24
27
  pydantic_meta_get_one_exclude: Optional[bool] = True,
28
+ pydantic_meta_text_to_list: Optional[bool] = True,
25
29
  name: Optional[str] = None
26
30
  ) -> Type[T]:
27
31
  """
@@ -76,6 +80,7 @@ def get_one_schema_factory(
76
80
 
77
81
  include_fields = set()
78
82
  exclude_fields = set()
83
+ text_to_list_fields = set()
79
84
  if include:
80
85
  include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
81
86
  all_fields_info.update(include_fields_dict)
@@ -109,6 +114,12 @@ def get_one_schema_factory(
109
114
  include_fields.update(get_one_include_fields_dict.keys())
110
115
  if pydantic_meta_get_one_exclude and hasattr(model_class.PydanticMeta, "get_one_exclude"):
111
116
  exclude_fields.update(model_class.PydanticMeta.get_one_exclude)
117
+ if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
118
+ text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
119
+ for field in text_to_list_fields:
120
+ field_info = all_fields_info.get(field)[1]
121
+ field_type = List[str] if field_info.is_required() else Optional[List[str]]
122
+ all_fields_info.update({field: (field_type, field_info)})
112
123
  else:
113
124
  include_fields.update(all_fields_info.keys())
114
125
 
@@ -128,8 +139,13 @@ def get_one_schema_factory(
128
139
  ...
129
140
 
130
141
  schema_name = name if name else model_class.__name__ + "GetOneSchema"
142
+ text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
131
143
  schema: Type[T] = create_model(
132
- schema_name, **{field: all_fields_info[field] for field in all_fields}, __config__=model_config)
144
+ schema_name,
145
+ **{field: all_fields_info[field] for field in all_fields},
146
+ __config__=model_config,
147
+ __validators__={**text_to_list_validators_dict},
148
+ )
133
149
  return schema
134
150
 
135
151
 
@@ -1,4 +1,6 @@
1
- from typing import Type, Union, Optional
1
+ from typing import Type, Union, Optional, List
2
+
3
+ from pydantic_core import PydanticUndefined
2
4
 
3
5
  from fastgenerateapi.settings.all_settings import settings
4
6
 
@@ -8,7 +10,7 @@ from tortoise import Model
8
10
 
9
11
  from fastgenerateapi.data_type.data_type import T
10
12
  from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
11
- get_validate_dict_from_fields
13
+ get_validate_dict_from_fields, get_model_validate_list_to_text
12
14
 
13
15
 
14
16
  def update_schema_factory(
@@ -23,6 +25,7 @@ def update_schema_factory(
23
25
  pydantic_meta_save_exclude: Optional[bool] = True,
24
26
  pydantic_meta_update_include: Optional[bool] = True,
25
27
  pydantic_meta_update_exclude: Optional[bool] = True,
28
+ pydantic_meta_text_to_list: Optional[bool] = True,
26
29
  name: Optional[str] = None
27
30
  ) -> Type[T]:
28
31
  """
@@ -71,6 +74,7 @@ def update_schema_factory(
71
74
 
72
75
  include_fields = set()
73
76
  exclude_fields = set()
77
+ text_to_list_fields = set()
74
78
  if include:
75
79
  include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
76
80
  all_fields_info.update(include_fields_dict)
@@ -102,6 +106,14 @@ def update_schema_factory(
102
106
  exclude_fields.update(model_class.PydanticMeta.save_exclude)
103
107
  if pydantic_meta_update_exclude and hasattr(model_class.PydanticMeta, "update_exclude"):
104
108
  exclude_fields.update(model_class.PydanticMeta.update_exclude)
109
+ if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
110
+ text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
111
+ for field in text_to_list_fields:
112
+ field_info = all_fields_info.get(field)[1]
113
+ field_type = Union[List[str], str] if field_info.is_required() else Union[List[str], str, None]
114
+ all_fields_info.update({field: (field_type, field_info)})
115
+ else:
116
+ include_fields.update(all_fields_info.keys())
105
117
 
106
118
  if extra_include:
107
119
  include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
@@ -126,10 +138,11 @@ def update_schema_factory(
126
138
  schema_name = name if name else model_class.__name__ + "UpdateSchema"
127
139
  schema_field_dict = {field: all_fields_info[field] for field in all_fields}
128
140
  validators_dict = get_validate_dict_from_fields(schema_field_dict)
141
+ text_to_list_validators_dict = get_model_validate_list_to_text(text_to_list_fields)
129
142
  schema: Type[T] = create_model(
130
143
  schema_name,
131
144
  **schema_field_dict,
132
145
  __config__=model_config,
133
- __validators__=validators_dict,
146
+ __validators__={**validators_dict, **text_to_list_validators_dict},
134
147
  )
135
148
  return schema
@@ -109,7 +109,6 @@ class SettingsModel(BaseModel):
109
109
  yaml_dict = yaml.safe_load(res)
110
110
  data_dict = {**yaml_dict, **data_dict}
111
111
 
112
- setting_dict = {}
113
112
  setting_models = cls.model_fields.copy()
114
113
  for k, v in setting_models.items():
115
114
  if isinstance(v, FieldInfo):
@@ -125,15 +124,13 @@ class SettingsModel(BaseModel):
125
124
  }
126
125
  else:
127
126
  annotation_dict = data_dict.get(v.annotation.__name__, {})
128
- setting_dict[k] = v.annotation(**annotation_dict)
127
+ setattr(cls, k, v.annotation(**annotation_dict))
129
128
 
130
- setting_data = cls(**setting_dict)
131
-
132
- return setting_data
129
+ return cls
133
130
 
134
131
  def watch(self):
135
132
  """
136
- 监听文件或这etcd变化,待完善
133
+ 监听文件或者etcd变化,待完善
137
134
  借用 etcd.watch(target)
138
135
  :return:
139
136
  """
@@ -7,10 +7,10 @@ from fastgenerateapi.pydantic_utils.base_settings import BaseSettings
7
7
 
8
8
 
9
9
  class AppSettings(BaseSettings):
10
+ # ####################################### 请求参数相关 ###############################################
10
11
  # 字段配置 驼峰格式:新版本(pydantic.alias_generators:to_camel)、老版本(pydantic.utils.to_lower_camel)
11
12
  # 下划线:pydantic.alias_generators.to_snake
12
13
  ALIAS_GENERATOR: Optional[str] = Field(default="pydantic.alias_generators.to_snake", description="序列化参数命名方法路径")
13
-
14
14
  # 分页对应字段以及配置默认值
15
15
  CURRENT_PAGE_FIELD: Optional[str] = Field(default="page", description="当前页字段")
16
16
  PAGE_SIZE_FIELD: Optional[str] = Field(default="page_size", description="每页数量字段")
@@ -20,18 +20,36 @@ class AppSettings(BaseSettings):
20
20
  DEFAULT_WHETHER_PAGE: Optional[bool] = Field(default=False, description="默认是否分页")
21
21
  DEFAULT_PAGE_SIZE: Optional[int] = Field(default=10, description="默认每页数量")
22
22
  DEFAULT_MAX_PAGE_SIZE: Optional[int] = Field(default=200, description="默认最大每页数量")
23
+ # GetAll 筛选是否双下划线转单下划线
24
+ FILTER_UNDERLINE_WHETHER_DOUBLE_TO_SINGLE: Optional[bool] = Field(default=True, description="筛选是否双下划线转单下划线")
25
+ SCHEMAS_UNDERLINE_WHETHER_DOUBLE_TO_SINGLE: Optional[bool] = Field(default=True, description="序列化字段是否双下划线转单下划线")
26
+
27
+ # ####################################### 返回值相关 ###############################################
28
+ # 返回格式字段配置默认值
29
+ CODE_RESPONSE_FIELD: Optional[bool] = Field(default=True, description="code返回字段")
30
+ CODE_SUCCESS_DEFAULT_VALUE: Optional[int] = Field(default=200, description="code成功返回值")
31
+ CODE_FAIL_DEFAULT_VALUE: Optional[int] = Field(default=-1, description="code失败返回值")
32
+ SUCCESS_RESPONSE_FIELD: Optional[bool] = Field(default=True, description="success返回字段")
33
+ MESSAGE_RESPONSE_FIELD: Optional[str] = Field(default="msg", description="消息返回字段")
34
+ DATA_RESPONSE_FIELD: Optional[str] = Field(default="data", description="数据返回字段")
35
+ LIST_RESPONSE_FIELD: Optional[str] = Field(default="list", description="列表页返回字段")
23
36
 
37
+ # ####################################### 业务代码相关 ###############################################
38
+ # 检查为一只忽略部分字段错误提示
39
+ CHECK_IGNORE_ERROR_FIELDS: Optional[str] = Field(default=None, description="【多个字段,分割】创建和修改联合索引时,错误提示忽略部分字段")
40
+ # Pydantic适用
41
+ TEXT_TO_LIST_SPLIT_VALUE: Optional[str] = Field(default="**@**", description="数据库字段TEXT返回前端List适用的分割值")
24
42
  # 方法优化项
25
43
  METHOD_TREE_CHOICE: Optional[str] = Field(default="map", description="树状查询方式{sql: sql循环查询,map: 内存查询}")
44
+ # 创建和修改是否返回详情
45
+ WHETHER_CREATE_RESPONSE_DATA: Optional[bool] = Field(default=False, description="创建是否返回详情")
46
+ WHETHER_UPDATE_RESPONSE_DATA: Optional[bool] = Field(default=False, description="修改是否返回详情")
47
+ # 递归字段
48
+ DEFAULT_TREE_PARENT_FIELD: Optional[str] = Field(default="parent", description="默认递归父级字段")
49
+ DEFAULT_TREE_CHILDREN_FIELD: Optional[str] = Field(default="children", description="默认递归子级字段")
50
+ DEFAULT_TREE_FILTER_FIELD: Optional[str] = Field(default="node_id", description="默认递归筛选开始节点字段")
26
51
 
27
- # 缓存配置参数
28
- CACHE_GET_ONE_WHETHER_OPEN: Optional[bool] = Field(default=False, description="查询详情是否打开缓存")
29
- CACHE_GET_ONE_SECONDS: int = Field(default=300, description="查询详情缓存时间,单位秒")
30
- CACHE_GET_ALL_WHETHER_OPEN: Optional[bool] = Field(default=False, description="查询列表是否打开缓存")
31
- CACHE_GET_ALL_SECONDS: int = Field(default=300, description="查询列表缓存时间,单位秒")
32
- CACHE_TREE_WHETHER_OPEN: Optional[bool] = Field(default=False, description="树状查询是否打开缓存")
33
- CACHE_TREE_SECONDS: int = Field(default=3600, description="树状查询缓存时间,单位秒")
34
-
52
+ # ####################################### 路由相关 ###############################################
35
53
  # 路由后缀字段是否添加以及配置默认值
36
54
  ROUTER_WHETHER_UNDERLINE_TO_STRIKE: Optional[bool] = Field(default=False, description="路由是否下划线转中划线")
37
55
  ROUTER_WHETHER_ADD_SUFFIX: Optional[bool] = Field(default=True, description="增删改查路由是否添加后缀")
@@ -43,7 +61,6 @@ class AppSettings(BaseSettings):
43
61
  ROUTER_DELETE_SUFFIX_FIELD: Optional[str] = Field(default="delete", description="删除路由后缀字段")
44
62
  ROUTER_RECURSION_DELETE_SUFFIX_FIELD: Optional[str] = Field(default="delete_tree", description="递归删除路由后缀字段")
45
63
  ROUTER_FILTER_DELETE_SUFFIX_FIELD: Optional[str] = Field(default="delete_filter", description="递归删除路由后缀字段")
46
-
47
64
  # 函数转换路由时,默认添加字段,(遵循restful规范时,get路由处理方案)
48
65
  RESTFUL_GET_ROUTER_ADD_PREFIX: Optional[str] = Field(default="", description="函数转换路由时:前缀添加字段")
49
66
  RESTFUL_GET_ROUTER_ADD_SUFFIX: Optional[str] = Field(default="", description="函数转换路由时:后缀pk前添加字段")
@@ -54,36 +71,23 @@ class AppSettings(BaseSettings):
54
71
  RESTFUL_DELETE_ROUTER_ADD_PREFIX: Optional[str] = Field(default="", description="函数转换路由时:前缀添加字段")
55
72
  RESTFUL_DELETE_ROUTER_ADD_SUFFIX: Optional[str] = Field(default="", description="函数转换路由时:后缀pk前添加字段")
56
73
 
74
+ # ####################################### 数据库相关 ###############################################
57
75
  # 分布式id
58
76
  WORKER_ID: Optional[int] = Field(default=1, description="数据中心(机器区域)ID")
59
77
  DATACENTER_ID: Optional[int] = Field(default=1, description="机器ID")
60
-
61
78
  # 数据库字段默认值
62
79
  WHETHER_DELETE_FIELD: Optional[str] = Field(default="deleted_at", description="是否删除字段;推荐命名 >> deleted_at;is_active")
63
80
  DELETE_FIELD_TYPE: Optional[str] = Field(default="time", description="删除字段类型;推荐命名 >> time;bool")
64
- # ACTIVE_DEFAULT_VALUE: Optional[bool] = Field(default=True, description="有效的默认值")
65
81
  GET_EXCLUDE_ACTIVE_VALUE: Optional[bool] = Field(default=True, description="查询结果是否排除有效字段")
66
82
  CREATE_EXCLUDE_ACTIVE_VALUE: Optional[bool] = Field(default=True, description="创建是否排除有效字段")
67
83
  UPDATE_EXCLUDE_ACTIVE_VALUE: Optional[bool] = Field(default=True, description="修改是否排除有效字段")
68
- DEFAULT_TREE_PARENT_FIELD: Optional[str] = Field(default="parent", description="默认递归父级字段")
69
- DEFAULT_TREE_CHILDREN_FIELD: Optional[str] = Field(default="children", description="默认递归子级字段")
70
- DEFAULT_TREE_FILTER_FIELD: Optional[str] = Field(default="node_id", description="默认递归筛选开始节点字段")
71
-
72
- # 返回格式字段配置默认值
73
- CODE_RESPONSE_FIELD: Optional[bool] = Field(default=True, description="code返回字段")
74
- CODE_SUCCESS_DEFAULT_VALUE: Optional[int] = Field(default=200, description="code成功返回值")
75
- CODE_FAIL_DEFAULT_VALUE: Optional[int] = Field(default=-1, description="code失败返回值")
76
- SUCCESS_RESPONSE_FIELD: Optional[bool] = Field(default=True, description="success返回字段")
77
- MESSAGE_RESPONSE_FIELD: Optional[str] = Field(default="msg", description="消息返回字段")
78
- DATA_RESPONSE_FIELD: Optional[str] = Field(default="data", description="数据返回字段")
79
- LIST_RESPONSE_FIELD: Optional[str] = Field(default="list", description="列表页返回字段")
80
- # 创建和修改是否返回详情
81
- WHETHER_CREATE_RESPONSE_DATA: Optional[bool] = Field(default=False, description="创建是否返回详情")
82
- WHETHER_UPDATE_RESPONSE_DATA: Optional[bool] = Field(default=False, description="修改是否返回详情")
83
-
84
- # GetAll 筛选是否双下划线转单下划线
85
- FILTER_UNDERLINE_WHETHER_DOUBLE_TO_SINGLE: Optional[bool] = Field(default=True, description="筛选是否双下划线转单下划线")
86
- SCHEMAS_UNDERLINE_WHETHER_DOUBLE_TO_SINGLE: Optional[bool] = Field(default=True, description="序列化字段是否双下划线转单下划线")
84
+ # 缓存配置参数
85
+ CACHE_GET_ONE_WHETHER_OPEN: Optional[bool] = Field(default=False, description="查询详情是否打开缓存")
86
+ CACHE_GET_ONE_SECONDS: int = Field(default=300, description="查询详情缓存时间,单位秒")
87
+ CACHE_GET_ALL_WHETHER_OPEN: Optional[bool] = Field(default=False, description="查询列表是否打开缓存")
88
+ CACHE_GET_ALL_SECONDS: int = Field(default=300, description="查询列表缓存时间,单位秒")
89
+ CACHE_TREE_WHETHER_OPEN: Optional[bool] = Field(default=False, description="树状查询是否打开缓存")
90
+ CACHE_TREE_SECONDS: int = Field(default=3600, description="树状查询缓存时间,单位秒")
87
91
 
88
92
  model_config = SettingsConfigDict(
89
93
  env_prefix="APP_",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastgenerateapi
3
- Version: 1.2.7
3
+ Version: 1.2.9
4
4
  Summary: FastAPIView Class View
5
5
  Author: ShiLiang
6
6
  Author-email: 2509144896@qq.com
File without changes