diff --git a/funkwhale/api.py b/funkwhale/api.py index dd2364d..2923335 100644 --- a/funkwhale/api.py +++ b/funkwhale/api.py @@ -87,3 +87,10 @@ class API(object): def __call__(self, *args, **kwargs): return self._session.method(self._method, *args, **kwargs) + + def full_url(self, method): + """ Converts a partial URL such as /api/v1/listen/{id} into https://instance.endpoint/api/v1/listen/track_id """ + # check if the method is valid. + if method.startswith(self._session.API_PREFIX) == False: + raise ValueError("the method passed seems to be an invalid URL.") + return self._session.instance_endpoint+method \ No newline at end of file diff --git a/tests/test_api.py b/tests/test_api.py index c4c1af6..7ef9b0d 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -45,5 +45,17 @@ class testApi(unittest.TestCase): self.assertTrue(artist["id"] == 1) libraries = api.albums.libraries.get(1) + def test_full_url(self): + """ Testing conversion of some URLS provided by the funkwhale API into full URLS available for other applications to do something with those. """ + api = self.session.get_api() + track = api.tracks.get(1) + # Make sure the API URL is still valid. + self.assertTrue(track["listen_url"].startswith(self.session.API_PREFIX)) + url = api.full_url(track["listen_url"]) + self.assertTrue(url.startswith(self.session.instance_endpoint)) + track["listen_url"] = url + self.assertRaises(ValueError, api.full_url, track["listen_url"]) + + if __name__ == "__main__": unittest.main() \ No newline at end of file