fastgenerateapi 1.2.9__tar.gz → 1.2.10__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 (117) hide show
  1. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/PKG-INFO +1 -1
  2. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/__version__.py +1 -1
  3. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/base_view.py +16 -21
  4. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/create_view.py +2 -2
  5. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/get_all_view.py +1 -2
  6. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/get_one_view.py +13 -1
  7. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/switch_view.py +1 -1
  8. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/update_view.py +2 -2
  9. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/common_function.py +14 -0
  10. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/common_schema_factory.py +20 -12
  11. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -1
  12. fastgenerateapi-1.2.10/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +102 -0
  13. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +60 -36
  14. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/app_settings.py +3 -0
  15. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi.egg-info/PKG-INFO +1 -1
  16. fastgenerateapi-1.2.9/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -79
  17. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/LICENSE +0 -0
  18. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/README.md +0 -0
  19. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/__init__.py +0 -0
  20. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/__init__.py +0 -0
  21. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/api_view.py +0 -0
  22. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
  23. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
  24. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/delete_view.py +0 -0
  25. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/get_relation_view.py +0 -0
  26. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/get_tree_view.py +0 -0
  27. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
  28. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
  29. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
  30. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
  31. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
  32. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
  33. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
  34. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
  35. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
  36. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
  37. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
  38. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
  39. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
  40. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/sql_get_view.py +0 -0
  41. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/api_view/update_relation_view.py +0 -0
  42. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/cache/__init__.py +0 -0
  43. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/cache/cache_decorator.py +0 -0
  44. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/cache/key_builder.py +0 -0
  45. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/channel/__init__.py +0 -0
  46. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/channel/connection_manager.py +0 -0
  47. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/channel/consumer.py +0 -0
  48. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/channel/websocket_view.py +0 -0
  49. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/__init__.py +0 -0
  50. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/filter_controller.py +0 -0
  51. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/router_controller.py +0 -0
  52. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/rpc_controller.py +0 -0
  53. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/search_controller.py +0 -0
  54. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/controller/ws_controller.py +0 -0
  55. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/data_type/__init__.py +0 -0
  56. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/data_type/data_type.py +0 -0
  57. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
  58. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/deps/__init__.py +0 -0
  59. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/deps/filter_params_deps.py +0 -0
  60. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/deps/paginator_deps.py +0 -0
  61. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/deps/tree_params_deps.py +0 -0
  62. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/example/__init__.py +0 -0
  63. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/example/models.py +0 -0
  64. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/example/routers.py +0 -0
  65. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/example/schemas.py +0 -0
  66. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/example/views.py +0 -0
  67. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
  68. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/all.py +0 -0
  69. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
  70. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
  71. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/fastapi_utils/tortoise_utils.py +0 -0
  72. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/model/__init__.py +0 -0
  73. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/model/base_model.py +0 -0
  74. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/__init__.py +0 -0
  75. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/aes_field.py +0 -0
  76. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/enum_field.py +0 -0
  77. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/pk_field.py +0 -0
  78. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/pwd_field.py +0 -0
  79. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
  80. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/my_fields/validator.py +0 -0
  81. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
  82. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
  83. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
  84. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
  85. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/__init__.py +0 -0
  86. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
  87. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
  88. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
  89. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
  90. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
  91. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
  92. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/__init__.py +0 -0
  93. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/all_settings.py +0 -0
  94. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/db_settings.py +0 -0
  95. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/etcd_settings.py +0 -0
  96. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/file_settings.py +0 -0
  97. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/jwt_settings.py +0 -0
  98. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/otlp_settings.py +0 -0
  99. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/redis_settings.py +0 -0
  100. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/sms_settings.py +0 -0
  101. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/settings/system_settings.py +0 -0
  102. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/__init__.py +0 -0
  103. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/aes.py +0 -0
  104. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/auto_discover.py +0 -0
  105. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/exception.py +0 -0
  106. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/file_utils.py +0 -0
  107. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/pwd_utils.py +0 -0
  108. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/ramdom_utils.py +0 -0
  109. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/snowflake.py +0 -0
  110. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/str_util.py +0 -0
  111. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi/utils/swagger_to_js.py +0 -0
  112. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
  113. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
  114. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/fastgenerateapi.egg-info/top_level.txt +0 -0
  115. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/script/__init__.py +0 -0
  116. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/setup.cfg +0 -0
  117. {fastgenerateapi-1.2.9 → fastgenerateapi-1.2.10}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastgenerateapi
