|
@@ -71,6 +71,7 @@ async def _post_form(
|
|
|
files: List[Tuple[str, bytes, str] | Tuple[str, bytes, str, str]],
|
|
files: List[Tuple[str, bytes, str] | Tuple[str, bytes, str, str]],
|
|
|
params: Optional[Dict[str, Any]] = None,
|
|
params: Optional[Dict[str, Any]] = None,
|
|
|
form_fields: Optional[Dict[str, Any]] = None,
|
|
form_fields: Optional[Dict[str, Any]] = None,
|
|
|
|
|
+ headers: Optional[Dict[str, str]] = None,
|
|
|
) -> Tuple[int, bytes]:
|
|
) -> Tuple[int, bytes]:
|
|
|
"""通用 multipart 调用:files 元素为 (field_name, file_bytes, filename[, content_type])。"""
|
|
"""通用 multipart 调用:files 元素为 (field_name, file_bytes, filename[, content_type])。"""
|
|
|
form_data = aiohttp.FormData()
|
|
form_data = aiohttp.FormData()
|
|
@@ -93,7 +94,7 @@ async def _post_form(
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
try:
|
|
try:
|
|
|
- async with session.post(url, data=form_data, params=params) as response:
|
|
|
|
|
|
|
+ async with session.post(url, data=form_data, params=params, headers=headers) as response:
|
|
|
response_content = await response.read()
|
|
response_content = await response.read()
|
|
|
if not response.ok:
|
|
if not response.ok:
|
|
|
logger.error(
|
|
logger.error(
|
|
@@ -208,6 +209,7 @@ async def create_card_record(
|
|
|
card_name: str,
|
|
card_name: str,
|
|
|
cardNo: Optional[str],
|
|
cardNo: Optional[str],
|
|
|
card_type: CardType,
|
|
card_type: CardType,
|
|
|
|
|
+ forward_headers: Optional[Dict[str, str]] = None,
|
|
|
) -> int:
|
|
) -> int:
|
|
|
"""调用自身服务创建新的卡牌记录"""
|
|
"""调用自身服务创建新的卡牌记录"""
|
|
|
url = f"{base_url}{settings.API_PREFIX}/cards/created"
|
|
url = f"{base_url}{settings.API_PREFIX}/cards/created"
|
|
@@ -215,7 +217,7 @@ async def create_card_record(
|
|
|
if cardNo:
|
|
if cardNo:
|
|
|
params["cardNo"] = cardNo
|
|
params["cardNo"] = cardNo
|
|
|
|
|
|
|
|
- async with session.post(url, params=params) as response:
|
|
|
|
|
|
|
+ async with session.post(url, params=params, headers=forward_headers) as response:
|
|
|
if response.status == 201:
|
|
if response.status == 201:
|
|
|
data = await response.json()
|
|
data = await response.json()
|
|
|
return data.get("id")
|
|
return data.get("id")
|
|
@@ -231,6 +233,7 @@ async def upload_main_image(
|
|
|
file_bytes: bytes,
|
|
file_bytes: bytes,
|
|
|
filename: str,
|
|
filename: str,
|
|
|
score_json: Dict[str, Any],
|
|
score_json: Dict[str, Any],
|
|
|
|
|
+ forward_headers: Optional[Dict[str, str]] = None,
|
|
|
):
|
|
):
|
|
|
"""带 JSON 的图走主图入库接口(fusion / ring / stripe 共用同一面的 detection_json)。"""
|
|
"""带 JSON 的图走主图入库接口(fusion / ring / stripe 共用同一面的 detection_json)。"""
|
|
|
url = f"{base_url}{settings.API_PREFIX}/images/insert/{card_id}"
|
|
url = f"{base_url}{settings.API_PREFIX}/images/insert/{card_id}"
|
|
@@ -247,6 +250,7 @@ async def upload_main_image(
|
|
|
("json_data_file", json_bytes, f"{image_type}_score.json", "application/json"),
|
|
("json_data_file", json_bytes, f"{image_type}_score.json", "application/json"),
|
|
|
],
|
|
],
|
|
|
form_fields=form_fields,
|
|
form_fields=form_fields,
|
|
|
|
|
+ headers=forward_headers,
|
|
|
)
|
|
)
|
|
|
if status != 201:
|
|
if status != 201:
|
|
|
logger.error(
|
|
logger.error(
|
|
@@ -263,6 +267,7 @@ async def upload_auxiliary_image(
|
|
|
image_type: str,
|
|
image_type: str,
|
|
|
file_bytes: bytes,
|
|
file_bytes: bytes,
|
|
|
filename: str,
|
|
filename: str,
|
|
|
|
|
+ forward_headers: Optional[Dict[str, str]] = None,
|
|
|
):
|
|
):
|
|
|
"""ring / gray / stripe 这些辅助图走灰度图入库接口(不带 JSON)。"""
|
|
"""ring / gray / stripe 这些辅助图走灰度图入库接口(不带 JSON)。"""
|
|
|
url = f"{base_url}{settings.API_PREFIX}/images/insert/gray/{card_id}"
|
|
url = f"{base_url}{settings.API_PREFIX}/images/insert/gray/{card_id}"
|
|
@@ -273,6 +278,7 @@ async def upload_auxiliary_image(
|
|
|
url=url,
|
|
url=url,
|
|
|
files=[("image", file_bytes, filename or f"{image_type}.jpg")],
|
|
files=[("image", file_bytes, filename or f"{image_type}.jpg")],
|
|
|
form_fields=form_fields,
|
|
form_fields=form_fields,
|
|
|
|
|
+ headers=forward_headers,
|
|
|
)
|
|
)
|
|
|
if status != 201:
|
|
if status != 201:
|
|
|
logger.error(
|
|
logger.error(
|
|
@@ -308,6 +314,7 @@ async def _run_import_flow(
|
|
|
strict_mode: bool,
|
|
strict_mode: bool,
|
|
|
bytes_map: Dict[str, Tuple[bytes, str]],
|
|
bytes_map: Dict[str, Tuple[bytes, str]],
|
|
|
non_gray_to_main: bool = False,
|
|
non_gray_to_main: bool = False,
|
|
|
|
|
+ forward_headers: Optional[Dict[str, str]] = None,
|
|
|
) -> Dict[str, Any]:
|
|
) -> Dict[str, Any]:
|
|
|
"""
|
|
"""
|
|
|
共用导入流程:bytes_map 的 key 是 image_type,value 是 (bytes, filename)。
|
|
共用导入流程:bytes_map 的 key 是 image_type,value 是 (bytes, filename)。
|
|
@@ -361,7 +368,14 @@ async def _run_import_flow(
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
# 2. 创建卡牌
|
|
# 2. 创建卡牌
|
|
|
- card_id = await create_card_record(session, local_base_url, card_name, cardNo, card_type)
|
|
|
|
|
|
|
+ card_id = await create_card_record(
|
|
|
|
|
+ session,
|
|
|
|
|
+ local_base_url,
|
|
|
|
|
+ card_name,
|
|
|
|
|
+ cardNo,
|
|
|
|
|
+ card_type,
|
|
|
|
|
+ forward_headers=forward_headers,
|
|
|
|
|
+ )
|
|
|
logger.info("auto_import card_created card_name=%s card_id=%s", card_name, card_id)
|
|
logger.info("auto_import card_created card_name=%s card_id=%s", card_name, card_id)
|
|
|
|
|
|
|
|
# 3. 串行上传所有图:避免同时打满本服务的数据库连接池
|
|
# 3. 串行上传所有图:避免同时打满本服务的数据库连接池
|
|
@@ -393,6 +407,7 @@ async def _run_import_flow(
|
|
|
await upload_main_image(
|
|
await upload_main_image(
|
|
|
session, local_base_url, card_id,
|
|
session, local_base_url, card_id,
|
|
|
image_type, f_bytes, f_name, score_json,
|
|
image_type, f_bytes, f_name, score_json,
|
|
|
|
|
+ forward_headers=forward_headers,
|
|
|
)
|
|
)
|
|
|
else:
|
|
else:
|
|
|
if field == "fusion" and score_json is None:
|
|
if field == "fusion" and score_json is None:
|
|
@@ -403,6 +418,7 @@ async def _run_import_flow(
|
|
|
await upload_auxiliary_image(
|
|
await upload_auxiliary_image(
|
|
|
session, local_base_url, card_id,
|
|
session, local_base_url, card_id,
|
|
|
image_type, f_bytes, f_name,
|
|
image_type, f_bytes, f_name,
|
|
|
|
|
+ forward_headers=forward_headers,
|
|
|
)
|
|
)
|
|
|
upload_count += 1
|
|
upload_count += 1
|
|
|
|
|
|
|
@@ -460,6 +476,10 @@ async def auto_import_script_api(
|
|
|
ring + gray + stripe1..4,返回的 JSON 落到对应 fusion 主图记录中。
|
|
ring + gray + stripe1..4,返回的 JSON 落到对应 fusion 主图记录中。
|
|
|
"""
|
|
"""
|
|
|
local_base_url = str(request.base_url).rstrip("/")
|
|
local_base_url = str(request.base_url).rstrip("/")
|
|
|
|
|
+ forward_headers: Dict[str, str] = {}
|
|
|
|
|
+ auth = request.headers.get("authorization")
|
|
|
|
|
+ if auth:
|
|
|
|
|
+ forward_headers["Authorization"] = auth
|
|
|
|
|
|
|
|
raw_inputs: Dict[str, Union[UploadFile, str, None]] = {
|
|
raw_inputs: Dict[str, Union[UploadFile, str, None]] = {
|
|
|
ImageType.front_fusion.value: front_fusion,
|
|
ImageType.front_fusion.value: front_fusion,
|
|
@@ -507,6 +527,7 @@ async def auto_import_script_api(
|
|
|
strict_mode=strict_mode,
|
|
strict_mode=strict_mode,
|
|
|
bytes_map=bytes_map,
|
|
bytes_map=bytes_map,
|
|
|
non_gray_to_main=True,
|
|
non_gray_to_main=True,
|
|
|
|
|
+ forward_headers=forward_headers or None,
|
|
|
)
|
|
)
|
|
|
except HTTPException as e:
|
|
except HTTPException as e:
|
|
|
logger.error(
|
|
logger.error(
|
|
@@ -546,6 +567,10 @@ async def auto_import_url_script_api(
|
|
|
back_stripe4: Optional[str] = Form(None, description="反面调光图4 URL"),
|
|
back_stripe4: Optional[str] = Form(None, description="反面调光图4 URL"),
|
|
|
):
|
|
):
|
|
|
local_base_url = str(request.base_url).rstrip("/")
|
|
local_base_url = str(request.base_url).rstrip("/")
|
|
|
|
|
+ forward_headers: Dict[str, str] = {}
|
|
|
|
|
+ auth = request.headers.get("authorization")
|
|
|
|
|
+ if auth:
|
|
|
|
|
+ forward_headers["Authorization"] = auth
|
|
|
|
|
|
|
|
url_inputs: Dict[str, Optional[str]] = {
|
|
url_inputs: Dict[str, Optional[str]] = {
|
|
|
ImageType.front_fusion.value: front_fusion,
|
|
ImageType.front_fusion.value: front_fusion,
|
|
@@ -610,6 +635,7 @@ async def auto_import_url_script_api(
|
|
|
strict_mode=strict_mode,
|
|
strict_mode=strict_mode,
|
|
|
bytes_map=bytes_map,
|
|
bytes_map=bytes_map,
|
|
|
non_gray_to_main=True,
|
|
non_gray_to_main=True,
|
|
|
|
|
+ forward_headers=forward_headers or None,
|
|
|
)
|
|
)
|
|
|
except HTTPException:
|
|
except HTTPException:
|
|
|
raise
|
|
raise
|