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"), "track_count": GetField("trackCount") >> ApplyFunction(lambda val: 0 if val is None else val), } delphi_to_delphi_keys = { "date": GetField("date"), "position": GetField("current") >> ApplyFunction(lambda val: int(val) + 1), "track_count": GetField("num_tracks"), } limit = 2000 track_position_apollo_portal = "/applemusic/playlists/trackpositionchange?isrc={0}&playlistId={1}&country={2}&startDate={3}&endDate={4}" track_position_playlist_dates_delphi = "/v3/public/track-positions/playlists?isrc={0}&country_code={1}&playlist_id=apple_{2}&dsp=apple&include=streams_for_period,num_tracks" track_position_playlist_delphi = "/v3/public/track-positions/playlists?dsp=apple&isrc={0}&playlist_id=apple_{1}&country_code={2}&start_date={3}&end_date={4}&include=streams_for_period,num_tracks" @parameterized.expand( [ # ('USSM12207207', 'pl.047294ae14a24e5993d1f7ab2b127188', 'fr', 'current_playlist'), # ('USSM12207207', 'pl.2b0e6e332fdf4b7a91164da3162127b5', 'us', 'prev_playlist'), # ('USQX92205877', 'pl.aea893d092ed40a393d217ced33bde62', 'us', 'current_playlist'), # ('CLPP22200072', 'pl.4103cc18483c4b35990c30ef06f236f5', 'us', 'current_playlist'), # ('USWL12201130', 'pl.deec8b036583481782c40a2a05554b0b', 'us', 'prev_playlist'), # ("USRC11902743", "pl.f4d106fed2bd41149aaacabb233eb5eb", "us", "current_playlist"), # ('USUG12205698', 'pl.7d7525d9145c4aba9a6295753505c98d', 'us', 'prev_playlist'), # ('USJI10800160', 'pl.f4d106fed2bd41149aaacabb233eb5eb', 'us', 'current_playlist'), # ('USSM12200612', 'pl.2249e0cc6edb46f4ae64de2c937a4f41', 'us', 'current_playlist'), # ('USSM12200612', 'pl.0b6396cf63594f5cb834aff82520eb84', 'us', 'current_playlist'), # ('USUG12205698', 'pl.7d7525d9145c4aba9a6295753505c98d', 'us', 'prev_playlist'), # ('USJI10800160', 'pl.f4d106fed2bd41149aaacabb233eb5eb', 'us', 'current_playlist'), # ('USSM12200612', 'pl.2249e0cc6edb46f4ae64de2c937a4f41', 'us', 'current_playlist'), ("USSM12206232", "pl.f4d106fed2bd41149aaacabb233eb5eb", "us", "current_playlist"), ] ) @pytest.mark.skip() def test_track_position_popup_positions(isrc, playlist_id, market, placed): delphi_response_dates = API.get_delphi_response(track_position_playlist_dates_delphi.format(isrc, market, 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_f = "" playlist_latest_date_apollo_f = "" if placed == "current_playlist": playlist_latest_date_apollo_f = datetime.datetime.today().date() print(f"Latest date Apollo: {playlist_latest_date_apollo_f}") track_current_playlists = API.get_apple_track_current_playlists(isrc)["items"] for playlist in track_current_playlists: if str(playlist["id"]) == playlist_id: for apple_market in playlist["countries"]: if apple_market["countryCode"] == market: playlist_earliest_date_apollo = str(apple_market["earliestAdded"]).split("T")[0] print(f"Earliest date Apollo: {playlist_earliest_date_apollo}") playlist_earliest_date_apollo_f = datetime.datetime.strptime(playlist_earliest_date_apollo, "%Y-%m-%d").date() elif placed == "prev_playlist": track_prev_playlists = API.get_apple_track_past_playlists(isrc)["items"] for playlist in track_prev_playlists: if str(playlist["id"]) == playlist_id: for apple_market in playlist["countries"]: if apple_market["countryCode"] == market: playlist_latest_date_apollo = str(apple_market["latestDate"]) print(f"Latest date Apollo: {playlist_latest_date_apollo}") playlist_latest_date_apollo_f = datetime.datetime.strptime(playlist_latest_date_apollo, "%Y-%m-%d").date() playlist_earliest_date_apollo = str(apple_market["earliestDate"]) print(f"Earliest date Apollo: {playlist_earliest_date_apollo}") playlist_earliest_date_apollo_f = datetime.datetime.strptime(playlist_earliest_date_apollo, "%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, market, playlist_earliest_date, playlist_latest_date)) delphi_response = API.get_delphi_response(track_position_playlist_delphi.format(isrc, playlist_id, market, 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/apple_position_popup/{isrc}_{playlist_id}_{placed}_{market}_apollo_{len(apollo_transformed_response)}_delphi_{len(delphi_transformed_response)}_apple_position_popup.xlsx")