from db.map_assets_to_tracks_sql import get_by_isrc from config import log_fields from config import LOG_TABLE as log_table from config import TARGET_TABLE as target_table from helpers.general_use import prep_insert_sql def compare_isrc_rows(t_cursor, isrc): # Setup Error vars log_row = {} log_row['filename'] = "IODA Compare" log_row['id'] = None orch_set = set() ioda_set = set() fs_set = set() return_category = None # get list of all rows matching isrc t_cursor.execute(get_by_isrc.format( target_table, isrc)) rows = t_cursor.fetchall() for row in rows: # get string of territory from db if 'orch' in row['filename'].lower(): # cast to set orch_set = set(row['derived_ownership'].split(',')) elif 'ioda' in row['filename'].lower(): ioda_set = set(list(row['derived_ownership'].split(','))) elif 'fact_sales' in row['filename'].lower(): fs_set = set(list(row['derived_ownership'].split(','))) elif 'meat' in row['filename'].lower(): return 'M' #ioda_set = set(list(row['derived_ownership'].split(','))) else: log_row['reason'] = "Cannot determine source account for one or more rows: " \ + row['filename'] + ': ' + isrc sql, line_dict = prep_insert_sql(log_row, log_fields, log_table) t_cursor.execute(sql, list(line_dict.values())) return 'S' # Get lengths ONCE orch_len = len(orch_set) ioda_len = len(ioda_set) fs_len = len(fs_set) # If all three, return errror if orch_len > 0 and ioda_len > 0 and fs_len > 0: return 'X' else: # Two sets # if orch and fs, use fs as ioda if orch_len and fs_len: ioda_set = fs_set ioda_len = fs_len # if not orch, and ioda, use fs as orch elif ioda_len and fs_len: orch_set = fs_set orch_len = fs_len # Compare sets # Both Empty - (No Overlap, albeit purely incidentally) if orch_len == 0 and ioda_len == 0: log_row['reason'] = "All territories blank for both : " + isrc sql, line_dict = prep_insert_sql(log_row, log_fields, log_table) t_cursor.execute(sql, list(line_dict.values())) # Full Overlap (i.e. Same list) elif orch_set == ioda_set: return_category = 'D' elif orch_len != 0 and ioda_len != 0: intersection = len(ioda_set & orch_set) # Partial Overlap if intersection > 0: return_category = 'C' # No Overlap - None empty - Complement elif intersection == 0: return_category = 'B' elif len(orch_set) == 0: return_category = 'A' elif len(ioda_set) == 0: return_category = 'E' return return_category