kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
60 wiersze
1.5 KiB
Python
60 wiersze
1.5 KiB
Python
from django import forms
|
|
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 all():
|
|
manager = global_preferences_registry.manager()
|
|
return manager.all()
|
|
|
|
|
|
def set(pref, value):
|
|
manager = global_preferences_registry.manager()
|
|
manager[pref] = value
|
|
|
|
|
|
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
|