3
- Version: 1.2.9
3
+ Version: 1.2.10
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, 9)
11
+ VERSION = (1, 2, 10)
12
12
 
13
13
  __version__ = '.'.join(map(str, VERSION))
14
14
 
@@ -26,7 +26,7 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
26
26
  model_class: Optional[Type[Model]] = None # 数据库模型
27
27
  prefetch_related_fields: Union[None, dict] = None
28
28
  is_with_prefetch: Optional[bool] = False
29
- schema: Optional[Type[BaseModel]] = None # 返回序列化[未使用]
29
+ response_schema: Optional[Type[BaseModel]] = None # 通用返回序列化
30
30
  dependencies: Optional[Sequence[params.Depends]] = None
31
31
  tags: Optional[List[str]] = None # swagger标签
32
32
  check_ignore_error_fields: Optional[List[str]] = None # 检查唯一字段报错时,不展示这个字段
@@ -214,30 +214,25 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
214
214
  result[key] = val[0]
215
215
  return result
216
216
 
217
- def gen_get_one_response_schema(self):
218
- if not hasattr(self, "get_one_schema") or not self.get_one_schema:
219
- get_one_schema_include = []
220
- if hasattr(self, "is_with_prefetch") and self.is_with_prefetch and self.prefetch_related_fields:
221
- for key, value in self.prefetch_related_fields.items():
222
- if value and type(value) in [list, tuple, set]:
223
- for val in value:
224
- val_str = val
225
- if type(val) in [list, tuple, set]:
226
- val_str = val[0]
227
- get_one_schema_include.append(key + "__" + val_str)
228
- self.get_one_schema = get_one_schema_factory(model_class=self.model_class, include=get_one_schema_include)
229
-
230
- return self.get_one_schema
231
-
232
- def gen_get_one_response_schema_factory(self):
217
+ def get_response_schema(self):
233
218
  """
234
- 如果get_one_response_schema不存在,则生成
219
+ 如果response_schema不存在,则生成
235
220
  :return:
236
221
  """
237
- self.gen_get_one_response_schema()
238
- self.get_one_response_schema_factory = response_factory(self.get_one_schema, name="GetOne")
222
+ if not self.response_schema:
223
+ self.response_schema = get_one_schema_factory(model_class=self.model_class)
239
224
 
240
- return self.get_one_response_schema_factory
225
+ return self.response_schema
226
+
227
+ def get_response_schema_factory(self):
228
+ """
229
+ 如果response_schema不存在,则生成
230
+ :return:
231
+ """
232
+ self.get_response_schema()
233
+ self.response_schema_factory = response_factory(self.response_schema, name="Common")
234
+
235
+ return self.response_schema_factory
241
236
 
242
237
 
243
238
 
@@ -114,8 +114,8 @@ class CreateView(BaseView, SaveMixin):
114
114
  if self.create_response_schema:
115
115
  self.create_response_schema_factory = response_factory(self.create_response_schema, name="Create")
116
116
  else:
117
- self.create_response_schema_factory = self.gen_get_one_response_schema_factory()
118
- self.create_response_schema = self.get_one_schema
117
+ self.create_response_schema_factory = self.get_response_schema_factory()
118
+ self.create_response_schema = self.response_schema
119
119
  if not self.create_summary:
120
120
  doc = self.create.__doc__
121
121
  self.create_summary = doc.strip().split("\n")[0] if doc else f"Create"
@@ -193,8 +193,7 @@ class GetAllView(BaseView, GetMixin):
193
193
  if type(val) in [list, tuple, set]:
194
194
  val_str = val[0]
195
195
  get_all_schema_include.append(key + "__" + val_str)
196
- self.get_all_schema = get_all_schema_factory(self.model_class, include=get_all_schema_include) \
197
- if (get_all_schema_include or hasattr_get_all_schema(self.model_class)) else self.gen_get_one_response_schema()
196
+ self.get_all_schema = get_all_schema_factory(self.model_class, extra_include=get_all_schema_include)
198
197
  self.get_page_schema = get_page_schema_factory(self.get_all_schema)
199
198
  self.get_list_schema = get_list_schema_factory(self.get_all_schema)
