From 93a521346bbc9f1d5b16ae1dd0d40800c44307c0 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Sun, 27 Jan 2019 10:18:54 +0100 Subject: [PATCH] Fixed bitrate / duration error due to API change in Funkwhale --- mopidy_funkwhale/library.py | 8 ++++++-- tests/factories.py | 10 +++++++++- tests/test_library.py | 9 ++++----- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/mopidy_funkwhale/library.py b/mopidy_funkwhale/library.py index 1cd982a..174067c 100644 --- a/mopidy_funkwhale/library.py +++ b/mopidy_funkwhale/library.py @@ -303,6 +303,10 @@ def convert_to_album(payload, uri_prefix="funkwhale:albums"): def convert_to_track(payload, uri_prefix="funkwhale:tracks"): artist = convert_to_artist(payload["artist"]) album = convert_to_album(payload["album"]) + try: + upload = payload["uploads"][0] + except (KeyError, IndexError): + upload = {} return models.Track( uri=uri_prefix + ":%s" % payload["id"], name=payload["title"], @@ -310,8 +314,8 @@ def convert_to_track(payload, uri_prefix="funkwhale:tracks"): artists=[artist], album=album, date=payload["album"]["release_date"], - bitrate=(payload["bitrate"] or 0) / 1000, - length=(payload["duration"] or 0) * 1000, + bitrate=(upload.get("bitrate") or 0) / 1000, + length=(upload.get("duration") or 0) * 1000, track_no=payload["position"], ) diff --git a/tests/factories.py b/tests/factories.py index 44ccb97..0ec154e 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -34,6 +34,14 @@ class AlbumJSONFactory(factory.Factory): model = dict +class UploadJSONFactory(factory.Factory): + uuid = factory.Faker("uuid4") + bitrate = factory.Iterator([i * 1000 for i in (128, 256, 360)]) + + class Meta: + model = dict + + class TrackJSONFactory(factory.Factory): id = factory.Sequence(int) mbid = factory.Faker("uuid4") @@ -41,9 +49,9 @@ class TrackJSONFactory(factory.Factory): position = factory.Faker("pyint") duration = factory.Faker("pyint") creation_date = factory.Faker("date") - bitrate = factory.Iterator([i * 1000 for i in (128, 256, 360)]) artist = factory.SubFactory(ArtistJSONFactory) album = factory.SubFactory(AlbumJSONFactory) + uploads = factory.LazyAttribute(lambda o: [UploadJSONFactory()]) class Meta: model = dict diff --git a/tests/test_library.py b/tests/test_library.py index 7bbe0a1..e5871ab 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -47,15 +47,13 @@ def test_convert_album_to_model(): assert result.images == frozenset([payload["cover"]["original"]]) -def test_convert_album_to_model(): +def test_convert_track_to_model(): payload = { "id": 2, "title": "Test track", "mbid": str(uuid.uuid4()), "creation_date": "2017-01-01", "position": 12, - "bitrate": 128000, - "duration": 120, "artist": {"id": 43, "mbid": str(uuid.uuid4()), "name": "Test artist 2"}, "album": { "id": 3, @@ -68,6 +66,7 @@ def test_convert_album_to_model(): "original": "/media/albums/covers/2018/10/03/b4e94b07e-da27-4df4-ae2a-d924a9448544.jpg" }, }, + "uploads": [{"bitrate": 128000, "duration": 120}], } result = mopidy_funkwhale.library.convert_to_track(payload) @@ -77,8 +76,8 @@ def test_convert_album_to_model(): assert result.uri == "funkwhale:tracks:%s" % (payload["id"],) assert result.name == payload["title"] assert result.date == payload["album"]["release_date"] - assert result.length == payload["duration"] * 1000 - assert result.bitrate == payload["bitrate"] / 1000 + assert result.length == payload["uploads"][0]["duration"] * 1000 + assert result.bitrate == payload["uploads"][0]["bitrate"] / 1000 assert result.album == mopidy_funkwhale.library.convert_to_album(payload["album"]) assert result.artists == frozenset(