From 7e62e59f117a5a58259d74b51c03d135cf61d558 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 12 Oct 2022 18:57:08 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20JSON=E9=9B=BB=E6=96=87=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=82=BF=E3=83=90=E3=83=83=E3=82=AF=E3=82=A2=E3=83=83?= =?UTF-8?q?=E3=83=97=E5=87=A6=E7=90=86=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/backup_crm_data_process.py | 32 ++++++++++++++----- .../tests/test_backup_crm_data_process.py | 7 +++- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/ecs/crm-datafetch/src/backup_crm_data_process.py b/ecs/crm-datafetch/src/backup_crm_data_process.py index 763a17c8..342ce2a7 100644 --- a/ecs/crm-datafetch/src/backup_crm_data_process.py +++ b/ecs/crm-datafetch/src/backup_crm_data_process.py @@ -1,9 +1,13 @@ +import os +import tempfile + from src.aws.s3 import BackupBucket from src.config.objects import TargetObject from src.error.exceptions import FileUploadException -from src.system_var.constants import RESBK_JP_NAME +from src.system_var.constants import RESBK_JP_NAME, TEMPORARY_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 backup_crm_data_process(target_object: TargetObject, sf_object_dict: dict, execute_datetime: ExecuteDateTime): @@ -23,14 +27,9 @@ def backup_crm_data_process(target_object: TargetObject, sf_object_dict: dict, e logger.info(f'I-RESBK-01 [{object_name}] のCRM電文データバックアップ処理を開始します') try: - # ② CRMバックアップ保管用バケットに、CRMから取得したJSONの電文データのバックアップを保管する file_name = f'{execute_datetime.to_path()}/{target_object.upload_file_name}.json' - - backup_bucket = BackupBucket() - backup_bucket.put_response_json(file_name, sf_object_dict) - - logger.debug(f'D-RESBK-02 [{object_name}] のJSONデータバックアップ 正常終了') - + # ② CRMバックアップ保管用バケットに、CRMから取得したJSONの電文データのバックアップを保管する + _backup_json_file(object_name, file_name, sf_object_dict) except Exception as e: raise FileUploadException( 'E-RESBK-01', @@ -43,3 +42,20 @@ def backup_crm_data_process(target_object: TargetObject, sf_object_dict: dict, e # ④ 次の処理へ移行する return + + +def _backup_json_file(object_name: str, file_name: str, sf_object_dict: dict) -> None: + + # 一時ファイル書き込み用の領域を確保 + with tempfile.TemporaryDirectory(prefix=f'{object_name}_') as tmpdir: + # アップロード用のファイルをローカルに書き出す + local_file_path = os.path.join(tmpdir, TEMPORARY_FILENAME) + writer = JsonWriter(local_file_path, sf_object_dict) + writer.write() + # ファイルからS3に書き込み + backup_bucket = BackupBucket() + backup_bucket.put_response_json(file_name, local_file_path) + + logger.debug(f'D-RESBK-02 [{object_name}] のJSONデータバックアップ 正常終了') + + return diff --git a/ecs/crm-datafetch/tests/test_backup_crm_data_process.py b/ecs/crm-datafetch/tests/test_backup_crm_data_process.py index 4e48c419..875e84ce 100644 --- a/ecs/crm-datafetch/tests/test_backup_crm_data_process.py +++ b/ecs/crm-datafetch/tests/test_backup_crm_data_process.py @@ -133,15 +133,20 @@ class TestBackupCrmDataProcess: execute_datetime = ExecuteDateTime() target_object = TargetObject(target_object_dict, execute_datetime) - with patch('src.backup_crm_data_process.BackupBucket') as mock_backup_bucket: + with patch('src.backup_crm_data_process.BackupBucket') as mock_backup_bucket, \ + patch('src.backup_crm_data_process.JsonWriter') as mock_writer: mock_backup_bucket_inst = mock_backup_bucket.return_value mock_backup_bucket_inst.put_response_json.return_value = '' + + mock_writer_inst = mock_writer.return_value + mock_writer_inst.write.return_value = '' # Act backup_crm_data_process(target_object, {}, execute_datetime) # Assert assert mock_backup_bucket_inst.put_response_json.called is True + assert mock_writer_inst.write.called is True def test_raise_put_response_json(self, bucket_name, monkeypatch, caplog): """