funkwhale/api/funkwhale_api/common/preferences.py

55 wiersze
1.4 KiB
Python
Czysty Zwykły widok Historia

from django import forms
2018-06-10 08:55:16 +00:00
from django.conf import settings
from dynamic_preferences import serializers, types
from dynamic_preferences.registries import global_preferences_registry
class DefaultFromSettingMixin(object):
def get_default(self):
return getattr(settings, self.setting)
def get(pref):
manager = global_preferences_registry.manager()
return manager[pref]
def set(pref, value):
manager = global_preferences_registry.manager()
manager[pref] = value
class StringListSerializer(serializers.BaseSerializer):
2018-06-09 13:36:16 +00:00
separator = ","
sort = True
@classmethod
def to_db(cls, value, **kwargs):
if not value:
return
if type(value) not in [list, tuple]:
raise cls.exception(
2018-06-09 13:36:16 +00:00
"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 []
2018-06-09 13:36:16 +00:00
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()
2018-06-09 13:36:16 +00:00
d["choices"] = self.get("choices")
return d