2024-11-23 17:50:32 +08:00
|
|
|
import json
|
2024-11-25 14:38:58 +08:00
|
|
|
from functools import wraps
|
|
|
|
|
|
|
|
from flask import request, jsonify, current_app
|
|
|
|
|
|
|
|
|
2024-11-23 17:50:32 +08:00
|
|
|
def validate_request():
|
|
|
|
"""
|
|
|
|
验证请求中的JSON数据。
|
|
|
|
"""
|
|
|
|
if not request.is_json:
|
|
|
|
return jsonify({'error': 'Missing JSON in request'}), 400
|
|
|
|
file_url = request.json.get('file_url')
|
|
|
|
zb_type = request.json.get('zb_type', 1)
|
|
|
|
if not file_url:
|
|
|
|
return jsonify({'error': 'No file URL provided'}), 400
|
|
|
|
try:
|
|
|
|
zb_type = int(zb_type)
|
|
|
|
except (ValueError, TypeError):
|
|
|
|
return jsonify({'error': 'Invalid zb_type provided'}), 400
|
|
|
|
return file_url, zb_type
|
|
|
|
def generate_deviation_response(tech_deviation, tech_star_deviation, business_deviation, business_star_deviation,
|
|
|
|
zigefuhe_deviation, logger):
|
|
|
|
logger.info(f"技术偏离表: {json.dumps(tech_deviation, ensure_ascii=False, indent=4)}")
|
|
|
|
logger.info(f"技术偏离表带星: {json.dumps(tech_star_deviation, ensure_ascii=False, indent=4)}")
|
|
|
|
logger.info(f"商务偏离表: {json.dumps(business_deviation, ensure_ascii=False, indent=4)}")
|
|
|
|
logger.info(f"商务偏离表带星: {json.dumps(business_star_deviation, ensure_ascii=False, indent=4)}")
|
|
|
|
logger.info(f"资格检查偏离表: {json.dumps(zigefuhe_deviation, ensure_ascii=False, indent=4)}")
|
|
|
|
|
|
|
|
tech_deviation_response = {
|
|
|
|
'message': 'procurement_reqs',
|
|
|
|
'filename': 'procurement_reqs',
|
|
|
|
'data': json.dumps(tech_deviation, ensure_ascii=False)
|
|
|
|
}
|
|
|
|
tech_deviation_star_response = {
|
|
|
|
'message': 'jishu_star_deviation',
|
|
|
|
'filename': 'jishu_star_deviation',
|
|
|
|
'data': json.dumps(tech_star_deviation, ensure_ascii=False)
|
|
|
|
}
|
|
|
|
zigefuhe_deviation_response = {
|
|
|
|
'message': 'zigefuhe_deviation',
|
|
|
|
'filename': 'zigefuhe_deviation',
|
|
|
|
'data': json.dumps(zigefuhe_deviation, ensure_ascii=False)
|
|
|
|
}
|
|
|
|
shangwu_deviation_response = {
|
|
|
|
'message': 'shangwu_deviation',
|
|
|
|
'filename': 'shangwu_deviation',
|
|
|
|
'data': json.dumps(business_deviation, ensure_ascii=False)
|
|
|
|
}
|
|
|
|
shangwu_star_deviation_response = {
|
|
|
|
'message': 'shangwu_star_deviation',
|
|
|
|
'filename': 'shangwu_star_deviation',
|
|
|
|
'data': json.dumps(business_star_deviation, ensure_ascii=False)
|
|
|
|
}
|
2024-11-25 14:38:58 +08:00
|
|
|
return tech_deviation_response, tech_deviation_star_response, zigefuhe_deviation_response, shangwu_deviation_response, shangwu_star_deviation_response
|
|
|
|
|
|
|
|
|
|
|
|
def require_connection_limit():
|
|
|
|
"""装饰器:确保路由使用连接限制,并正确处理生成器函数"""
|
|
|
|
def decorator(f):
|
|
|
|
@wraps(f)
|
|
|
|
def wrapped(*args, **kwargs):
|
|
|
|
limiter = getattr(current_app, 'connection_limiter', None)
|
|
|
|
if limiter is None:
|
|
|
|
current_app.logger.error("ConnectionLimiter 未初始化")
|
|
|
|
return jsonify({'error': 'Server configuration error'}), 500
|
|
|
|
|
|
|
|
acquired = limiter.semaphore.acquire(blocking=True)
|
|
|
|
if not acquired:
|
|
|
|
return jsonify({
|
|
|
|
'error': 'Server is busy. Please try again later.',
|
|
|
|
'code': 503
|
|
|
|
}), 503
|
|
|
|
|
|
|
|
generator = f(*args, **kwargs)
|
|
|
|
try:
|
|
|
|
for item in generator:
|
|
|
|
yield item
|
|
|
|
finally:
|
|
|
|
limiter.semaphore.release()
|
|
|
|
return wrapped
|
|
|
|
return decorator
|