2015-02-18 01:45:39 +01:00
|
|
|
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
|
|
|
|
2016-10-21 11:05:24 +02:00
|
|
|
from .models import (
|
|
|
|
ChatMessage,
|
2017-08-22 14:17:20 +02:00
|
|
|
ConfigStore,
|
2016-10-21 11:05:24 +02:00
|
|
|
Countdown,
|
2018-11-04 14:02:30 +01:00
|
|
|
History,
|
2016-10-21 11:05:24 +02:00
|
|
|
ProjectionDefault,
|
|
|
|
Projector,
|
|
|
|
ProjectorMessage,
|
|
|
|
Tag,
|
|
|
|
)
|
2015-02-18 01:45:39 +01:00
|
|
|
|
|
|
|
|
|
|
|
class JSONSerializerField(Field):
|
|
|
|
"""
|
2017-08-22 14:17:20 +02:00
|
|
|
Serializer for projector's and config JSONField.
|
2015-02-18 01:45:39 +01:00
|
|
|
"""
|
|
|
|
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-02-18 01:45:39 +01:00
|
|
|
"""
|
2015-09-08 14:14:11 +02:00
|
|
|
if type(data) is not dict:
|
2016-02-06 00:02:22 +01:00
|
|
|
raise ValidationError({'detail': 'Data must be a dictionary.'})
|
2015-09-08 14:14:11 +02:00
|
|
|
for element in data.values():
|
2015-02-18 01:45:39 +01:00
|
|
|
if type(element) is not dict:
|
2016-02-06 00:02:22 +01:00
|
|
|
raise ValidationError({'detail': 'Data must be a dictionary.'})
|
2015-02-18 01:45:39 +01:00
|
|
|
elif element.get('name') is None:
|
2016-02-06 00:02:22 +01:00
|
|
|
raise ValidationError({'detail': "Every dictionary must have a key 'name'."})
|
2015-02-18 01:45:39 +01:00
|
|
|
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
|
|
|
|
|
2015-02-18 01:45:39 +01:00
|
|
|
|
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', )
|
|
|
|
|
|
|
|
|
2015-02-18 01:45:39 +01:00
|
|
|
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)
|
2015-02-18 01:45:39 +01:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Projector
|
2016-09-29 15:32:58 +02:00
|
|
|
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
|
|
|
|
|
|
|
|
2015-02-12 18:48:14 +01:00
|
|
|
class TagSerializer(ModelSerializer):
|
2015-01-17 14:25:05 +01:00
|
|
|
"""
|
|
|
|
Serializer for core.models.Tag objects.
|
|
|
|
"""
|
|
|
|
class Meta:
|
|
|
|
model = Tag
|
2015-02-18 01:45:39 +01:00
|
|
|
fields = ('id', 'name', )
|
2015-09-07 16:46:04 +02:00
|
|
|
|
|
|
|
|
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')
|
|
|
|
|
|
|
|
|
2015-09-07 16:46:04 +02:00
|
|
|
class ChatMessageSerializer(ModelSerializer):
|
|
|
|
"""
|
|
|
|
Serializer for core.models.ChatMessage objects.
|
|
|
|
"""
|
|
|
|
class Meta:
|
|
|
|
model = ChatMessage
|
|
|
|
fields = ('id', 'message', 'timestamp', 'user', )
|
|
|
|
read_only_fields = ('user', )
|
2016-10-21 11:05:24 +02:00
|
|
|
|
|
|
|
|
|
|
|
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):
|
2017-03-28 08:27:54 +02:00
|
|
|
if 'message' in data:
|
|
|
|
data['message'] = validate_html(data['message'])
|
2017-01-20 11:34:05 +01:00
|
|
|
return data
|
|
|
|
|
2016-10-21 11:05:24 +02:00
|
|
|
|
|
|
|
class CountdownSerializer(ModelSerializer):
|
|
|
|
"""
|
|
|
|
Serializer for core.models.Countdown objects.
|
|
|
|
"""
|
|
|
|
class Meta:
|
|
|
|
model = Countdown
|
|
|
|
fields = ('id', 'description', 'default_time', 'countdown_time', 'running', )
|
2018-11-04 14:02:30 +01:00
|
|
|
|
|
|
|
|
|
|
|
class HistorySerializer(ModelSerializer):
|
|
|
|
"""
|
|
|
|
Serializer for core.models.Countdown objects.
|
|
|
|
|
|
|
|
Does not contain full data of history object.
|
|
|
|
"""
|
|
|
|
class Meta:
|
|
|
|
model = History
|
|
|
|
fields = ('id', 'element_id', 'now', 'information', 'user', )
|