"""API Client for ows-track.""" from functools import partial from owsrequest import request as owsrequest from lyrics import config class APIClient: """API Client for ows-track.""" def __init__(self, base_url): """Initialize APIClient class.""" self.base_url = base_url self.request = partial( owsrequest.process, config.SERVICE_NAME, config.QA_ENVIRONMENT) def get_lyrics(self, tuid): """Execute a GET.""" return self.request( 'GET', config.SERVICE_NAME, '/tracks/{}/lyrics'.format(tuid)) def delete_lyrics(self, tuid): """Execute a DELETE.""" return self.request( 'DELETE', config.SERVICE_NAME, '/tracks/{}/lyrics'.format(tuid)) def delete_lyrics_multiple(self, tuids): """ Execute a DELETE for multiple tracks. @param list tuids: list of tuids to delete """ return self.request( 'DELETE', config.SERVICE_NAME, '/tracks/lyrics', json={'tuids': tuids}) def put_lyrics(self, tuid, lyrics): """ Execute a PUT to update lyrics. @param string lyrics: lyrics to PUT """ return self.request( 'PUT', config.SERVICE_NAME, '/tracks/{}/lyrics'.format(tuid), json={'lyrics': lyrics}) def post_lyrics(self, items): """ Execute a POST on copy endpoint. @param list items: list of dictionaries - see example below: [ {source_tuid: 55, destination_tuid: 67}, {source_tuid: 56, destination_tuid: 68} ] """ return self.request( 'POST', config.SERVICE_NAME, '/tracks/copy', json={'items': items}) def get_lyrics_multiple(self, tuids): """Execute a GET for multiple tracks. @param list tuids: list of tuids to fetch """ return self.request( 'GET', config.SERVICE_NAME, '/tracks/lyrics', params={'tuids': tuids}) def has_explicit_lyrics(self, lyrics): """Execute a GET for explicit word check in lyrics. @param str lyrics: lyrics data """ return self.request( 'GET', config.SERVICE_NAME, '/has-explicit-lyrics', params={'lyrics': lyrics})