""" Integration with Apollo's API. Apollo is a apollo-api app: https://github.com/filtr/apollo-api. """ from server import config from server.client.base.config import ApiKeyClientConfig from server.client.clients.apollo_api.charts import ApolloApiChartsClient from server.client.clients.apollo_api.gtp import ApolloApiGtpClient from server.client.clients.apollo_api.markets import ApolloApiMarketsClient from server.client.clients.apollo_api.nmf import ApolloApiNmfClient from server.client.clients.apollo_api.playlists import ApolloApiPlaylistsClient from server.client.clients.apollo_api.tracks import ApolloApiTracksClient from server.client.utils import prepare_list_arg from server.constants import Service from server.utils.parallel import ListResult, request_in_chunks class ApolloApiConfig(ApiKeyClientConfig): """Configuration class for Apollo api client.""" service = Service.APOLLO_API.value uri = config.APOLLO_URI auth_secret = config.APOLLOAPI_AUTH class ApolloApiClient( ApolloApiNmfClient, ApolloApiPlaylistsClient, ApolloApiGtpClient, ApolloApiTracksClient, ApolloApiChartsClient, ApolloApiMarketsClient, ): """Client for sending requests to Apollo api app.""" @prepare_list_arg("upc") @request_in_chunks(500, items_key="upc", result_type=ListResult) async def get_albums_is_sony(self, **params): return await self.send_request("api/albums/is-sony/", params=params) @prepare_list_arg("isrc_list") async def get_isrc_to_id_relation(self, **params): return await self.send_request("api/isrc-to-id-relation/", params=params) async def get_market_is_supported_by_vendor(self, **params): return await self.send_request("api/check-market/", params=params) async def get_markets(self, **params): return await self.send_request("api/markets/", params=params) @prepare_list_arg("id") async def get_playlists_spotify(self, **params): result = await self.send_request("api/playlists/spotify/", params=params) return result["playlists"] async def get_users_search(self, **params): result = await self.send_request("api/users/search/", params=params) return result["items"] async def get_users_visits(self, **params): return await self.send_request("api/users/visits/", params=params) async def get_v1_isrc_relation(self, isrc: str = None, **params): url = "api/v1/isrc-relation/" + isrc + "/" if isrc else "api/v1/isrc-relation/" return await self.send_request(url, params=params) async def get_value_by_key(self, **params): return await self.send_request("api/value/", params=params) async def get_visited_tracks(self, **params): return await self.send_request("api/visited-tracks/", params=params)