zbparse/flask_app/routes/little_zbparse.py

107 lines
3.4 KiB
Python
Raw Permalink Normal View History

# flask_app/routes/little_zbparse.py
import json
import os
2025-01-10 14:30:35 +08:00
from flask import Blueprint, g
2024-11-25 16:04:53 +08:00
from flask_app.ConnectionLimiter import require_connection_limit
2024-12-05 15:01:37 +08:00
from flask_app.general.format_change import download_file
2024-12-16 13:56:28 +08:00
from flask_app.routes.小解析main import little_parse_main
2025-01-10 14:30:35 +08:00
from flask_app.routes.utils import validate_and_setup_logger, create_response_normal
little_zbparse_bp = Blueprint('little_zbparse', __name__)
@little_zbparse_bp.route('/little_zbparse', methods=['POST'])
2024-11-26 11:32:24 +08:00
@validate_and_setup_logger
2024-12-02 11:10:49 +08:00
@require_connection_limit(timeout=300)
def little_zbparse():
logger = g.logger
2024-12-02 11:10:49 +08:00
file_url = g.file_url
zb_type = g.zb_type
try:
logger.info(f"Starting parsing URL: {file_url}")
final_json_path = download_and_process_file(file_url, zb_type)
if not final_json_path:
logger.info(f"上传的文件非招标文件或文件内容不完整!")
2025-01-10 14:30:35 +08:00
return create_response_normal(
message='上传的文件非招标文件或文件内容不完整!',
status='error',
data=''
)
response = generate_response(final_json_path)
return response
except Exception as e:
logger.error(f'Exception occurred: {e}')
2025-01-10 14:30:35 +08:00
return create_response_normal(
message='解析遇到不知名错误!',
status='error',
data=''
)
def download_and_process_file(file_url, zb_type):
"""
下载并处理文件根据 zb_type 选择处理函数
参数:
file_url (str): 文件的 URL 地址
zb_type (int): 标的类型1 表示工程标2 表示货物标
返回:
str or None: 处理后的文件路径或在失败时返回 None
"""
logger = g.logger
output_folder = g.output_folder
filename = "ztbfile"
downloaded_filename = os.path.join(output_folder, filename)
downloaded_filepath, file_type = download_file(file_url, downloaded_filename)
if downloaded_filepath is None or file_type == 4:
logger.error("Unsupported file type or failed to download file")
return None
logger.info(f"Local file path: {downloaded_filepath}")
processed_file_path = little_parse_main(output_folder, downloaded_filepath, file_type, zb_type, g.unique_id)
return processed_file_path
def generate_response(final_json_path):
"""
生成最终的成功响应或错误响应
参数:
final_json_path (str): 处理后的 JSON 文件路径
返回:
tuple: Flask 响应对象和状态码
"""
logger = g.logger
if not os.path.exists(final_json_path):
logger.error(f'final_json 未找到!: {final_json_path}')
2025-01-10 14:30:35 +08:00
return create_response_normal(
message='final_json not found',
status='error',
data=''
)
try:
with open(final_json_path, 'r', encoding='utf-8') as f:
zbparse_data = json.load(f)
json_str = json.dumps(zbparse_data, ensure_ascii=False)
except Exception as e:
logger.error(f'Error reading or parsing final_json: {e}')
2025-01-10 14:30:35 +08:00
return create_response_normal(
message='Error processing final_json.',
status='error',
data=''
)
2025-01-10 14:30:35 +08:00
return create_response_normal(
message='Little Parse processed successfully',
status='success',
data=json_str
)