funkwhale/api/funkwhale_api/plugins/config.py

50 lines
1.3 KiB
Python

from django import forms
from dynamic_preferences import types
SettingSection = types.Section
StringSetting = types.StringPreference
class PasswordSetting(types.StringPreference):
widget = forms.PasswordInput
class BooleanSetting(types.BooleanPreference):
# Boolean are supported in JSON, so no need to serialized to a string
serializer = None
class IntSetting(types.IntegerPreference):
# Integers are supported in JSON, so no need to serialized to a string
serializer = None
def validate_config(payload, settings):
"""
Dynamic preferences stores settings in a separate database table. However
it is a bit too much for our use cases, and we simply want to store
these in a JSONField on the corresponding model row.
This validates the payload using the dynamic preferences serializers
and return a config that is ready to be persisted as JSON
"""
final = {}
for klass in settings:
setting = klass()
setting_id = setting.identifier()
try:
value = payload[setting_id]
except KeyError:
continue
setting.validate(value)
if setting.serializer:
value = setting.serializer.serialize(value)
final[setting_id] = value
return final