"""Songwhip model.""" import requests from src import config from src.config import app_logger def _format_spotify_url(spotify_id): """Format Spotify URL.""" return f'https://open.spotify.com/album/{spotify_id}' def _format_deezer_url(deezer_id): """Format Deezer URL.""" return f'https://www.deezer.com/album/{deezer_id}' def _format_youtube_url(youtube_id): """Format YouTube URL.""" return f'https://www.youtube.com/watch?v={youtube_id}' def _lookup_by_url(music_service_url): """Songwhip lookup by source URL.""" host = config.SONGWHIP_LOOKUP_API_HOST token = config.SONGWHIP_LOOKUP_TOKEN response = requests.get( f'{host}?country=US&url={music_service_url}', headers={'Authorization': f'Bearer {token}'} ) if response.status_code in [401, 403]: error_message = ( f'Songwhip-lookup API returned http status code: ' f'{response.status_code}, and text: ' f'{response.text}' ) app_logger.error(error_message) if response.status_code == 200: return response.json() return None def lookup_songwhip_links(spotify_id=None, deezer_id=None, youtube_id=None): """Call songwhip-lookup API for store links.""" lookup_result = None if spotify_id: lookup_result = _lookup_by_url(_format_spotify_url(spotify_id)) if deezer_id and not lookup_result: lookup_result = _lookup_by_url(_format_deezer_url(deezer_id)) if youtube_id and not lookup_result: lookup_result = _lookup_by_url(_format_youtube_url(youtube_id)) if lookup_result: return lookup_result.get('links') app_logger.info( 'Songwhip-lookup failed for: ' f'spotify_id={spotify_id}, deezer_id={deezer_id}, youtube_id={youtube_id}') return None