See #186: moved PLAYLISTS_MAX_TRACKS to playlists__max_tracks
This commit is contained in:
parent
aa3da412a7
commit
7222f7b710
|
@ -433,6 +433,7 @@ ADMIN_URL = env('DJANGO_ADMIN_URL', default='^api/admin/')
|
|||
CSRF_USE_SESSIONS = True
|
||||
|
||||
# Playlist settings
|
||||
# XXX: Deprecated, use playlists__max_tracks instead
|
||||
PLAYLISTS_MAX_TRACKS = env.int('PLAYLISTS_MAX_TRACKS', default=250)
|
||||
|
||||
ACCOUNT_USERNAME_BLACKLIST = [
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
from dynamic_preferences import types
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
|
||||
from funkwhale_api.common import preferences
|
||||
|
||||
playlists = types.Section('playlists')
|
||||
|
||||
|
||||
@global_preferences_registry.register
|
||||
class MaxTracks(preferences.DefaultFromSettingMixin, types.IntegerPreference):
|
||||
show_in_api = True
|
||||
section = playlists
|
||||
name = 'max_tracks'
|
||||
verbose_name = 'Max tracks per playlist'
|
||||
setting = 'PLAYLISTS_MAX_TRACKS'
|
|
@ -6,6 +6,7 @@ from django.utils import timezone
|
|||
from rest_framework import exceptions
|
||||
|
||||
from funkwhale_api.common import fields
|
||||
from funkwhale_api.common import preferences
|
||||
|
||||
|
||||
class Playlist(models.Model):
|
||||
|
@ -81,10 +82,11 @@ class Playlist(models.Model):
|
|||
existing = self.playlist_tracks.select_for_update()
|
||||
now = timezone.now()
|
||||
total = existing.filter(index__isnull=False).count()
|
||||
if existing.count() + len(tracks) > settings.PLAYLISTS_MAX_TRACKS:
|
||||
max_tracks = preferences.get('playlists__max_tracks')
|
||||
if existing.count() + len(tracks) > max_tracks:
|
||||
raise exceptions.ValidationError(
|
||||
'Playlist would reach the maximum of {} tracks'.format(
|
||||
settings.PLAYLISTS_MAX_TRACKS))
|
||||
max_tracks))
|
||||
self.save(update_fields=['modification_date'])
|
||||
start = total
|
||||
plts = [
|
||||
|
|
|
@ -3,6 +3,7 @@ from django.db import transaction
|
|||
from rest_framework import serializers
|
||||
from taggit.models import Tag
|
||||
|
||||
from funkwhale_api.common import preferences
|
||||
from funkwhale_api.music.models import Track
|
||||
from funkwhale_api.music.serializers import TrackSerializerNested
|
||||
from funkwhale_api.users.serializers import UserBasicSerializer
|
||||
|
@ -32,10 +33,11 @@ class PlaylistTrackWriteSerializer(serializers.ModelSerializer):
|
|||
raise serializers.ValidationError(
|
||||
'You do not have the permission to edit this playlist')
|
||||
existing = value.playlist_tracks.count()
|
||||
if existing >= settings.PLAYLISTS_MAX_TRACKS:
|
||||
max_tracks = preferences.get('playlists__max_tracks')
|
||||
if existing >= max_tracks:
|
||||
raise serializers.ValidationError(
|
||||
'Playlist has reached the maximum of {} tracks'.format(
|
||||
settings.PLAYLISTS_MAX_TRACKS))
|
||||
max_tracks))
|
||||
return value
|
||||
|
||||
@transaction.atomic
|
||||
|
|
|
@ -116,8 +116,8 @@ def test_can_insert_many(factories):
|
|||
assert plt.playlist == playlist
|
||||
|
||||
|
||||
def test_insert_many_honor_max_tracks(factories, settings):
|
||||
settings.PLAYLISTS_MAX_TRACKS = 4
|
||||
def test_insert_many_honor_max_tracks(preferences, factories):
|
||||
preferences['playlists__max_tracks'] = 4
|
||||
playlist = factories['playlists.Playlist']()
|
||||
plts = factories['playlists.PlaylistTrack'].create_batch(
|
||||
size=2, playlist=playlist)
|
||||
|
|
|
@ -2,8 +2,8 @@ from funkwhale_api.playlists import models
|
|||
from funkwhale_api.playlists import serializers
|
||||
|
||||
|
||||
def test_cannot_max_500_tracks_per_playlist(factories, settings):
|
||||
settings.PLAYLISTS_MAX_TRACKS = 2
|
||||
def test_cannot_max_500_tracks_per_playlist(factories, preferences):
|
||||
preferences['playlists__max_tracks'] = 2
|
||||
playlist = factories['playlists.Playlist']()
|
||||
plts = factories['playlists.PlaylistTrack'].create_batch(
|
||||
size=2, playlist=playlist)
|
||||
|
|
Loading…
Reference in New Issue