56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
"""
|
|
Helpers para construir respuestas de scan y commit (formato unificado).
|
|
"""
|
|
from typing import Dict, Any, List, Optional
|
|
|
|
|
|
def scan_result(
|
|
job_id: str,
|
|
processed_rows: int,
|
|
error_count: int,
|
|
errors_detail: List[Dict[str, Any]],
|
|
total_rows_in_file: Optional[int] = None,
|
|
message: Optional[str] = None,
|
|
) -> Dict[str, Any]:
|
|
"""Respuesta de scan_file (waiting_confirmation).
|
|
Si total_rows_in_file no se pasa, se usa processed_rows como total (comportamiento anterior).
|
|
"""
|
|
total = total_rows_in_file if total_rows_in_file is not None else processed_rows
|
|
out: Dict[str, Any] = {
|
|
"status": "waiting_confirmation",
|
|
"job_id": job_id,
|
|
"total_rows": total,
|
|
"error_count": error_count,
|
|
"valid_rows": processed_rows - error_count,
|
|
"errors": errors_detail,
|
|
}
|
|
if message:
|
|
out["message"] = message
|
|
return out
|
|
|
|
|
|
def commit_result(
|
|
status: str,
|
|
inserted: int,
|
|
skipped_invalid: int,
|
|
skipped_missing_fk: int,
|
|
skipped_duplicate: int,
|
|
skipped_details: List[Dict[str, Any]],
|
|
message: Optional[str] = None,
|
|
error: Optional[str] = None,
|
|
) -> Dict[str, Any]:
|
|
"""Respuesta de insert_valid_rows (finished / warning / failed)."""
|
|
out = {
|
|
"status": status,
|
|
"inserted": inserted,
|
|
"skipped_invalid": skipped_invalid,
|
|
"skipped_missing_fk": skipped_missing_fk,
|
|
"skipped_duplicate": skipped_duplicate,
|
|
"skipped_details": skipped_details,
|
|
}
|
|
if message:
|
|
out["message"] = message
|
|
if error:
|
|
out["error"] = error
|
|
return out
|