fastgenerateapi 1.2.33__tar.gz → 1.2.35__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.33 → fastgenerateapi-1.2.35}/PKG-INFO +1 -1
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/file_tool/xlsx_util.py +43 -36
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/LICENSE +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/README.md +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/base_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/create_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/delete_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/get_all_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/get_one_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/get_relation_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/get_tree_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/switch_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/update_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/data_type/tortoise_type.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/fastapi_utils/tortoise_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/file_tool/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/file_tool/common.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/file_tool/docx_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/file_tool/file_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/file_tool/pdf_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/file_tool/zip_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/common_function.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/all_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/app_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/validator/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/validator/validator.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/setup.cfg +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/setup.py +0 -0
|
@@ -123,42 +123,47 @@ class XlsxImporterImpl(XlsxImporterInterface):
|
|
|
123
123
|
def __init__(self, file: Optional[UploadFile], *args, **kwargs):
|
|
124
124
|
self.file = file
|
|
125
125
|
self.args = args
|
|
126
|
+
self.kwargs = kwargs
|
|
127
|
+
# 初始化时预计算常量,避免循环内重复计算
|
|
126
128
|
self.required_field_dict = {field: True for field in self.required_fields} if self.required_fields else {}
|
|
127
129
|
self.field_title_dict = {self.fields[i]: self.xlsx_headers[i] for i in range(len(self.fields))}
|
|
128
|
-
self.
|
|
130
|
+
self.fields_length = len(self.fields) if self.fields else 0
|
|
129
131
|
|
|
130
132
|
# ------------------------------ 钩子函数 ------------------------------------
|
|
131
133
|
async def handle_data(self, rows: List[Dict[str, str]]):
|
|
132
134
|
if not self.model_class:
|
|
133
|
-
raise NotImplementedError
|
|
134
|
-
|
|
135
|
+
raise NotImplementedError("model_class must be set")
|
|
136
|
+
|
|
135
137
|
global_dict = {}
|
|
136
138
|
if self.fields_handler:
|
|
137
139
|
if is_async_callable(self.fields_handler):
|
|
138
140
|
rows = await self.fields_handler(rows, *self.args, **self.kwargs, global_dict=global_dict)
|
|
139
141
|
else:
|
|
140
142
|
rows = self.fields_handler(rows, *self.args, **self.kwargs, global_dict=global_dict)
|
|
143
|
+
processed_rows = []
|
|
141
144
|
for row in rows:
|
|
142
145
|
try:
|
|
146
|
+
# 前置处理
|
|
143
147
|
if self.field_before_handler_list:
|
|
144
|
-
for
|
|
145
|
-
if is_async_callable(
|
|
146
|
-
row = await
|
|
148
|
+
for handler in self.field_before_handler_list:
|
|
149
|
+
if is_async_callable(handler):
|
|
150
|
+
row = await handler(row, *self.args, **self.kwargs, global_dict=global_dict)
|
|
147
151
|
else:
|
|
148
|
-
row =
|
|
152
|
+
row = handler(row, *self.args, **self.kwargs, global_dict=global_dict)
|
|
153
|
+
# 数据验证
|
|
149
154
|
if self.create_schema:
|
|
150
155
|
create_dict = self.create_schema(**row).model_dump(exclude_unset=True)
|
|
151
156
|
else:
|
|
152
157
|
create_dict = row
|
|
158
|
+
# 后置处理
|
|
153
159
|
if self.field_after_handler_list:
|
|
154
|
-
for
|
|
155
|
-
if is_async_callable(
|
|
156
|
-
create_dict = await
|
|
160
|
+
for handler in self.field_after_handler_list:
|
|
161
|
+
if is_async_callable(handler):
|
|
162
|
+
create_dict = await handler(create_dict, *self.args, **self.kwargs, global_dict=global_dict)
|
|
157
163
|
else:
|
|
158
|
-
create_dict =
|
|
159
|
-
if
|
|
160
|
-
|
|
161
|
-
create_obj = self.model_class(**create_dict)
|
|
164
|
+
create_dict = handler(create_dict, *self.args, **self.kwargs, global_dict=global_dict)
|
|
165
|
+
if create_dict:
|
|
166
|
+
processed_rows.append(self.model_class(**create_dict))
|
|
162
167
|
except ValidationError as e:
|
|
163
168
|
alise_dict = ToolMixin.get_schema_alise_to_name(self.create_schema)
|
|
164
169
|
_error_field = e.errors()[0].get('loc')[0]
|
|
@@ -167,9 +172,9 @@ class XlsxImporterImpl(XlsxImporterInterface):
|
|
|
167
172
|
if not row.get(error_field):
|
|
168
173
|
return ResponseMixin.error(msg=f"第{row['_row_index']}行【{description}】不能为空")
|
|
169
174
|
return ResponseMixin.error(msg=f"第{row['_row_index']}行【{description}】填写错误")
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
return
|
|
175
|
+
if processed_rows:
|
|
176
|
+
await self.model_class.bulk_create(processed_rows)
|
|
177
|
+
return processed_rows
|
|
173
178
|
|
|
174
179
|
async def upload_file(self, bytes_io: io.BytesIO):
|
|
175
180
|
raise NotImplementedError
|
|
@@ -180,28 +185,28 @@ class XlsxImporterImpl(XlsxImporterInterface):
|
|
|
180
185
|
async def push_status_error(self, msg: Optional[str]):
|
|
181
186
|
raise NotImplementedError
|
|
182
187
|
|
|
183
|
-
|
|
184
|
-
|
|
188
|
+
def validate_field(self, row_value):
|
|
189
|
+
"""字段验证逻辑"""
|
|
185
190
|
return row_value
|
|
186
191
|
|
|
187
192
|
# ------------------------------ 复用函数 ------------------------------------
|
|
188
193
|
async def check_headers(self, row: tuple[Cell, ...]):
|
|
189
194
|
if not self.xlsx_headers:
|
|
190
|
-
raise NotImplementedError
|
|
191
|
-
header_list = []
|
|
192
|
-
for col_index, col in enumerate(row):
|
|
193
|
-
header_list.append(col.value)
|
|
195
|
+
raise NotImplementedError("xlsx_headers must be set")
|
|
196
|
+
header_list = [cell.value for cell in row]
|
|
194
197
|
if len(header_list) != len(self.xlsx_headers):
|
|
195
|
-
return ResponseMixin.error(msg="
|
|
198
|
+
return ResponseMixin.error(msg=f"文件首行长度错误,期望{len(self.xlsx_headers)}列,实际{len(header_list)}列")
|
|
196
199
|
if not operator.eq(header_list, self.xlsx_headers):
|
|
197
|
-
return ResponseMixin.error(msg="
|
|
200
|
+
return ResponseMixin.error(msg="文件首行内容校验错误,请检查导入模板是否正确")
|
|
198
201
|
|
|
199
202
|
return
|
|
200
203
|
|
|
201
204
|
async def get_data_dict(self, sh: Worksheet) -> List[Dict[str, str]]:
|
|
202
205
|
data_list = []
|
|
203
|
-
|
|
204
|
-
|
|
206
|
+
# 使用iter_rows批量读取,利用只读模式优势
|
|
207
|
+
rows = sh.iter_rows(min_row=2, max_row=sh.max_row, values_only=False)
|
|
208
|
+
for row_index, row in enumerate(rows, start=2):
|
|
209
|
+
row_data = self.row_to_dict(row, row_index)
|
|
205
210
|
if not row_data:
|
|
206
211
|
continue
|
|
207
212
|
row_data["_row_index"] = row_index
|
|
@@ -209,22 +214,26 @@ class XlsxImporterImpl(XlsxImporterInterface):
|
|
|
209
214
|
|
|
210
215
|
return data_list
|
|
211
216
|
|
|
212
|
-
|
|
217
|
+
def row_to_dict(self, row, row_index) -> dict:
|
|
213
218
|
row_data = {}
|
|
214
|
-
error_msg =
|
|
215
|
-
|
|
219
|
+
error_msg = None
|
|
220
|
+
has_value = False
|
|
221
|
+
for i in range(min(len(row), self.fields_length)):
|
|
216
222
|
field = self.fields[i]
|
|
217
|
-
|
|
223
|
+
cell = row[i]
|
|
224
|
+
row_value = cell.value if cell else None
|
|
218
225
|
if row_value in [None, "", " "]:
|
|
219
226
|
row_value = None
|
|
220
227
|
elif isinstance(row_value, int):
|
|
221
228
|
row_value = str(row_value)
|
|
222
|
-
row_value =
|
|
229
|
+
row_value = self.validate_field(row_value)
|
|
223
230
|
if self.required_field_dict.get(field) and not row_value:
|
|
224
231
|
if not error_msg:
|
|
225
232
|
error_msg = f"第{row_index}行【{self.field_title_dict.get(field)}】不能为空"
|
|
226
|
-
row_data[
|
|
227
|
-
|
|
233
|
+
row_data[field] = row_value
|
|
234
|
+
if row_value:
|
|
235
|
+
has_value = True
|
|
236
|
+
if has_value:
|
|
228
237
|
if error_msg:
|
|
229
238
|
return ResponseMixin.error(msg=error_msg)
|
|
230
239
|
return row_data
|
|
@@ -377,7 +386,6 @@ class XlsxUtil:
|
|
|
377
386
|
try:
|
|
378
387
|
# 校验表头信息
|
|
379
388
|
await importer.check_headers(sh[1])
|
|
380
|
-
|
|
381
389
|
# 读取excel数据
|
|
382
390
|
rows = await importer.get_data_dict(sh)
|
|
383
391
|
finally:
|
|
@@ -387,7 +395,6 @@ class XlsxUtil:
|
|
|
387
395
|
return ResponseMixin.error(msg="导入数据不能为空")
|
|
388
396
|
# 处理完整数据
|
|
389
397
|
await importer.handle_data(rows)
|
|
390
|
-
|
|
391
398
|
return
|
|
392
399
|
|
|
393
400
|
@staticmethod
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/delete_filter_view.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/delete_tree_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/base_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/get_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/save_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/mixin/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/api_view/update_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/channel/connection_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/filter_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/router_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/controller/ws_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/data_type/mysql_data_type.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/data_type/tortoise_type.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/deps/filter_params_deps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/fastapi_utils/param_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/fastapi_utils/response_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/fastapi_utils/tortoise_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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/pydantic_utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/pydantic_utils/base_model.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/pydantic_utils/base_settings.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/pydantic_utils/json_encoders.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/schemas_factory/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/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
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/redis_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi/settings/system_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.35}/fastgenerateapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|