import os import json import boto3 from time import time REQUIRED_PARAMS_WORKFLOW_EXECUTION = [ 'account_type', 'account_id', 'collaborator_id', 'period_ids', 'client_email' ] def _verify_params( params: dict, required_params: list = REQUIRED_PARAMS_WORKFLOW_EXECUTION): """Verify that the parameters dict contains all required parameters. Args: params (dict): Parameter dict to verify. """ for param in required_params: if param not in params: raise Exception(f'Missing parameter: {param}') def execute_swf_workflow(swf_client, **params): _verify_params(params, REQUIRED_PARAMS_WORKFLOW_EXECUTION) exe_start_to_close = os.environ.get('SWF_EXECUTION_START_TO_CLOSE_TIMEOUT', '') task_start_to_close = os.environ.get('SWF_TASK_START_TO_CLOSE_TIMEOUT', '') template = ( '{prefix}-{account_type}-{account_id}-{collaborator_id}-' '{period_ids}-{timestamp}-{file_format}') workflow_id = template.format( prefix='collaborator_report', **params ) swf_client.start_workflow_execution( domain=os.environ.get('SWF_DOMAIN', ''), workflowId=workflow_id, workflowType={ 'name': os.environ.get( 'SWF_COLLABORATOR_REPORTS_TYPE', ''), 'version': os.environ.get( 'SWF_COLLABORATOR_REPORTS_TYPE_VERSION', '') }, taskList={ 'name': os.environ.get('SWF_COLLABORATOR_REPORTS_TASKLIST', '') }, input=json.dumps(params, sort_keys=True), executionStartToCloseTimeout=str(exe_start_to_close), taskStartToCloseTimeout=str(task_start_to_close), childPolicy=os.environ.get('SWF_CHILD_POLICY', ''))