mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-05 11:49:24 +02:00
See #236: added a basic string list preference
This commit is contained in:
parent
c6cd3abf9d
commit
2ef36928c6
2 changed files with 83 additions and 0 deletions
|
@ -1,4 +1,8 @@
|
|||
from django.conf import settings
|
||||
from django import forms
|
||||
|
||||
from dynamic_preferences import serializers
|
||||
from dynamic_preferences import types
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
|
||||
|
||||
|
@ -10,3 +14,38 @@ class DefaultFromSettingMixin(object):
|
|||
def get(pref):
|
||||
manager = global_preferences_registry.manager()
|
||||
return manager[pref]
|
||||
|
||||
|
||||
class StringListSerializer(serializers.BaseSerializer):
|
||||
separator = ','
|
||||
sort = True
|
||||
|
||||
@classmethod
|
||||
def to_db(cls, value, **kwargs):
|
||||
if not value:
|
||||
return
|
||||
|
||||
if type(value) not in [list, tuple]:
|
||||
raise cls.exception(
|
||||
"Cannot serialize, value {} is not a list or a tuple".format(
|
||||
value))
|
||||
|
||||
if cls.sort:
|
||||
value = sorted(value)
|
||||
return cls.separator.join(value)
|
||||
|
||||
@classmethod
|
||||
def to_python(cls, value, **kwargs):
|
||||
if not value:
|
||||
return []
|
||||
return value.split(',')
|
||||
|
||||
|
||||
class StringListPreference(types.BasePreferenceType):
|
||||
serializer = StringListSerializer
|
||||
field_class = forms.MultipleChoiceField
|
||||
|
||||
def get_api_additional_data(self):
|
||||
d = super(StringListPreference, self).get_api_additional_data()
|
||||
d['choices'] = self.get('choices')
|
||||
return d
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue