"""detect-errors.""" import uuid from ddex_ingester_common.logging import utils as logging_utils import config logger = logging_utils.get_logger(config.app_logger) def handler(event, context): """Lambda entry point.""" errors = [] error_correction = {} ddex_context, error_correction, errors = \ find_context_and_errors(event, error_correction, errors) correlation_id = ddex_context.get('correlation_id') or str(uuid.uuid4()) ddex_context['correlation_id'] = correlation_id logging_utils.update_logger_correlation_id(logger, correlation_id) logging_utils.update_logger_with_message_ids( logger, ddex_context['message_id'], ddex_context['message_thread_id'], ddex_context['execution_name'] ) if errors: ddex_context['errors'] = errors else: ddex_context.pop('errors') if error_correction: ddex_context['error_correction'] = error_correction return ddex_context def find_context_and_errors(payload, error_correction, errors): """Find context, error corrections and errors from payload. Args: payload (list): Event payload error_correction (dict): Error correction with items of all lambdas errors (list): Errors from all lambdas Returns: tuple """ ddex_context = {} for i in payload: if not i: continue if type(i) is list: temp_ddex_context, error_correction, errors = \ find_context_and_errors(i, error_correction, errors) if temp_ddex_context: ddex_context = temp_ddex_context elif type(i) is dict: if i.get('context'): ddex_context = i.get('context') elif i.get('product'): ddex_context = i if ddex_context.get('error_correction'): if error_correction: error_correction['items'] += \ ddex_context.get('error_correction').get('items') else: error_correction = ddex_context.get('error_correction') if i.get('errors'): errors.append(i['errors']) if i.get('Error') and i.get('Cause'): errors.append(i) return ddex_context, error_correction, errors