Skip to content
Snippets Groups Projects
Verified Commit b9eedbf8 authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Ensure subsonic dates are formatted properly

parent 144713fd
No related branches found
No related tags found
No related merge requests found
......@@ -8,6 +8,17 @@ from funkwhale_api.music import models as music_models
from funkwhale_api.music import utils as music_utils
def to_subsonic_date(date):
"""
Subsonic expects this kind of date format: 2012-04-17T19:55:49.000Z
"""
if not date:
return
return date.strftime("%Y-%m-%dT%H:%M:%S.000Z")
def get_artist_data(artist_values):
return {
"id": artist_values["id"],
......@@ -52,7 +63,7 @@ class GetArtistSerializer(serializers.Serializer):
"artistId": artist.id,
"name": album.title,
"artist": artist.name,
"created": album.creation_date,
"created": to_subsonic_date(album.creation_date),
"songCount": len(album.tracks.all()),
}
if album.cover:
......@@ -82,7 +93,7 @@ def get_track_data(album, track, upload):
),
"suffix": upload.extension or "",
"duration": upload.duration or 0,
"created": track.creation_date,
"created": to_subsonic_date(track.creation_date),
"albumId": album.pk,
"artistId": album.artist.pk,
"type": "music",
......@@ -104,7 +115,7 @@ def get_album2_data(album):
"artistId": album.artist.id,
"name": album.title,
"artist": album.artist.name,
"created": album.creation_date,
"created": to_subsonic_date(album.creation_date),
}
if album.cover:
payload["coverArt"] = "al-{}".format(album.id)
......@@ -162,7 +173,7 @@ def get_starred_tracks_data(favorites):
except IndexError:
continue
td = get_track_data(t.album, t, uploads)
td["starred"] = by_track_id[t.pk].creation_date
td["starred"] = to_subsonic_date(by_track_id[t.pk].creation_date)
data.append(td)
return data
......@@ -179,7 +190,7 @@ def get_playlist_data(playlist):
"public": "false",
"songCount": playlist._tracks_count,
"duration": 0,
"created": playlist.creation_date,
"created": to_subsonic_date(playlist.creation_date),
}
......@@ -221,7 +232,7 @@ def get_music_directory_data(artist):
"contentType": upload.mimetype,
"suffix": upload.extension or "",
"duration": upload.duration or 0,
"created": track.creation_date,
"created": to_subsonic_date(track.creation_date),
"albumId": album.pk,
"artistId": artist.pk,
"parent": artist.id,
......
import datetime
import pytest
from funkwhale_api.music import models as music_models
from funkwhale_api.subsonic import serializers
@pytest.mark.parametrize(
"date, expected",
[
(datetime.datetime(2017, 1, 12, 9, 53, 12, 1890), "2017-01-12T09:53:12.000Z"),
(None, None),
],
)
def test_to_subsonic_date(date, expected):
assert serializers.to_subsonic_date(date) == expected
def test_get_artists_serializer(factories):
artist1 = factories["music.Artist"](name="eliot")
artist2 = factories["music.Artist"](name="Ellena")
......@@ -54,7 +66,7 @@ def test_get_artist_serializer(factories):
"name": album.title,
"artist": artist.name,
"songCount": len(tracks),
"created": album.creation_date,
"created": serializers.to_subsonic_date(album.creation_date),
"year": album.release_date.year,
}
],
......@@ -96,7 +108,7 @@ def test_get_album_serializer(factories):
"name": album.title,
"artist": artist.name,
"songCount": 1,
"created": album.creation_date,
"created": serializers.to_subsonic_date(album.creation_date),
"year": album.release_date.year,
"coverArt": "al-{}".format(album.id),
"song": [
......@@ -115,7 +127,7 @@ def test_get_album_serializer(factories):
"bitrate": 42,
"duration": 43,
"size": 44,
"created": track.creation_date,
"created": serializers.to_subsonic_date(track.creation_date),
"albumId": album.pk,
"artistId": artist.pk,
"type": "music",
......@@ -133,7 +145,7 @@ def test_starred_tracks2_serializer(factories):
upload = factories["music.Upload"](track=track)
favorite = factories["favorites.TrackFavorite"](track=track)
expected = [serializers.get_track_data(album, track, upload)]
expected[0]["starred"] = favorite.creation_date
expected[0]["starred"] = serializers.to_subsonic_date(favorite.creation_date)
data = serializers.get_starred_tracks_data([favorite])
assert data == expected
......@@ -162,7 +174,7 @@ def test_playlist_serializer(factories):
"public": "false",
"songCount": 1,
"duration": 0,
"created": playlist.creation_date,
"created": serializers.to_subsonic_date(playlist.creation_date),
}
qs = playlist.__class__.objects.with_tracks_count()
data = serializers.get_playlist_data(qs.first())
......@@ -181,7 +193,7 @@ def test_playlist_detail_serializer(factories):
"public": "false",
"songCount": 1,
"duration": 0,
"created": playlist.creation_date,
"created": serializers.to_subsonic_date(playlist.creation_date),
"entry": [serializers.get_track_data(plt.track.album, plt.track, upload)],
}
qs = playlist.__class__.objects.with_tracks_count()
......@@ -213,7 +225,7 @@ def test_directory_serializer_artist(factories):
"bitrate": 42,
"duration": 43,
"size": 44,
"created": track.creation_date,
"created": serializers.to_subsonic_date(track.creation_date),
"albumId": album.pk,
"artistId": artist.pk,
"parent": artist.pk,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment