Added API endpoint for listing public instance settings
This commit is contained in:
parent
0944ef2a07
commit
6152b3bb36
|
@ -1,5 +1,6 @@
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
from django.conf.urls import include, url
|
from django.conf.urls import include, url
|
||||||
|
from funkwhale_api.instance import views as instance_views
|
||||||
from funkwhale_api.music import views
|
from funkwhale_api.music import views
|
||||||
from funkwhale_api.playlists import views as playlists_views
|
from funkwhale_api.playlists import views as playlists_views
|
||||||
from rest_framework_jwt import views as jwt_views
|
from rest_framework_jwt import views as jwt_views
|
||||||
|
@ -25,6 +26,10 @@ router.register(
|
||||||
v1_patterns = router.urls
|
v1_patterns = router.urls
|
||||||
|
|
||||||
v1_patterns += [
|
v1_patterns += [
|
||||||
|
url(r'^instance/',
|
||||||
|
include(
|
||||||
|
('funkwhale_api.instance.urls', 'instance'),
|
||||||
|
namespace='instance')),
|
||||||
url(r'^providers/',
|
url(r'^providers/',
|
||||||
include(
|
include(
|
||||||
('funkwhale_api.providers.urls', 'providers'),
|
('funkwhale_api.providers.urls', 'providers'),
|
||||||
|
|
|
@ -60,6 +60,7 @@ THIRD_PARTY_APPS = (
|
||||||
LOCAL_APPS = (
|
LOCAL_APPS = (
|
||||||
'funkwhale_api.users', # custom users app
|
'funkwhale_api.users', # custom users app
|
||||||
# Your stuff: custom apps go here
|
# Your stuff: custom apps go here
|
||||||
|
'funkwhale_api.instance',
|
||||||
'funkwhale_api.music',
|
'funkwhale_api.music',
|
||||||
'funkwhale_api.favorites',
|
'funkwhale_api.favorites',
|
||||||
'funkwhale_api.radios',
|
'funkwhale_api.radios',
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
from django.conf.urls import url
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
url(r'^settings/$', views.InstanceSettings.as_view(), name='settings'),
|
||||||
|
]
|
|
@ -0,0 +1,25 @@
|
||||||
|
from rest_framework import views
|
||||||
|
from rest_framework.response import Response
|
||||||
|
|
||||||
|
from dynamic_preferences.api import serializers
|
||||||
|
from dynamic_preferences.registries import global_preferences_registry
|
||||||
|
|
||||||
|
|
||||||
|
class InstanceSettings(views.APIView):
|
||||||
|
permission_classes = []
|
||||||
|
authentication_classes = []
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
manager = global_preferences_registry.manager()
|
||||||
|
manager.all()
|
||||||
|
all_preferences = manager.model.objects.all().order_by(
|
||||||
|
'section', 'name'
|
||||||
|
)
|
||||||
|
api_preferences = [
|
||||||
|
p
|
||||||
|
for p in all_preferences
|
||||||
|
if getattr(p.preference, 'show_in_api', False)
|
||||||
|
]
|
||||||
|
data = serializers.GlobalPreferenceSerializer(
|
||||||
|
api_preferences, many=True).data
|
||||||
|
return Response(data, status=200)
|
|
@ -3,6 +3,7 @@ import shutil
|
||||||
import pytest
|
import pytest
|
||||||
from django.core.cache import cache as django_cache
|
from django.core.cache import cache as django_cache
|
||||||
from dynamic_preferences.registries import global_preferences_registry
|
from dynamic_preferences.registries import global_preferences_registry
|
||||||
|
from rest_framework.test import APIClient
|
||||||
|
|
||||||
from funkwhale_api.taskapp import celery
|
from funkwhale_api.taskapp import celery
|
||||||
|
|
||||||
|
@ -29,7 +30,9 @@ def factories(db):
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def preferences(db):
|
def preferences(db):
|
||||||
yield global_preferences_registry.manager()
|
manager = global_preferences_registry.manager()
|
||||||
|
manager.all()
|
||||||
|
yield manager
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
@ -48,6 +51,11 @@ def logged_in_client(db, factories, client):
|
||||||
delattr(client, 'user')
|
delattr(client, 'user')
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def api_client(client):
|
||||||
|
return APIClient()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def superuser_client(db, factories, client):
|
def superuser_client(db, factories, client):
|
||||||
user = factories['users.SuperUser']()
|
user = factories['users.SuperUser']()
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
from dynamic_preferences.api import serializers
|
||||||
|
|
||||||
|
|
||||||
|
def test_can_list_settings_via_api(preferences, api_client):
|
||||||
|
url = reverse('api:v1:instance:settings')
|
||||||
|
all_preferences = preferences.model.objects.all()
|
||||||
|
expected_preferences = {
|
||||||
|
p.preference.identifier(): p
|
||||||
|
for p in all_preferences
|
||||||
|
if getattr(p.preference, 'show_in_api', False)}
|
||||||
|
|
||||||
|
assert len(expected_preferences) > 0
|
||||||
|
|
||||||
|
response = api_client.get(url)
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert len(response.data) == len(expected_preferences)
|
||||||
|
|
||||||
|
for p in response.data:
|
||||||
|
i = '__'.join([p['section'], p['name']])
|
||||||
|
assert i in expected_preferences
|
Loading…
Reference in New Issue