import datetime import logging import pandas import pytest from jsonbender import F as ApplyFunction from jsonbender import S as GetField from parameterized import parameterized from ui_automation_framework.utils import logger as cl import app.src.tests.decomission.api_init as api_init from app.src.tests.decomission.compare_helper import format_color, generate_provider, get_field_with_diff, merge_arrays, transform_json API = api_init.APIOverride() log = cl.Logger(logging.DEBUG) apollo_to_delphi_keys = { "date": GetField("date") >> ApplyFunction(lambda val: val.split("T")[0]), "position": GetField("position") >> ApplyFunction(lambda val: val - 1), "track_count": GetField("trackCount"), } delphi_to_delphi_keys = { "date": GetField("date"), "position": GetField("current"), "track_count": GetField("num_tracks") >> ApplyFunction(lambda val: 0 if val is None else val), } track_position_apollo_portal = "/playlisttrackgraph/position?isrc={0}&playlistId={1}&startDate={2}&endDate={3}" track_position_playlist_dates_delphi = "/v3/public/track-positions/playlists?isrc={0}&playlist_id=spotify_{1}&dsp=spotify&include=streams_for_period,num_tracks" track_position_playlist_delphi = "/v3/public/track-positions/playlists?dsp=spotify&isrc={0}&playlist_id=spotify_{1}&start_date={2}&end_date={3}&include=streams_for_period,num_tracks" # implemented only for global market # country_code has not supported by Delphi yet @parameterized.expand( [ # ("USSM12207207", "37i9dQZF1DWX7rdRjOECPW", "current_playlist"), # ("USSM12207207", "37i9dQZEVXbJ9SRaVj0yDF", "prev_playlist"), # ("USJI10800160", "37i9dQZF1DX4SBhb3fqCJd", "current_playlist"), # ("AUNV02201200", "37i9dQZF1E8BKq6fCFX4X3", "prev_playlist"), ("USSM12209777", "37i9dQZF1DX0kbJZpiYdZl", "current_playlist"), ("USSM12209777", "2BkvZh4A1UVPQIps6ILKvd", "prev_playlist"), ("USJI10800160", "37i9dQZF1DX2L0iB23Enbq", "current_playlist"), ("USJI10800160", "5d6HDkkTouObGKeQOg39gk", "prev_playlist"), ("GBARL1300107", "37i9dQZEVXbMDoHDwVN2tF", "current_playlist"), ("GBARL1300107", "37i9dQZF1DX6wfQutivYYr", "prev_playlist"), ("GBARL1300522", "37i9dQZEVXbMDoHDwVN2tF", "current_playlist"), ("GBARL1300522", "37i9dQZF1DX6wfQutivYYr", "prev_playlist"), ("USSM12300722", "37i9dQZF1DX4SBhb3fqCJd", "current_playlist"), ("USSM12300722", "37i9dQZF1DWV3RrjH1jDkx", "prev_playlist"), ("USSM10804556", "37i9dQZF1DX2KwEtNSejGe", "current_playlist"), ("USSM10804556", "41ImeU7X25qd03umfeDVQP", "prev_playlist"), ("USSM12210918", "37i9dQZF1DWUJF24WXSSyO", "current_playlist"), ("USSM12210918", "2BkvZh4A1UVPQIps6ILKvd", "prev_playlist"), ] ) @pytest.mark.skip() def test_track_position_popup_positions(isrc, playlist_id, placed): delphi_response_dates = API.get_delphi_response(track_position_playlist_dates_delphi.format(isrc, playlist_id)) playlist_earliest_date_delphi = str(delphi_response_dates["items"][0]["earliest_position_date_time"]).split("T")[0] playlist_earliest_date_delphi_f = datetime.datetime.strptime(playlist_earliest_date_delphi, "%Y-%m-%d").date() print(f"Earliest date Delphi: {playlist_earliest_date_delphi}") playlist_latest_date_delphi = str(delphi_response_dates["items"][0]["latest_position_date_time"]).split("T")[0] playlist_latest_date_delphi_f = datetime.datetime.strptime(playlist_latest_date_delphi, "%Y-%m-%d").date() print(f"Latest date Delphi: {playlist_latest_date_delphi}") playlist_earliest_date_apollo = 0 playlist_latest_date_apollo = 0 if placed == "current_playlist": playlist_latest_date_apollo = [API.get_latest_date()["spotify"]] track_current_playlists = API.get_spotify_track_current_playlists(isrc, playlist_latest_date_apollo[0])["items"] playlist_earliest_date_apollo = [str(playlist["earliestAdded"]).split("T")[0] for playlist in track_current_playlists if playlist_id == str(playlist["spotifyLink"]).split("playlist:")[1]] elif placed == "prev_playlist": track_prev_playlists = API.get_spotify_track_past_playlists(isrc)["items"] playlist_latest_date_apollo = [str(playlist["latestTrackDate"]).split("T")[0] for playlist in track_prev_playlists if playlist_id == str(playlist["playlist"]["spotifyLink"]).split("playlist:")[1]] playlist_earliest_date_apollo = [str(playlist["earliestTrackDate"]).split("T")[0] for playlist in track_prev_playlists if playlist_id == str(playlist["playlist"]["spotifyLink"]).split("playlist:")[1]] playlist_earliest_date_apollo_f = datetime.datetime.strptime(str(playlist_earliest_date_apollo[0]), "%Y-%m-%d").date() playlist_latest_date_apollo_f = datetime.datetime.strptime(str(playlist_latest_date_apollo[0]), "%Y-%m-%d").date() playlist_earliest_date_list = [playlist_earliest_date_delphi_f, playlist_earliest_date_apollo_f] playlist_earliest_date = min(playlist_earliest_date_list) playlist_latest_date_list = [playlist_latest_date_delphi_f, playlist_latest_date_apollo_f] playlist_latest_date = max(playlist_latest_date_list) apollo_response = API.get_apollo_response(track_position_apollo_portal.format(isrc, playlist_id, playlist_earliest_date, playlist_latest_date)) delphi_response = API.get_delphi_response(track_position_playlist_delphi.format(isrc, playlist_id, playlist_earliest_date, playlist_latest_date)) apollo_transformed_response = transform_json(apollo_to_delphi_keys, apollo_response["series"][0]["entries"]) delphi_transformed_response = transform_json(delphi_to_delphi_keys, delphi_response["items"]) aggregated_matrix = merge_arrays(apollo_transformed_response, delphi_transformed_response, "date") index_for_all_fields = list(range(1, len(generate_provider(aggregated_matrix)) + 1)) subset_to_mark = range(3, len(aggregated_matrix) * 5, 5) pandas.DataFrame( { "provider": generate_provider(aggregated_matrix), "date": get_field_with_diff("date", aggregated_matrix), "position": get_field_with_diff("position", aggregated_matrix), "track_count": get_field_with_diff("track_count", aggregated_matrix), }, index=index_for_all_fields, ).style.apply(format_color, subset=(subset_to_mark, slice(None))).to_excel(f"decomission/spotify_position_popup/{isrc}_spotify_{playlist_id}_{placed}_position_popup_positions.xlsx")