"""Local debug script: generates the filtered XLSX and saves it locally.""" import json import logging from pprint import pprint from uuid import UUID from common.connectors import s3 from common.connectors.ows_product_staging_obo import ( get_bulk_session, get_bulk_session_metadata_file, ) from common.schemas.ingestion import BaseEvent from common.schemas.s3_reference import S3Reference import config from src.logic import ( _filter_workbook, _get_failed_product_codes, _workbook_to_stream, ) logging.basicConfig(level=logging.INFO) with open("event.json") as file: event = BaseEvent.model_validate(json.load(file)) pprint(event) failed_codes = _get_failed_product_codes( event.bulk_session_ingestion_id, event.identity_uuid ) print(f"\nFailed product codes ({len(failed_codes)}): {failed_codes}") if not failed_codes: print("No failed products found, nothing to generate.") raise SystemExit(0) session = get_bulk_session( bulk_session_id=UUID(event.bulk_session_id), impersonated_identity_uuid=event.identity_uuid, ) print(f"latest_upload_file_id: {session.latest_upload_file_id}") if not session.latest_upload_file_id: print("No latest_upload_file_id found in bulk session.") raise SystemExit(1) metadata_file = get_bulk_session_metadata_file( bulk_session_id=UUID(event.bulk_session_id), bulk_session_metadata_file_id=session.latest_upload_file_id, impersonated_identity_uuid=event.identity_uuid, ) print(f"S3 bucket: {metadata_file.s3_bucket}, key: {metadata_file.s3_filename}") original_stream = s3.get_object_stream( S3Reference(bucket=metadata_file.s3_bucket, key=metadata_file.s3_filename) ) filtered_wb = _filter_workbook(original_stream, set(failed_codes)) output_path = "debug_reupload.xlsx" filtered_stream = _workbook_to_stream(filtered_wb) with open(output_path, "wb") as f: f.write(filtered_stream.getvalue()) print(f"\nFiltered spreadsheet saved to: {output_path}") print("Open it to inspect the result. No S3 upload or PATCH was made.")