OpenSlides/openslides/core/serializers.py

113 lines
3.1 KiB
Python
Raw Normal View History

from openslides.utils.rest_api import Field, ModelSerializer, ValidationError
2017-01-20 11:34:05 +01:00
from openslides.utils.validate import validate_html
2015-01-06 00:04:36 +01:00
from .models import (
ChatMessage,
2017-08-22 14:17:20 +02:00
ConfigStore,
Countdown,
ProjectionDefault,
Projector,
ProjectorMessage,
Tag,
)
class JSONSerializerField(Field):
"""
2017-08-22 14:17:20 +02:00
Serializer for projector's and config JSONField.
"""
def to_internal_value(self, data):
"""
2015-09-08 14:14:11 +02:00
Checks that data is a dictionary. The key is a hex UUID and the
value is a dictionary with must have a key 'name'.
"""
2015-09-08 14:14:11 +02:00
if type(data) is not dict:
raise ValidationError({'detail': 'Data must be a dictionary.'})
2015-09-08 14:14:11 +02:00
for element in data.values():
if type(element) is not dict:
raise ValidationError({'detail': 'Data must be a dictionary.'})
elif element.get('name') is None:
raise ValidationError({'detail': "Every dictionary must have a key 'name'."})
return data
2017-08-22 14:17:20 +02:00
def to_representation(self, value):
"""
Returns the value. It is decoded from the Django JSONField.
"""
return value
2016-09-12 11:05:34 +02:00
class ProjectionDefaultSerializer(ModelSerializer):
"""
Serializer for core.models.ProjectionDefault objects.
"""
class Meta:
model = ProjectionDefault
fields = ('id', 'name', 'display_name', 'projector', )
class ProjectorSerializer(ModelSerializer):
"""
Serializer for core.models.Projector objects.
"""
2015-09-08 14:14:11 +02:00
config = JSONSerializerField(write_only=True)
2016-09-12 11:05:34 +02:00
projectiondefaults = ProjectionDefaultSerializer(many=True, read_only=True)
class Meta:
model = Projector
fields = ('id', 'config', 'elements', 'scale', 'scroll', 'name', 'blank', 'width', 'height', 'projectiondefaults', )
read_only_fields = ('scale', 'scroll', 'blank', 'width', 'height', )
2015-01-06 00:04:36 +01:00
class TagSerializer(ModelSerializer):
"""
Serializer for core.models.Tag objects.
"""
class Meta:
model = Tag
fields = ('id', 'name', )
2017-08-22 14:17:20 +02:00
class ConfigSerializer(ModelSerializer):
"""
Serializer for core.models.Tag objects.
"""
value = JSONSerializerField()
class Meta:
model = ConfigStore
fields = ('id', 'key', 'value')
class ChatMessageSerializer(ModelSerializer):
"""
Serializer for core.models.ChatMessage objects.
"""
class Meta:
model = ChatMessage
fields = ('id', 'message', 'timestamp', 'user', )
read_only_fields = ('user', )
class ProjectorMessageSerializer(ModelSerializer):
"""
Serializer for core.models.ProjectorMessage objects.
"""
class Meta:
model = ProjectorMessage
fields = ('id', 'message', )
2017-01-20 11:34:05 +01:00
def validate(self, data):
if 'message' in data:
data['message'] = validate_html(data['message'])
2017-01-20 11:34:05 +01:00
return data
class CountdownSerializer(ModelSerializer):
"""
Serializer for core.models.Countdown objects.
"""
class Meta:
model = Countdown
fields = ('id', 'description', 'default_time', 'countdown_time', 'running', )