feat: 内部関数の頭に_を付けた(プライベート化)。終了ログはfinallyで出力するように修正。処理結果が0件の場合、アップロードせずに終了させる

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2022-08-03 13:11:58 +09:00
parent 9012769e1f
commit 0a00e58cb5
2 changed files with 66 additions and 9 deletions

View File

@ -33,20 +33,22 @@ def controller() -> None:
# ③ object_infoのobjectsキーの値の件数分ループする
logger.info('I-CTRL-03 取得対象オブジェクトのループ処理開始')
process_result = fetch_crm_data(fetch_target_objects, execute_datetime, process_result)
process_result = _fetch_crm_data(fetch_target_objects, execute_datetime, process_result)
# ④ すべてのオブジェクトの処理が完了したことと、オブジェクト毎の処理結果をログに出力する
logger.info(f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{process_result}]')
# 最終結果が0件(1件も処理されていない)の場合、ログ出力して処理を終了する
if len(process_result.keys()) == 0:
logger.info('I-CTRL-21 処理対象のデータが存在しませんでした')
return 0
# ⑤ 取得処理実施結果アップロード処理を呼び出す
logger.info('I-CTRL-18 CRM_取得処理実施結果ファイルアップロード処理開始')
upload_result_data_process(process_result, execute_datetime)
# ⑥ 最終結果をチェックし、チェック結果をログに出力
if not all([v == 'success' for v in process_result.values()]):
logger.error('E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください')
else:
logger.info('I-CTRL-19 すべてのデータの取得に成功しました')
_check_process_result(process_result)
return 0
@ -59,8 +61,12 @@ def controller() -> None:
logger.exception('E-ERR-02 予期せぬエラーが発生したため、処理を終了します', e)
return 0
finally:
# ⑦ CRMデータ取得処理終了ログを出力する
logger.info('I-CTRL-20 CRMデータ取得処理を終了します')
def fetch_crm_data(fetch_target_objects: FetchTargetObjects, execute_datetime: ExecuteDateTime, process_result: dict):
def _fetch_crm_data(fetch_target_objects: FetchTargetObjects, execute_datetime: ExecuteDateTime, process_result: dict):
"""取得対象オブジェクト情報をループし、1オブジェクトごとのデータを取得する
Args:
@ -76,7 +82,7 @@ def fetch_crm_data(fetch_target_objects: FetchTargetObjects, execute_datetime: E
try:
process_result[object_info.get(OBJECT_NAME_KEY)] = 'fail'
fetch_crm_data_per_object(object_info, execute_datetime)
_fetch_crm_data_per_object(object_info, execute_datetime)
process_result[object_info.get(OBJECT_NAME_KEY)] = 'success'
@ -94,7 +100,7 @@ def fetch_crm_data(fetch_target_objects: FetchTargetObjects, execute_datetime: E
return process_result
def fetch_crm_data_per_object(object_info: dict, execute_datetime: ExecuteDateTime) -> None:
def _fetch_crm_data_per_object(object_info: dict, execute_datetime: ExecuteDateTime) -> None:
"""オブジェクトごとにCRMのデータを取得し、取込フォルダにアップロードする
Args:
@ -171,3 +177,18 @@ def fetch_crm_data_per_object(object_info: dict, execute_datetime: ExecuteDateTi
logger.info(f'I-CTRL-16 [{target_object_name}] 処理正常終了')
return
def _check_process_result(process_result: dict) -> None:
"""取得処理結果がすべて成功か、一部失敗しているかを判定し、ログ出力する
Args:
process_result (dict): 取得処理結果辞書オブジェクト
"""
if not all([v == 'success' for v in process_result.values()]):
logger.error('E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください')
return
logger.info('I-CTRL-19 すべてのデータの取得に成功しました')
return

View File

@ -26,7 +26,6 @@ class TestController:
- 取得処理実施結果アップロード処理が1回のみ実行されること
"""
monkeypatch.setattr(FetchTargetObjects, '_FetchTargetObjects__validate', lambda x: None)
# monkeypatch.setattr(ExecuteDateTime, '__str__', lambda x: 'YYYY-MM-DDTHH:MM:SS.000Z')
monkeypatch.setattr(TargetObject, '_TargetObject__validate', lambda x: None)
monkeypatch.setattr(LastFetchDatetime, '_LastFetchDatetime__validate', lambda x: None)
mock_execute_datetime = ExecuteDateTime()
@ -80,3 +79,40 @@ class TestController:
assert mock_copy_crm_csv_data_process.call_count == 3
assert mock_upload_last_fetch_datetime_process.call_count == 3
mock_upload_result_data_process.assert_called_once()
def test_controller_do_not_call_upload_process_result_process(self, s3_client, monkeypatch):
"""
Cases:
処理対象オブジェクトが0件の場合取得処理実施結果アップロード処理が実行されないこと
Arranges:
- データ取得準備処理で返される取得対象オブジェクト情報を0件にする
- 各種プロセスメソッドと内部で使用している値オブジェクトをモック化する
Expects:
- データ取得準備処理が1回のみ実行されること
- 取得処理実施結果アップロード処理が実行されないこと
"""
mock_execute_datetime = ExecuteDateTime()
mock_prepare_data_fetch_process = MagicMock(return_value=([], mock_execute_datetime, {}))
mock_check_object_info_process = MagicMock()
mock_set_datetime_period_process = MagicMock()
mock_fetch_crm_data_process = MagicMock()
mock_backup_crm_data_process = MagicMock()
mock_convert_crm_csv_data_process = MagicMock()
mock_backup_crm_csv_data_process = MagicMock()
mock_copy_crm_csv_data_process = MagicMock()
mock_upload_last_fetch_datetime_process = MagicMock()
mock_upload_result_data_process = MagicMock()
with patch('src.controller.prepare_data_fetch_process', mock_prepare_data_fetch_process),\
patch('src.controller.check_object_info_process', mock_check_object_info_process),\
patch('src.controller.set_datetime_period_process', mock_set_datetime_period_process),\
patch('src.controller.fetch_crm_data_process', mock_fetch_crm_data_process),\
patch('src.controller.backup_crm_data_process', mock_backup_crm_data_process),\
patch('src.controller.convert_crm_csv_data_process', mock_convert_crm_csv_data_process),\
patch('src.controller.backup_crm_csv_data_process', mock_backup_crm_csv_data_process),\
patch('src.controller.copy_crm_csv_data_process', mock_copy_crm_csv_data_process),\
patch('src.controller.upload_last_fetch_datetime_process', mock_upload_last_fetch_datetime_process),\
patch('src.controller.upload_result_data_process', mock_upload_result_data_process):
controller.controller()
mock_prepare_data_fetch_process.assert_called_once()
mock_upload_result_data_process.call_count == 0