import datetime from jsonbender import bend def format_color(data, c="red"): colors = [] for item in data: if item == "change": color = "white" elif item: color = "red" elif item == "": color = "green" else: color = "blue" colors.append(f"background-color: {color}") return colors def cleanup_response(array_with_data, keys): normalized_response = [] for item in array_with_data: normalized_response.extend([item[k] for k in keys]) return normalized_response def transform_response(array_to_transform, mapping_keys): print(array_to_transform) for row in array_to_transform: for key, value in mapping_keys.items(): for old_name in row: if key == old_name: row[value] = row.pop(old_name) return array_to_transform def transform_json(mapping, source): result = [] for row in source: result.extend([bend(mapping, row)]) print(result) return result def generate_provider(array): return ["apollo", "delphi", "change", "", ""] * len(array) def merge_arrays(array1, array2, key): keys_arr = list(item[key] for item in array1) keys_arr.extend((item[key] for item in array2)) print("---- all", keys_arr) result = {} for k in keys_arr: result[k] = [{}, {}] for item in array1: result[item[key]][0] = item for item in array2: result[item[key]][1] = item print("Result isrcs: " + str(result)) return result def get_field_with_diff(key, array): result = [] for val in array: item = array[val] key1 = item[0].get(key) key2 = item[1].get(key) result.extend([key1, key2, "" if (key1 == key2 and (key1 is not None and key2 is not None)) else "-", "", ""]) return result def get_field_with_diff_the_same(key, array): result = [] for val in array: result.extend([val, val, "" if (val == val and (val is not None and val is not None)) else "-", "", ""]) return result def get_field_with_diff_custom(key, array, diff_percentage): result = [] for val in array: item = array[val] key1 = item[0].get(key) key2 = item[1].get(key) custom_key_percentage = -1 if (key1 is not None and key2 is not None) and min(key1, key2) != 0: custom_key_percentage = int(max(key1, key2) / min(key1, key2) * 100) - 100 result.extend([key1, key2, "" if ((key1 is not None and key2 is not None) and custom_key_percentage in list(range(0, diff_percentage))) else "-", "", ""]) return result def get_field_with_diff_delphi_bigger_or_equal_to_apollo(key, array): result = [] for val in array: item = array[val] key1 = item[0].get(key) key2 = item[1].get(key) result.extend([key1, key2, "" if ((key1 is not None and key2 is not None) and (key2 - key1) >= 0) else "-", "", ""]) return result def get_field_with_diff_custom_date(key, array, days_count=1): result = [] for val in array: item = array[val] key1_raw = item[0].get(key) key2_raw = item[1].get(key) dates_diff = -1 if key1_raw not in [None, ""] and key2_raw not in [None, ""]: key1 = datetime.datetime.strptime(key1_raw, "%Y-%m-%d") key2 = datetime.datetime.strptime(key2_raw, "%Y-%m-%d") dates_diff = abs((key1 - key2).days) result.extend([key1_raw, key2_raw, "" if ((key1_raw not in [None, ""] and key2_raw not in [None, ""]) and dates_diff in list(range(0, days_count + 1))) else "-", "", ""]) return result def get_field_with_diff_custom_date_or_zero(key, array, days_count=1): result = [] for val in array: item = array[val] key1_raw = item[0].get(key) key2_raw = item[1].get(key) dates_diff = -1 if key1_raw not in [None, ""] and key2_raw not in [None, ""]: key1 = datetime.datetime.strptime(key1_raw, "%Y-%m-%d") key2 = datetime.datetime.strptime(key2_raw, "%Y-%m-%d") dates_diff = abs((key1 - key2).days) elif key1_raw == key2_raw == "" or key1_raw == key2_raw is None: dates_diff = "" result.extend([key1_raw, key2_raw, "" if (dates_diff in list(range(0, days_count + 1)) + [""]) else "-", "", ""]) return result def get_field_with_diff_delphi_not_empty(key, array): result = [] for val in array: item = array[val] key1 = item[0].get(key) key2 = item[1].get(key) result.extend([key1, key2, "" if (key2 is not None) else "-", "", ""]) return result def get_field_with_diff_int(key, array, count=1): result = [] for val in array: item = array[val] key1 = item[0].get(key) key2 = item[1].get(key) count_diff = -1 if key1 not in [None, ""] and key2 not in [None, ""]: count_diff = abs(key1 - key2) result.extend([key1, key2, "" if ((key1 not in [None, ""] and key2 not in [None, ""]) and count_diff in list(range(0, count + 1))) else "-", "", ""]) return result def extend_playlists_with_streams(playlists_arr, streams_arr, streams_field_name): playlists_arr_ids = [playlists_arr["items"][p]["id"] for p in range(len(playlists_arr["items"]))] # add to each playlist 0 country stream for item in playlists_arr["items"]: for country in item["countries"]: country[streams_field_name] = 0 for pl_id in playlists_arr_ids: stream_item = [playlist_stream for playlist_stream in streams_arr["items"] if playlist_stream["containerId"] == pl_id] # if we can't find anything for streams, start loop again if len(stream_item) == 0: continue playlist_item = [playlist for playlist in playlists_arr["items"] if playlist["id"] == pl_id][0] stream_markets = {market[0]: market[1] for market in stream_item[0]["markets"]} for country in playlist_item["countries"]: if country["countryCode"] in stream_markets.keys(): country[streams_field_name] = stream_markets[country["countryCode"]] return playlists_arr def calc_days_in_playlist(playlists_arr): for item in playlists_arr: if len(item["earliestTrackDate"][:10]) > 0 and len(item["latestTrackDate"][:10]) > 0: added_date = datetime.datetime.strptime(str(item["earliestTrackDate"][:10]), "%Y-%m-%d").date() removed_date = datetime.datetime.strptime(str(item["latestTrackDate"][:10]), "%Y-%m-%d").date() days_in_playlist = (removed_date - added_date).days + 1 item["days_in_playlist"] = days_in_playlist else: item["days_in_playlist"] = "" print(playlists_arr) return playlists_arr