import csv import os from integration_scripts import logger from integration_scripts import s3_backoff_utils as s3_utils from integration_scripts import db_utils # from apocrypha.general_use import print_log app_logger = logger.app_logger bucket_name = 'pf-thumb-migrate' path = 'INT-411_2' folders = [ 'INT-394', 'INT-395', 'INT-396', 'INT-397', 'INT-397_2', 'INT-398', 'INT-402' ] sql = """ CREATE TABLE TEMP_SMEG_RITV_TABLE_2019_10_23 AS SELECT * FROM INTEGRATION.DEV.SMEG_RITV_VIEW; """ def main(): master_log = list() duplicate_log = dict() master_file_count = 0 master_found_count = 0 # missing_count = 0 # Convert view to table # Loop through for folder in folders: source_key_folder = s3_utils.get_s3_file_key(path, folder) + '/' # Get all keys file_list = s3_utils.filter_file_keys(source_key_folder, bucket_name) file_count = len(file_list) master_file_count += file_count if not file_list: msg = '{} has no files.'.format(folder) logger.info(msg) continue upc_list = [os.path.splitext(f)[0] for f in file_list] found_list = db_utils.get_ingestion_table_row_by_upc_list(upc_list) found_count = len(found_list) master_found_count += found_count if found_count != file_count: msg = '{}: Expected {} rows, retrieved {}.'.format( folder, file_count, found_count) logger.info(msg) for found in found_list: log_row = dict( upc='', file_name='', found=False) # Make log log_row['source_folder'] = folder log_row['file_name'] = str(found['upc']) + '.tif' # upc = os.path.splitext(found)[0] log_row['expected_folder'] = found['batch'][:7] log_row['upc'] = found['upc'] if not duplicate_log.get('upc'): duplicate_log[found['upc']] = 1 else: duplicate_log[found['upc']] += 1 if log_row['expected_folder'] == log_row['source_folder']: msg = '{}: found in folder {}, as expected'.format( log_row['file_name'], folder) else: msg = '{}: found in folder {}. EXPECTED: {}'.format( log_row['file_name'], folder, found['batch'][:7]) logger.info(msg) log_row['batch'] = found['batch'] # msg = 'ERROR: {} not found in Tracking table!'.format( # log_row['file_name']) # logger.info(msg) # missing_count += 1 master_log.append(log_row) if not master_log: return logger.info('{} files expected.', master_file_count) logger.info('{} files found.', master_found_count) if master_file_count > master_found_count: diff = master_file_count - master_found_count logger.info('{} files missing.', diff) elif master_file_count < master_found_count: diff = master_found_count - master_file_count logger.info('{} duplicate files found.', diff) duplicate_log = {k: v for k, v in duplicate_log.items() if int(v) > 1} logger.info('Duplicates:') logger.info(duplicate_log) with open('s3_asset_validation_log.csv', 'w', newline='') as csvfile: fieldnames = master_log[0].keys() writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for row in master_log: writer.writerow(row) if __name__ == '__main__': main()