"""Application.""" from src import config from src.exceptions import InReviewQueueException from src.exceptions import OwsRequestException from src.exceptions import ValidationException from src.log import log from src.logic import file_parsing from src.logic import ows_product_digital from src.logic import ows_product_review def main(): """Run.""" result = {'submitted_ids': [], 'errors': [], 'validations': []} log.debug('Starting bulk submit') product_ids = file_parsing.get_product_ids_from_csv(config.FILEPATH) log.info(f'Running for {len(product_ids)} unique product ID(s)') log.debug(f'Product IDs: {product_ids}') # submit item to review queue table for product_id in product_ids: try: log.debug(f'Validating product id {product_id}') ows_product_digital.validate_product_by_id(product_id) log.debug(f'Product id {product_id} is valid') log.debug(f'Updating product {product_id} status to submitted') ows_product_digital.mark_product_as_submitted(product_id) log.debug(f'Updated product {product_id} status') log.debug(f'Submitting product id {product_id}') ows_product_review.submit_products_by_id(product_id) log.debug(f'Submitted id {product_id}') result['submitted_ids'].append(product_id) except ValidationException as e: result['errors'].append((product_id, 'Validation blocked submission.')) result['validations'].extend(e.args[0]) except InReviewQueueException: result['errors'].append((product_id, 'Product is already submitted.')) except OwsRequestException as e: result['errors'].append( (product_id, f'Failed to call {e.args[0]} endpoint with error: {e.args[1]}')) log.info(('Submitted IDs:', result['submitted_ids'])) for error in result['errors']: log.error(f'Product ID {error[0]} Error: {error[1]}') if result['validations']: log.error('VALIDATION ERRORS:\n') log.error('product_id\ttrack_id\tcode\treason') for validation in result['validations']: line = '\t'.join([str(val) for val in validation]) log.error(line) log.debug('Ending bulk submit') return result if __name__ == '__main__': main()