200
199
  self.get_all_response_schema_factory = response_factory(self.get_page_schema, name="GetPage")
@@ -75,7 +75,19 @@ class GetOneView(BaseView, GetMixin):
75
75
  if func_type != inspect._empty and func_type is not None:
76
76
  self.get_one_schema = func_type
77
77
  if not self.get_one_schema:
78
- self.get_one_schema = self.gen_get_one_response_schema()
78
+ get_one_schema_include = []
79
+ if self.is_with_prefetch and self.prefetch_related_fields:
80
+ for key, value in self.prefetch_related_fields.items():
81
+ if value and type(value) in [list, tuple, set]:
82
+ for val in value:
83
+ val_str = val
84
+ if type(val) in [list, tuple, set]:
85
+ val_str = val[0]
86
+ get_one_schema_include.append(key + "__" + val_str)
87
+ self.get_one_schema = get_one_schema_factory(
88
+ model_class=self.model_class,
89
+ extra_include=get_one_schema_include
90
+ )
79
91
  self.get_one_response_schema_factory = response_factory(self.get_one_schema, name="GetOne")
80
92
  if not self.get_one_summary:
81
93
  doc = self.get_one.__doc__
@@ -66,7 +66,7 @@ class SwitchView(BaseView):
66
66
  path="/%s/{pk}" % ("switch_"+switch_route_field),
67
67
  endpoint=self._switch_decorator(switch_route_field),
68
68
  methods=["PUT"],
69
- response_model=self.gen_get_one_response_schema_factory(),
69
+ response_model=self.get_response_schema_factory(),
70
70
  summary=summary,
71
71
  dependencies=True,
72
72
  error_responses=[NOT_FOUND],
@@ -107,8 +107,8 @@ class UpdateView(BaseView, SaveMixin):
107
107
  if self.update_response_schema:
108
108
  self.update_response_schema_factory = response_factory(self.update_response_schema, name="Update")
109
109
  else:
110
- self.update_response_schema_factory = self.gen_get_one_response_schema_factory()
111
- self.update_response_schema = self.get_one_schema
110
+ self.update_response_schema_factory = self.get_response_schema_factory()
111
+ self.update_response_schema = self.response_schema
112
112
  if not self.update_summary:
113
113
  doc = self.update.__doc__
114
114
  self.update_summary = doc.strip().split("\n")[0] if doc else f"Update"
@@ -1,3 +1,5 @@
1
+ import time
2
+ from datetime import datetime
1
3
  from typing import Type, Optional, Union, List
2
4
 
3
5
  from pydantic import field_validator, model_validator
