feat: 内部関数の頭に_を付けた(プライベート化)。終了ログはfinallyで出力するように修正。処理結果が0件の場合、アップロードせずに終了させる
This commit is contained in:
parent
9012769e1f
commit
0a00e58cb5
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user