import json import os import sys BEFORE_FILENAME = os.environ.get('BEFORE_FILENAME', '') AFTER_FILENAME = os.environ.get('AFTER_FILENAME', '') AMAZON_TERRITORIES = [ 'US', 'FR', 'GB', 'DE', 'AT', 'CH', 'JP', 'IT', 'ES', 'IE' ] def get_results(filename): path = os.path.dirname(os.path.realpath(__file__)) + \ '/data/' + filename with open(path, 'r') as input_file: return json.load(input_file) def find_matching_result(results, product_id, pricing_family_id): for result in results: if result['product_id'] == product_id and \ result['pricing_family_id'] == pricing_family_id: return result return None def group_album_items(items): grouped = {} for item in items: if item['price_code'] not in grouped: grouped[item['price_code']] = { 'price_code': item['price_code'], 'territories': item['territories'] } else: grouped[item['price_code']]['territories'] += item['territories'] result = grouped.values() for item in result: territories = [] for territory in item['territories']: if territory in AMAZON_TERRITORIES: territories.append(territory) item['territories'] = territories item['territories'].sort() return result def find_matching_album_item(items, before_item): for item in items: if item['territories'] == before_item['territories'] and \ item['price_code'] == before_item['price_code']: return item return None def diff_album_items(before_items, after_items): grouped_before_items = group_album_items(before_items) grouped_after_items = group_album_items(after_items) for before_item in grouped_before_items: if len(before_item['territories']) == 0: continue after_item = find_matching_album_item(grouped_after_items, before_item) if not after_item: return False return True def group_track_items(items): grouped = {} for item in items: for track_id in item['track_ids']: key = '{0}-{1}'.format(track_id, item['price_code']) if key not in grouped: grouped[key] = { 'track_id': track_id, 'price_code': item['price_code'], 'territories': item['territories'] } else: grouped[key]['territories'] += item['territories'] result = grouped.values() for item in result: territories = [] for territory in item['territories']: if territory in AMAZON_TERRITORIES: territories.append(territory) item['territories'] = territories item['territories'].sort() return result def find_matching_track_item(items, before_item): for item in items: if item['territories'] == before_item['territories'] and \ item['price_code'] == before_item['price_code'] and \ item['track_id'] == before_item['track_id']: return item return None def diff_track_items(before_items, after_items): grouped_before_items = group_track_items(before_items) grouped_after_items = group_track_items(after_items) for before_item in grouped_before_items: if len(before_item['territories']) == 0: continue after_item = find_matching_track_item(grouped_after_items, before_item) if not after_item: return False return True try: print('About to get before results from {0}'.format(BEFORE_FILENAME)) before_results = get_results(BEFORE_FILENAME) print('Got {0} before results'.format(len(before_results))) print('About to get after results from {0}'.format(AFTER_FILENAME)) after_results = get_results(AFTER_FILENAME) print('Got {0} after results'.format(len(after_results))) successes = [] failures = [] not_found = [] for before_result in before_results: product_id = before_result['product_id'] pricing_family_id = before_result['pricing_family_id'] print('About to find match for product {0} and pricing family {1}'.\ format(product_id, pricing_family_id)) after_result = find_matching_result( after_results, product_id, pricing_family_id) if not after_result: print('No matching result found') not_found.append([product_id, pricing_family_id]) continue print('Found matching result') print('About to diff results') if pricing_family_id == 2: success = diff_album_items( before_result['items'], after_result['items']) else: success = diff_track_items( before_result['items'], after_result['items']) if success: print('Diff successfull') successes.append([product_id, pricing_family_id]) else: print('Diff failed') failures.append([product_id, pricing_family_id]) print('Done diffing results') print('{0} successes. {1} failures. {2} not found.'.format( len(successes), len(failures), len(not_found))) if len(failures) > 0: print('Failures:') print(failures) sys.exit() except Exception as e: sys.exit(e)