fastgenerateapi 1.2.33__tar.gz → 1.2.34__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.34}/PKG-INFO +1 -1
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/file_tool/xlsx_util.py +47 -36
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/LICENSE +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/README.md +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/base_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/create_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/delete_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/get_all_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/get_one_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/get_relation_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/get_tree_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/switch_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/update_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/data_type/tortoise_type.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/fastapi_utils/tortoise_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/file_tool/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/file_tool/common.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/file_tool/docx_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/file_tool/file_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/file_tool/pdf_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/file_tool/zip_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/common_function.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/all_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/app_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/validator/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/validator/validator.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/setup.cfg +0 -0
- {fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/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,51 +185,59 @@ 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]]:
|
|
205
|
+
import time
|
|
206
|
+
|
|
202
207
|
data_list = []
|
|
203
|
-
|
|
204
|
-
|
|
208
|
+
# 使用iter_rows批量读取,利用只读模式优势
|
|
209
|
+
rows = sh.iter_rows(min_row=2, max_row=sh.max_row, values_only=False)
|
|
210
|
+
for row_index, row in enumerate(rows, start=2):
|
|
211
|
+
start_time = time.time()
|
|
212
|
+
row_data = self.row_to_dict(row, row_index)
|
|
205
213
|
if not row_data:
|
|
206
214
|
continue
|
|
207
215
|
row_data["_row_index"] = row_index
|
|
208
216
|
data_list.append(row_data)
|
|
217
|
+
print(f"get_data_dict第{row_index}行,内部代码执行时间: {time.time() - start_time:.6f} 秒")
|
|
209
218
|
|
|
210
219
|
return data_list
|
|
211
220
|
|
|
212
|
-
|
|
221
|
+
def row_to_dict(self, row, row_index) -> dict:
|
|
213
222
|
row_data = {}
|
|
214
|
-
error_msg =
|
|
215
|
-
|
|
223
|
+
error_msg = None
|
|
224
|
+
has_value = False
|
|
225
|
+
for i in range(min(len(row), self.fields_length)):
|
|
216
226
|
field = self.fields[i]
|
|
217
|
-
|
|
227
|
+
cell = row[i]
|
|
228
|
+
row_value = cell.value if cell else None
|
|
218
229
|
if row_value in [None, "", " "]:
|
|
219
230
|
row_value = None
|
|
220
231
|
elif isinstance(row_value, int):
|
|
221
232
|
row_value = str(row_value)
|
|
222
|
-
row_value =
|
|
233
|
+
row_value = self.validate_field(row_value)
|
|
223
234
|
if self.required_field_dict.get(field) and not row_value:
|
|
224
235
|
if not error_msg:
|
|
225
236
|
error_msg = f"第{row_index}行【{self.field_title_dict.get(field)}】不能为空"
|
|
226
|
-
row_data[
|
|
227
|
-
|
|
237
|
+
row_data[field] = row_value
|
|
238
|
+
if row_value:
|
|
239
|
+
has_value = True
|
|
240
|
+
if has_value:
|
|
228
241
|
if error_msg:
|
|
229
242
|
return ResponseMixin.error(msg=error_msg)
|
|
230
243
|
return row_data
|
|
@@ -377,7 +390,6 @@ class XlsxUtil:
|
|
|
377
390
|
try:
|
|
378
391
|
# 校验表头信息
|
|
379
392
|
await importer.check_headers(sh[1])
|
|
380
|
-
|
|
381
393
|
# 读取excel数据
|
|
382
394
|
rows = await importer.get_data_dict(sh)
|
|
383
395
|
finally:
|
|
@@ -387,7 +399,6 @@ class XlsxUtil:
|
|
|
387
399
|
return ResponseMixin.error(msg="导入数据不能为空")
|
|
388
400
|
# 处理完整数据
|
|
389
401
|
await importer.handle_data(rows)
|
|
390
|
-
|
|
391
402
|
return
|
|
392
403
|
|
|
393
404
|
@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.34}/fastgenerateapi/api_view/delete_filter_view.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/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.34}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/base_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/get_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/save_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/api_view/mixin/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/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.34}/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.34}/fastgenerateapi/controller/filter_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/router_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/controller/ws_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/data_type/mysql_data_type.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/data_type/tortoise_type.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/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.34}/fastgenerateapi/fastapi_utils/param_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/fastapi_utils/response_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/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.34}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/pydantic_utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/pydantic_utils/base_model.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/pydantic_utils/base_settings.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/pydantic_utils/json_encoders.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/fastgenerateapi/schemas_factory/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/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.34}/fastgenerateapi/settings/redis_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.33 → fastgenerateapi-1.2.34}/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.34}/fastgenerateapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|