"""Takes the full list of requests, and prepares the parameter list.""" from sys import stdout import config # noqa from concurrency.mapper import map_processes import util.db_utils as db_utils from util.logic_utils import slice_off_request_code from constants.database import RELEASE_LOG_TABLE from integration_scripts import logger as log from integration_scripts.connectors import sentry def _generate_process_params(label_id, label_request_list, session_id): """Generate a list of parameters to be fed to the multiprocessor.""" # full_response_dict = dict() multiprocess_param_list = list() # Transform label data to requests. if len(label_request_list): for num, label_request in enumerate(label_request_list, start=1): # Assemble curl / requests if len(label_request) and 'data' in label_request: multiprocess_param_list.append( (num, # Process number session_id, # Session_id for entire run 'Request #{} for label {}'.format( # Process Name (msg) num, label_id), label_request, # Request body label_id # Label ID tied to request )) else: params = dict() params['action_type'] = 'skipped' params['session_id'] = session_id params['orchard_vendor_id'] = label_id params['request'] = 'NO DATA' params['response'] = 'NO DATA' params['log_table'] = RELEASE_LOG_TABLE.upper() # comprehension to slice off request_code params = slice_off_request_code(params) db_utils.insert_mysql_release_log(**params) log.info('Skipping {}. No data.'.format(label_id)) return multiprocess_param_list @sentry.sentry_wrap def multiprocess_requests(label_id, label_request_list, session_id, file_name): """Create queues and workers to process a label with multiple threads.""" log.info( 'Map Multiprocessing beginning for label {} in file {}.'.format( label_id, file_name)) # Initialize the parameters for the list of processes multiprocess_param_list = _generate_process_params( label_id, label_request_list, session_id) # Load the Queues results, results_again, failed_again, counts = \ map_processes(multiprocess_param_list) log.info('Map Multiprocessing complete for label {}.'.format(label_id)) stdout.flush() return results, results_again, failed_again, counts