mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-05 07:49:23 +02:00
Resolve "Screening for signups"
This commit is contained in:
parent
e6df21b96c
commit
e313fcd033
49 changed files with 1759 additions and 49 deletions
|
@ -1,4 +1,7 @@
|
|||
import json
|
||||
|
||||
from django import forms
|
||||
from django.contrib.postgres.forms import JSONField
|
||||
from django.conf import settings
|
||||
from dynamic_preferences import serializers, types
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
|
@ -57,3 +60,48 @@ class StringListPreference(types.BasePreferenceType):
|
|||
d = super(StringListPreference, self).get_api_additional_data()
|
||||
d["choices"] = self.get("choices")
|
||||
return d
|
||||
|
||||
|
||||
class JSONSerializer(serializers.BaseSerializer):
|
||||
required = True
|
||||
|
||||
@classmethod
|
||||
def to_db(cls, value, **kwargs):
|
||||
if not cls.required and value is None:
|
||||
return json.dumps(value)
|
||||
data_serializer = cls.data_serializer_class(data=value)
|
||||
if not data_serializer.is_valid():
|
||||
raise cls.exception(
|
||||
"{} is not a valid value: {}".format(value, data_serializer.errors)
|
||||
)
|
||||
value = data_serializer.validated_data
|
||||
try:
|
||||
return json.dumps(value, sort_keys=True)
|
||||
except TypeError:
|
||||
raise cls.exception(
|
||||
"Cannot serialize, value {} is not JSON serializable".format(value)
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def to_python(cls, value, **kwargs):
|
||||
return json.loads(value)
|
||||
|
||||
|
||||
class SerializedPreference(types.BasePreferenceType):
|
||||
"""
|
||||
A preference that store arbitrary JSON and validate it using a rest_framework
|
||||
serializer
|
||||
"""
|
||||
|
||||
serializer = JSONSerializer
|
||||
data_serializer_class = None
|
||||
field_class = JSONField
|
||||
widget = forms.Textarea
|
||||
|
||||
@property
|
||||
def serializer(self):
|
||||
class _internal(JSONSerializer):
|
||||
data_serializer_class = self.data_serializer_class
|
||||
required = self.get("required")
|
||||
|
||||
return _internal
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue