import os import tempfile from src.aws.s3 import BackupBucket from src.error.exceptions import FileUploadException from src.system_var.constants import END_JP_NAME, TEMPORARY_FILENAME from src.system_var.environments import PROCESS_RESULT_FILENAME from src.util.execute_datetime import ExecuteDateTime from src.util.logger import logger_instance as logger from src.writer.file_writer import JsonWriter def upload_result_data_process(process_result: dict, execute_datetime: ExecuteDateTime): """取得処理実施結果アップロード処理 Args: process_result (dict): 取得処理実行結果辞書オブジェクト execute_datetime (ExecuteDateTime): 実行日時取得インスタンス Raises: FileUploadException: S3のファイルアップロード失敗 """ # ① 取得処理実施結果アップロード処理のログを出力する logger.info( f'I-END-01 取得処理実施結果アップロード処理を開始します') try: # ② CRMバックアップ保管用バケットに、取得処理実施結果のJSONデータを保管する _upload_result(execute_datetime, process_result) except Exception as e: raise FileUploadException( 'E-END-01', END_JP_NAME, f'取得処理実施結果のアップロードに失敗しました ファイル名:[{PROCESS_RESULT_FILENAME}] エラー内容:[{e}]') # ③ 取得処理実施結果アップロード処理の終了ログを出力する logger.info(f'I-END-03 取得処理実施結果アップロード処理を終了します') return def _upload_result(execute_datetime: ExecuteDateTime, process_result: dict) -> None: # 一時ファイル書き込み用の領域を確保 with tempfile.TemporaryDirectory(prefix=f'{PROCESS_RESULT_FILENAME}_') as tmpdir: # アップロード用のファイルをローカルに書き出す local_file_path = os.path.join(tmpdir, TEMPORARY_FILENAME) writer = JsonWriter(local_file_path, process_result) writer.write() # ファイルからS3に書き込み backup_bucket = BackupBucket() backup_bucket.put_result_json( f'{execute_datetime.to_path()}/{PROCESS_RESULT_FILENAME}', local_file_path) logger.debug(f'D-END-02 取得処理実施結果アップロード 正常終了')