import os import tempfile from src.aws.s3 import ConfigBucket from src.config.objects import LastFetchDatetime, TargetObject from src.error.exceptions import FileUploadException from src.system_var.constants import TEMPORARY_FILENAME, UPD_JP_NAME from src.util.logger import logger_instance as logger from src.writer.file_writer import JsonWriter def upload_last_fetch_datetime_process(target_object: TargetObject, last_fetch_datetime: LastFetchDatetime): """前回取得日時ファイル更新 Args: target_object (TargetObject): 取得対象オブジェクト情報インスタンス last_fetch_datetime (LastFetchDatetime): データ取得期間設定インスタンス Raises: FileUploadException: S3のファイルアップロード失敗 """ object_name = target_object.object_name # ① 前回取得日時ファイル更新処理の開始ログを出力する logger.info( f'I-UPD-01 [{object_name}] の前回取得日時ファイルの更新処理を開始します') try: if target_object.is_update_last_fetch_datetime is False: # ② オブジェクト情報.is_update_last_fetch_datetimeがfalseの場合、以降の処理をスキップする logger.info( f'I-UPD-02 [{object_name}] の前回取得日時ファイルの更新処理をスキップします') return # ③ 前回取得日時ファイル.last_fetch_datetime_fromに取得処理開始年月日時分秒を設定する # 前回取得日時ファイル.last_fetch_datetime_toに空文字を設定する last_fetch_datetime_dict = { 'last_fetch_datetime_from': last_fetch_datetime.last_fetch_datetime_to, 'last_fetch_datetime_to': '' } _upload_last_fetch_datetime(target_object, last_fetch_datetime_dict) except Exception as e: raise FileUploadException( 'E-UPD-01', UPD_JP_NAME, f'[{object_name}] 前回処理日時ファイルのアップロードに失敗しました ファイル名:[{target_object.last_fetch_datetime_file_name}] エラー内容:[{e}]') # ④ 前回取得日時ファイル更新処理の終了ログを出力する logger.info( f'I-UPD-04 [{object_name}] の前回取得日時ファイルの更新処理を終了します') # ⑤ 次の処理へ移行する return def _upload_last_fetch_datetime(target_object: TargetObject, last_fetch_datetime_dict: dict) -> None: # 一時ファイル書き込み用の領域を確保 with tempfile.TemporaryDirectory(prefix=f'{target_object.object_name}_') as tmpdir: # アップロード用のファイルをローカルに書き出す local_file_path = os.path.join(tmpdir, TEMPORARY_FILENAME) writer = JsonWriter(local_file_path, last_fetch_datetime_dict) writer.write() # ファイルからS3に書き込み config_bucket = ConfigBucket() config_bucket.put_last_fetch_datetime_file( target_object.last_fetch_datetime_file_name, local_file_path) logger.info( f'D-UPD-03 [{target_object.object_name}] の前回取得日時ファイル更新処理 正常終了')