"""Amazon Music related helpers.""" from oto import response from analytics.connectors import sentry from analytics.connectors import snowflake from analytics.models import utils from analytics.models.streams import Store _sql_loader = snowflake.SQLLoader('analytics/queries') def get_playlists_metadata(playlists, logger, feed_ids, distributors): """Get metadata of passed playlists. Args: playlists (list): list of playlist. logger (OwsLoggingAdapter): Application logger. feed_ids (list): list of available feed_ids. distributors (list): list of distributors names. Returns: oto_response.Response: List of dicts with metadata for each playlists. """ sql = _sql_loader.load_query('get_playlist_metadata') playlist_urls = [playlist['playlist_link'] for playlist in playlists] query_params = { 'storeid': int(Store.AMAZON_MUSIC), 'feed_ids': feed_ids, 'playlist_urls': playlist_urls, 'distributors': distributors} try: playlist_metadata = snowflake.fetchall(sql, query_params) except BaseException: sentry.sentry_client.captureException() result = utils.playlists_with_status(playlists, 500) return response.Response(result) items = [] required_playlist_urls = set(playlist_urls) for playlist in playlist_metadata: playlist_link = playlist[0] items.append({ 'playlist_link': playlist_link, 'playlist_title': playlist[1], 'playlist_author': playlist[2], 'status_code': 200}) required_playlist_urls.remove(playlist_link) if required_playlist_urls: for playlist_url in required_playlist_urls: items.append({'playlist_link': playlist_url, 'status_code': 404}) return response.Response(items)