import time from allure import step from .api_client import ApiClient from .logger import Logger api_charts_date_range = "/gate-api/charts/date-range/?vendor={}&market={}&type={}" api_charts_tracks = "/gate-api/charts/top/?vendor={}&market={}&fields=is_sony&fields=is_re_enter&fields=trends&date={" \ "}&type={}&end=200" api_apple_charts = "/dsp-api/delphi/apple-music/charts/tracks?chart_id=charts_daily_{}" api_get_isrc_by_apple_id = "/dsp-api/apple/tracks/{id}?market={market}" api_get_isrc_by_spotify_id = "/dsp-api/spotify/tracks/{id}{market}" api_completeness = "/dsp-api/delphi/data-health/completeness" api_artists_tracks = "/gate-api/artists/tracks/?spotify_artist_id={0}&limit=50&offset={1}&dsp={2}&country_code={3}" api_spotify_tracks = "/vendor-api/spotify/v1/tracks/{0}?market={1}" class ApiHelper(ApiClient): log = Logger() def getting(self, api_url): for i in range(5): resp = self.get(api_url) self.log.info(f"RESPONSE 'status_code': {resp.status_code}, 'body': {resp.json()}") body = resp.json() if len(body) > 0: return body time.sleep(1.0) return None def removing(self, api_url): resp = self.delete(api_url) self.log.info(f"RESPONSE 'status_code': {resp.status_code}") return def posting(self, api_url, data): resp = self.post(api_url, data=data) self.log.info(f"RESPONSE 'status_code': {resp.status_code}") self.log.info(f"Inserted item: {resp.json()}") return resp.json() @step("Return charts date range {0}, {1}, {2}") def get_chats_date_range(self, vendor, market, type='daily'): return self.getting(api_charts_date_range.format(vendor, market, type)) @step("Return top charts tracks {0}, {1}, {2}, {3}") def get_top_charts_tracks(self, vendor, market, date, type='daily'): return self.getting(api_charts_tracks.format(vendor, market, date, type)) @step("Return apple top charts tracks {0}") def get_apple_top_charts_tracks(self, market): return self.getting(api_apple_charts.format(market)) @step("Return isrc by apple id {id} {market}") def get_apple_id_by_isrc(self, id, market): endpoint = api_get_isrc_by_apple_id.format(id=id, market=market) self.log.info(f"endpoint: {endpoint}") return self.getting(endpoint)["data"][0]["attributes"]["isrc"] @step("Return isrc by spotify id {id} {market}") def get_spotify_id_by_isrc(self, id, market): return self.getting(api_get_isrc_by_spotify_id.format(id, market)) @step("Return dsp dates") def get_dsp_dates(self): resp = self.getting(api_completeness) dsp_dates = {i["dsp"]:i["updated_date"] for i in resp} return dsp_dates @step("Return artist tracks") def get_artist_tracks(self, id, dsp, cc_code): resp = self.getting(api_artists_tracks.format(id, 0, dsp, cc_code)) record_list = resp["items"] total = int(resp["pagination"]["total"]) if total > 50: for offset in range(50, total, 50): response = self.getting(api_artists_tracks.format(id, offset, dsp, cc_code)) records = response["items"] record_list.extend(records) return record_list @step("Return artist tracks") def get_spotify_tracks(self, id, cc_code): resp = self.getting(api_spotify_tracks.format(id, cc_code).replace("?market=_gl", "")) return resp