import allure from app.src.api.api_client import ApiClient from app.src.helpers.allure_helper import attach_response_info class DelphiApiClient(ApiClient): def _get_api_response(self, endpoint, params=None, ignore_response_attaching=False): api_str = f"{self.host_endpoint}{endpoint}" resp = self.session.get(url=api_str, params=params) attach_response_info(resp, ignore_response_attaching) return resp.json() @allure.step('Get charts summary "GET /v3/charts"') def get_all_charts(self, dsp, sort_by, sort_order, ignore_response_attaching=False): endpoint = "v3/charts?" params = dict(dsp=dsp, sort_by=sort_by, sort_order=sort_order) return self._get_api_response(endpoint, params, ignore_response_attaching)["items"] @allure.step('Get Apple charts "GET /v3/apple-music/charts/"') def get_charts_apple(self, ignore_response_attaching=False): endpoint = "v3/apple-music/charts/" return self._get_api_response(endpoint, ignore_response_attaching=ignore_response_attaching)["items"] @allure.step('Get Spotify charts "GET /v3/spotify/charts/?type=regional&breakdown=daily/"') def get_charts_spotify(self, ignore_response_attaching=False): endpoint = "v3/spotify/charts/?type=regional&breakdown=daily" return self._get_api_response(endpoint, ignore_response_attaching=ignore_response_attaching)["items"] @allure.step('Get YouTube video analytics "GET v3/video-analytics"') def get_video_analytics_youtube(self, start_date, end_date, video_id, country_code="worldwide", ignore_response_attaching=False): endpoint = f"v3/video-analytics?start_date={start_date}&end_date={end_date}&country_code={country_code}&dsp=youtube&video_id={video_id}" return self._get_api_response(endpoint, ignore_response_attaching=ignore_response_attaching)["items"] @allure.step('Get streams "GET v3/streams"') def get_streams(self, isrc, start_date, end_date, country_code="worldwide", ignore_response_attaching=False): endpoint = f"v3/streams?isrc={isrc}&start_date={start_date}&end_date={end_date}&country_code={country_code}&include=all&group_by=date" return self._get_api_response(endpoint, ignore_response_attaching=ignore_response_attaching)["items"] @allure.step('Get TikTok analytics "GET /v3/tiktok/tracks/analytics?"') def get_analytics_tiktok(self, ignore_response_attaching=False, **parameters): endpoint = "v3/tiktok/tracks/analytics?" return self._get_api_response(endpoint, parameters, ignore_response_attaching) @allure.step('Get playlists data "GET /v3/public/track-positions/playlists?"') def get_all_playlists_positions(self, ignore_response_attaching=False, **parameters): endpoint = "v3/public/track-positions/playlists?" return self._get_api_response(endpoint, parameters, ignore_response_attaching) @allure.step('Get playlists data "GET v3/public/track-positions/playlists/dates?"') def get_playlist_dates(self, ignore_response_attaching=False, **parameters): endpoint = "v3/public/track-positions/playlists/dates?" return self._get_api_response(endpoint, parameters, ignore_response_attaching) @allure.step('Get previous playlists data "GET v3/public/track-positions/previous/playlists?"') def get_history_playlists_data(self, ignore_response_attaching=False, **parameters): endpoint = "v3/public/track-positions/previous/playlists?" return self._get_api_response(endpoint, parameters, ignore_response_attaching) @allure.step('Get playlists data "GET v3/public/playlists/current/"') def get_current_playlist_data(self, playlist_id, ignore_response_attaching=False): endpoint = f"v3/public/playlists/current/{playlist_id}" return self._get_api_response(endpoint, ignore_response_attaching=ignore_response_attaching) @allure.step('Get current tracklist data "GET v3/public/track-positions/playlists/current-tracklist/"') def get_current_tracklist_data(self, ignore_response_attaching=False, **parameters): endpoint = "v3/public/track-positions/playlists/current-tracklist/?" return self._get_api_response(endpoint, parameters, ignore_response_attaching)