@@ -42,6 +44,18 @@ def get_field_info(value, description="", default_field_type=None) -> (Type, Fie
42
44
  if constraints:
43
45
  for key, val in constraints.items():
44
46
  field_info_dict.setdefault(key, val)
47
+ if settings.app_settings.SWAGGER_OPEN_DEFAULT_EXAMPLES:
48
+ examples = []
49
+ if value.field_type == str:
50
+ examples.append(value.description)
51
+ elif value.field_type == int:
52
+ if hasattr(value, "start_num"):
53
+ examples.append(value.start_num)
54
+ else:
55
+ examples.append(0)
56
+ elif value.field_type == datetime:
57
+ examples.append(int(time.time() * 1000))
58
+ field_info_dict.setdefault("examples", examples)
45
59
  return field_type, FieldInfo(**field_info_dict)
46
60
 
47
61
 
@@ -17,6 +17,8 @@ def common_schema_factory(
17
17
  extra_include: Union[list, tuple, set] = None,
18
18
  exclude: Union[list, tuple, set] = None,
19
19
  exclude_readonly: Optional[bool] = False,
20
+ pydantic_meta_include: Union[list, tuple, set] = None,
21
+ pydantic_meta_exclude: Optional[bool] = True,
20
22
  ) -> Type[T]:
21
23
  """
22
24
  Is used to create a CommonSchema
@@ -27,22 +29,28 @@ def common_schema_factory(
27
29
  exclude_fields = set()
28
30
  if exclude_readonly:
29
31
  exclude_fields.update(["id", "created_at", "modified_at", "updated_at"])
30
- if hasattr(model_class, "PydanticMeta"):
31
- if hasattr(model_class.PydanticMeta, "include"):
32
- include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
33
- all_fields_info.update(include_fields_dict)
34
- include_fields.update(include_fields_dict.keys())
35
- else:
36
- include_fields.update(all_fields_info.keys())
37
- if hasattr(model_class.PydanticMeta, "exclude"):
38
- exclude_fields.update(model_class.PydanticMeta.exclude)
39
- else:
40
- include_fields.update(all_fields_info.keys())
41
-
42
32
  if include:
43
33
  include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
44
34
  all_fields_info.update(include_fields_dict)
45
35
  include_fields.update(include_fields_dict.keys())
36
+ else:
37
+ if hasattr(model_class, "PydanticMeta"):
38
+ if pydantic_meta_include:
39
+ include_fields_dict = get_dict_from_pydanticmeta(model_class, pydantic_meta_include)
40
+ all_fields_info.update(include_fields_dict)
41
+ include_fields.update(include_fields_dict.keys())
42
+ else:
43
+ if hasattr(model_class.PydanticMeta, "include"):
44
+ include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
45
+ all_fields_info.update(include_fields_dict)
46
+ include_fields.update(include_fields_dict.keys())
47
+ else:
48
+ include_fields.update(all_fields_info.keys())
49
+ if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
50
+ exclude_fields.update(model_class.PydanticMeta.exclude)
51
+ else:
52
+ include_fields.update(all_fields_info.keys())
53
+
46
54
  if extra_include:
47
55
  include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
48
56
  all_fields_info.update(include_fields_dict)
@@ -4,7 +4,6 @@ from pydantic_core import PydanticUndefined
4
4
 
5
5
  from fastgenerateapi.settings.all_settings import settings
6
6
 
7
- # from fastgenerateapi.pydantic_utils.base_model import Config
8
7
  from pydantic import create_model
9
8
  from tortoise import Model
10
9
 
@@ -0,0 +1,102 @@
1
+ from typing import Type, Optional, Union, List
2
+
3
+ from tortoise import Model
4
+ from pydantic import create_model
5
+
6
+ from fastgenerateapi.data_type.data_type import T
7
+ from fastgenerateapi.pydantic_utils.base_model import model_config
8
+ from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
9
+ get_model_validate_text_to_list
10
+ from fastgenerateapi.settings.all_settings import settings
11
+
12
+
13
+ def get_relation_schema_factory(
14
+ model_class: Type[Model],
15
+ include: Union[list, tuple, set] = None,
16
+ extra_include: Union[list, tuple, set] = None,
17
+ exclude: Union[list, tuple, set] = None,
18
+ pydantic_meta_include: Union[list, tuple, set] = None,
19
+ pydantic_meta_exclude: Optional[bool] = True,
20
+ pydantic_meta_get_relation_include: Optional[bool] = True,
21
+ pydantic_meta_get_relation_exclude: Optional[bool] = True,
22
+ pydantic_meta_text_to_list: Optional[bool] = True,
23
+ name: Optional[str] = None
24
+ ) -> Optional[Type[T]]:
25
+ """
26
+ Is used to create a GetRelationSchema
27
+ """
28
+ all_fields_info: dict = get_dict_from_model_fields(model_class)
29
+
30
+ include_fields = set()
31
+ exclude_fields = set()
32
+ text_to_list_fields = set()
33
+ if include:
34
+ include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
35
+ all_fields_info.update(include_fields_dict)
36
+ include_fields.update(include_fields_dict.keys())
37
+ else:
38
+ if hasattr(model_class, "PydanticMeta"):
39
+ if pydantic_meta_include:
40
+ include_fields_dict = get_dict_from_pydanticmeta(model_class, pydantic_meta_include)
41
+ all_fields_info.update(include_fields_dict)
42
+ include_fields.update(include_fields_dict.keys())
43
+ else:
44
+ if hasattr(model_class.PydanticMeta, "include"):
45
+ include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
46
+ all_fields_info.update(include_fields_dict)
47
+ include_fields.update(include_fields_dict.keys())
48
+ else:
49
+ include_fields.update(all_fields_info.keys())
50
+ if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
51
+ exclude_fields.update(model_class.PydanticMeta.exclude)
52
+
53
+ if pydantic_meta_get_relation_include and hasattr(model_class.PydanticMeta, "get_relation_include"):
54
+ get_tree_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_tree_include)
55
+ all_fields_info.update(get_tree_include_fields_dict)
56
+ include_fields.update(get_tree_include_fields_dict.keys())
57
+ if pydantic_meta_get_relation_exclude and hasattr(model_class.PydanticMeta, "get_relation_exclude"):
58
+ exclude_fields.update(model_class.PydanticMeta.get_tree_exclude)
59
+ if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
60
+ text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
61
+ for field in text_to_list_fields:
62
+ field_info = all_fields_info.get(field)[1]
63
+ field_type = List[str] if field_info.is_required() else Optional[List[str]]
64
+ all_fields_info.update({field: (field_type, field_info)})
65
+ else:
66
+ include_fields.update(all_fields_info.keys())
67
+
68
+ if extra_include:
69
+ include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
70
+ all_fields_info.update(include_fields_dict)
71
+ include_fields.update(include_fields_dict.keys())
72
+ if exclude:
73
+ exclude_fields.update(exclude)
74
+
75
+ all_fields = include_fields.difference(exclude_fields)
76
+
77
+ if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
78
+ try:
79
+ all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
80
+ except Exception:
81
+ ...
82
+
83
+ schema_name = name if name else model_class.__name__ + "GetRelationSchema"
84
+ text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
85
+ schema: Type[T] = create_model(
86
+ schema_name,
87
+ **{field: all_fields_info[field] for field in all_fields},
88
+ __config__=model_config,
89
+ __validators__={**text_to_list_validators_dict},
90
+ )
91
+
92
+ return schema
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
@@ -1,13 +1,13 @@
1
1
  from typing import Type, Optional, Union, List
2
2
 
3
- from fastgenerateapi.schemas_factory.get_one_schema_factory import get_one_schema_factory
4
3
  from pydantic.fields import FieldInfo
5
4
  from tortoise import Model
6
5
  from pydantic import create_model
7
6
 
8
7
  from fastgenerateapi.data_type.data_type import T
9
8
  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
9
+ from fastgenerateapi.schemas_factory.common_function import get_dict_from_model_fields, get_dict_from_pydanticmeta, \
10
+ get_model_validate_text_to_list
11
11
  from fastgenerateapi.settings.all_settings import settings
12
12
 
13
13
 
@@ -16,47 +16,65 @@ def get_tree_schema_factory(
16
16
  include: Union[list, tuple, set] = None,
17
17
  extra_include: Union[list, tuple, set] = None,
18
18
  exclude: Union[list, tuple, set] = None,
19
+ pydantic_meta_include: Union[list, tuple, set] = None,
20
+ pydantic_meta_exclude: Optional[bool] = True,
21
+ pydantic_meta_get_include: Optional[bool] = True,
22
+ pydantic_meta_get_exclude: Optional[bool] = True,
23
+ pydantic_meta_get_tree_include: Optional[bool] = True,
24
+ pydantic_meta_get_tree_exclude: Optional[bool] = True,
25
+ pydantic_meta_text_to_list: Optional[bool] = True,
19
26
  name: Optional[str] = None
20
27
  ) -> Optional[Type[T]]:
21
28
  """
22
29
  Is used to create a GetTreeSchema
23
30
  """
24
- schema_name = name if name else model_class.__name__ + "GetTreeSchema"
25
-
26
31
  all_fields_info: dict = get_dict_from_model_fields(model_class)
27
32
 
28
33
  include_fields = set()
29
34
  exclude_fields = set()
30
- if hasattr(model_class, "PydanticMeta"):
31
- if hasattr(model_class.PydanticMeta, "get_tree_include"):
32
- get_tree_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_tree_include)
33
- all_fields_info.update(get_tree_include_fields_dict)
34
- include_fields.update(get_tree_include_fields_dict.keys())
35
- if hasattr(model_class.PydanticMeta, "include"):
36
- include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
37
- all_fields_info.update(include_fields_dict)
38
- include_fields.update(include_fields_dict.keys())
39
- else:
40
- include_fields.update(all_fields_info.keys())
41
-
42
- if hasattr(model_class.PydanticMeta, "get_include"):
43
- get_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_include)
44
- all_fields_info.update(get_include_fields_dict)
45
- include_fields.update(get_include_fields_dict.keys())
46
- if hasattr(model_class.PydanticMeta, "get_exclude"):
47
- exclude_fields.update(model_class.PydanticMeta.get_exclude)
48
-
49
- if hasattr(model_class.PydanticMeta, "get_tree_exclude"):
50
- exclude_fields.update(model_class.PydanticMeta.get_tree_exclude)
51
- if hasattr(model_class.PydanticMeta, "exclude"):
52
- exclude_fields.update(model_class.PydanticMeta.exclude)
53
- else:
54
- include_fields.update(all_fields_info.keys())
55
-
35
+ text_to_list_fields = set()
56
36
  if include:
57
37
  include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
58
38
  all_fields_info.update(include_fields_dict)
59
39
  include_fields.update(include_fields_dict.keys())
40
+ else:
41
+ if hasattr(model_class, "PydanticMeta"):
42
+ if pydantic_meta_include:
43
+ include_fields_dict = get_dict_from_pydanticmeta(model_class, pydantic_meta_include)
44
+ all_fields_info.update(include_fields_dict)
45
+ include_fields.update(include_fields_dict.keys())
46
+ else:
47
+ if hasattr(model_class.PydanticMeta, "include"):
48
+ include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
49
+ all_fields_info.update(include_fields_dict)
50
+ include_fields.update(include_fields_dict.keys())
51
+ else:
52
+ include_fields.update(all_fields_info.keys())
53
+ if pydantic_meta_exclude and hasattr(model_class.PydanticMeta, "exclude"):
54
+ exclude_fields.update(model_class.PydanticMeta.exclude)
55
+
56
+ if pydantic_meta_get_include and hasattr(model_class.PydanticMeta, "get_include"):
57
+ get_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_include)
58
+ all_fields_info.update(get_include_fields_dict)
59
+ include_fields.update(get_include_fields_dict.keys())
60
+ if pydantic_meta_get_exclude and hasattr(model_class.PydanticMeta, "get_exclude"):
61
+ exclude_fields.update(model_class.PydanticMeta.get_exclude)
62
+
63
+ if pydantic_meta_get_tree_include and hasattr(model_class.PydanticMeta, "get_tree_include"):
64
+ get_tree_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_tree_include)
65
+ all_fields_info.update(get_tree_include_fields_dict)
66
+ include_fields.update(get_tree_include_fields_dict.keys())
67
+ if pydantic_meta_get_tree_exclude and hasattr(model_class.PydanticMeta, "get_tree_exclude"):
68
+ exclude_fields.update(model_class.PydanticMeta.get_tree_exclude)
69
+ if pydantic_meta_text_to_list and hasattr(model_class.PydanticMeta, "text_to_list"):
70
+ text_to_list_fields = getattr(model_class.PydanticMeta, "text_to_list")
71
+ for field in text_to_list_fields:
72
+ field_info = all_fields_info.get(field)[1]
73
+ field_type = List[str] if field_info.is_required() else Optional[List[str]]
74
+ all_fields_info.update({field: (field_type, field_info)})
75
+ else:
76
+ include_fields.update(all_fields_info.keys())
77
+
60
78
  if extra_include:
61
79
  include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
62
80
  all_fields_info.update(include_fields_dict)
@@ -65,20 +83,26 @@ def get_tree_schema_factory(
65
83
  exclude_fields.update(exclude)
66
84
 
67
85
  all_fields = include_fields.difference(exclude_fields)
68
-
69
- all_fields_info.setdefault(
70
- settings.app_settings.DEFAULT_TREE_CHILDREN_FIELD,
71
- (Optional[List[schema_name]], FieldInfo(default=[], description="子级目录"))
72
- )
73
86
  all_fields.add(settings.app_settings.DEFAULT_TREE_CHILDREN_FIELD)
74
87
  if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
75
88
  try:
76
89
  all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
77
90
  except Exception:
78
91
  ...
92
+ schema_name = name if name else model_class.__name__ + "GetTreeSchema"
79
93
 
94
+ all_fields_info.setdefault(
95
+ settings.app_settings.DEFAULT_TREE_CHILDREN_FIELD,
96
+ (Optional[List[schema_name]], FieldInfo(default=[], description="子级目录"))
97
+ )
98
+
99
+ text_to_list_validators_dict = get_model_validate_text_to_list(text_to_list_fields)
80
100
  schema: Type[T] = create_model(
81
- schema_name, **{field: all_fields_info[field] for field in all_fields}, __config__=model_config)
101
+ schema_name,
102
+ **{field: all_fields_info[field] for field in all_fields},
103
+ __config__=model_config,
104
+ __validators__={**text_to_list_validators_dict},
105
+ )
82
106
 
83
107
  return schema
84
108
 
@@ -89,6 +89,9 @@ class AppSettings(BaseSettings):
89
89
  CACHE_TREE_WHETHER_OPEN: Optional[bool] = Field(default=False, description="树状查询是否打开缓存")
90
90
  CACHE_TREE_SECONDS: int = Field(default=3600, description="树状查询缓存时间,单位秒")
91
91
 
92
+ # ####################################### Swagger文档相关 ###############################################
93
+ SWAGGER_OPEN_DEFAULT_EXAMPLES: Optional[bool] = Field(default=False, description="是否添加默认值")
94
+
92
95
  model_config = SettingsConfigDict(
93
96
  env_prefix="APP_",
94
97
  env_file=".env",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastgenerateapi
3
- Version: 1.2.9
3
+ Version: 1.2.10
4
4
  Summary: FastAPIView Class View
5
5
  Author: ShiLiang
6
6
  Author-email: 2509144896@qq.com
@@ -1,79 +0,0 @@
1
- from typing import Type, Optional, Union, List
2
-
3
- from fastgenerateapi.schemas_factory.get_one_schema_factory import get_one_schema_factory
4
- from pydantic.fields import FieldInfo
5
- from tortoise import Model
6
- from pydantic import create_model
7
-
8
- from fastgenerateapi.data_type.data_type import T
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
11
- from fastgenerateapi.settings.all_settings import settings
12
-
13
-
14
- def get_relation_schema_factory(
15
- model_class: Type[Model],
16
- include: Union[list, tuple, set] = None,
17
- extra_include: Union[list, tuple, set] = None,
18
- exclude: Union[list, tuple, set] = None,
19
- name: Optional[str] = None
20
- ) -> Optional[Type[T]]:
21
- """
22
- Is used to create a GetRelationSchema
23
- """
24
- all_fields_info: dict = get_dict_from_model_fields(model_class)
25
-
26
- include_fields = set()
27
- exclude_fields = set()
28
- if hasattr(model_class, "PydanticMeta"):
29
- if hasattr(model_class.PydanticMeta, "get_relation_include"):
30
- get_tree_include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.get_tree_include)
31
- all_fields_info.update(get_tree_include_fields_dict)
32
- include_fields.update(get_tree_include_fields_dict.keys())
33
- if hasattr(model_class.PydanticMeta, "include"):
34
- include_fields_dict = get_dict_from_pydanticmeta(model_class, model_class.PydanticMeta.include)
35
- all_fields_info.update(include_fields_dict)
36
- include_fields.update(include_fields_dict.keys())
37
- else:
38
- include_fields.update(all_fields_info.keys())
39
- if hasattr(model_class.PydanticMeta, "get_relation_exclude"):
40
- exclude_fields.update(model_class.PydanticMeta.get_tree_exclude)
41
- if hasattr(model_class.PydanticMeta, "exclude"):
42
- exclude_fields.update(model_class.PydanticMeta.exclude)
43
- else:
44
- include_fields.update(all_fields_info.keys())
45
-
46
- if include:
47
- include_fields_dict = get_dict_from_pydanticmeta(model_class, include)
48
- all_fields_info.update(include_fields_dict)
49
- include_fields.update(include_fields_dict.keys())
50
- if extra_include:
51
- include_fields_dict = get_dict_from_pydanticmeta(model_class, extra_include)
52
- all_fields_info.update(include_fields_dict)
53
- include_fields.update(include_fields_dict.keys())
54
- if exclude:
55
- exclude_fields.update(exclude)
56
-
57
- all_fields = include_fields.difference(exclude_fields)
58
-
59
- if settings.app_settings.GET_EXCLUDE_ACTIVE_VALUE:
60
- try:
61
- all_fields.remove(settings.app_settings.WHETHER_DELETE_FIELD)
62
- except Exception:
63
- ...
64
-
65
- schema_name = name if name else model_class.__name__ + "GetRelationSchema"
66
- schema: Type[T] = create_model(
67
- schema_name, **{field: all_fields_info[field] for field in all_fields}, __config__=model_config)
68
-
69
- return schema
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-