Verified Commit 57750e39 authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Merge branch 'master' into develop

parents 668615a8 db807101
"""
Documentation of Subsonic API can be found at http://www.subsonic.org/pages/api.jsp
"""
import datetime
import functools
......@@ -427,7 +430,34 @@ class SubsonicViewSet(viewsets.GenericViewSet):
Q(tagged_items__tag__name=genre)
| Q(artist__tagged_items__tag__name=genre)
)
elif type == "byYear":
try:
boundaries = [
int(data.get("fromYear", 0)),
int(data.get("toYear", 99999999)),
]
except (TypeError, ValueError):
return response.Response(
{
"error": {
"code": 10,
"message": "Invalid fromYear or toYear parameter",
}
}
)
# because, yeah, the specification explicitly state that fromYear can be greater
# than toYear, to indicate reverse ordering…
# http://www.subsonic.org/pages/api.jsp#getAlbumList2
from_year = min(boundaries)
to_year = max(boundaries)
queryset = queryset.filter(
release_date__year__gte=from_year, release_date__year__lte=to_year
)
if boundaries[0] <= boundaries[1]:
queryset = queryset.order_by("release_date")
else:
queryset = queryset.order_by("-release_date")
try:
offset = int(data["offset"])
except (TypeError, KeyError, ValueError):
......
......@@ -469,6 +469,35 @@ def test_get_album_list2_by_genre(f, db, logged_in_api_client, factories):
}
@pytest.mark.parametrize(
"params, expected",
[
({"type": "byYear", "fromYear": 1902, "toYear": 1903}, [2, 3]),
# Because why not, it's supported in Subsonic API…
# http://www.subsonic.org/pages/api.jsp#getAlbumList2
({"type": "byYear", "fromYear": 1903, "toYear": 1902}, [3, 2]),
],
)
def test_get_album_list2_by_year(params, expected, db, logged_in_api_client, factories):
albums = [
factories["music.Album"](
playable=True, release_date=datetime.date(1900 + i, 1, 1)
)
for i in range(5)
]
url = reverse("api:subsonic-get_album_list2")
base_params = {"f": "json"}
base_params.update(params)
response = logged_in_api_client.get(url, base_params)
assert response.status_code == 200
assert response.data == {
"albumList2": {
"album": serializers.get_album_list2_data([albums[i] for i in expected])
}
}
@pytest.mark.parametrize("f", ["json"])
@pytest.mark.parametrize(
"tags_field",
......
Documented how to create DB extension by hand in case of permission error during migrations (#934)
Support byYear filtering in Subsonic API (#936)
......@@ -192,6 +192,12 @@ match what is described in :doc:`/installation/debian`:
# restart the services
sudo systemctl start funkwhale.target
.. note::
If you see a PermissionError when running the ``migrate`` command, try running the following commands by hand, and relaunch the migrations::
sudo -u postgres psql funkwhale -c 'CREATE EXTENSION IF NOT EXISTS "citext";'
sudo -u postgres psql funkwhale -c 'CREATE EXTENSION IF NOT EXISTS "unaccent";'
.. warning::
You may sometimes get the following warning while applying migrations::
......
......@@ -66,6 +66,7 @@ for Funkwhale to work properly:
.. code-block:: shell
sudo -u postgres psql funkwhale -c 'CREATE EXTENSION "unaccent";'
sudo -u postgres psql funkwhale -c 'CREATE EXTENSION "citext";'
Cache setup (Redis)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment