123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- from __future__ import unicode_literals
- from django.core.exceptions import ObjectDoesNotExist
- from rest_framework import serializers
- from dcim.api.serializers import NestedDeviceSerializer, NestedRackSerializer, NestedSiteSerializer
- from dcim.models import Device, Rack, Site
- from extras.models import (
- ACTION_CHOICES, ExportTemplate, Graph, GRAPH_TYPE_CHOICES, ImageAttachment, TopologyMap, UserAction,
- )
- from users.api.serializers import NestedUserSerializer
- from utilities.api import ChoiceFieldSerializer, ContentTypeFieldSerializer, ValidatedModelSerializer
- class GraphSerializer(serializers.ModelSerializer):
- type = ChoiceFieldSerializer(choices=GRAPH_TYPE_CHOICES)
- class Meta:
- model = Graph
- fields = ['id', 'type', 'weight', 'name', 'source', 'link']
- class WritableGraphSerializer(serializers.ModelSerializer):
- class Meta:
- model = Graph
- fields = ['id', 'type', 'weight', 'name', 'source', 'link']
- class RenderedGraphSerializer(serializers.ModelSerializer):
- embed_url = serializers.SerializerMethodField()
- embed_link = serializers.SerializerMethodField()
- type = ChoiceFieldSerializer(choices=GRAPH_TYPE_CHOICES)
- class Meta:
- model = Graph
- fields = ['id', 'type', 'weight', 'name', 'embed_url', 'embed_link']
- def get_embed_url(self, obj):
- return obj.embed_url(self.context['graphed_object'])
- def get_embed_link(self, obj):
- return obj.embed_link(self.context['graphed_object'])
- class ExportTemplateSerializer(serializers.ModelSerializer):
- class Meta:
- model = ExportTemplate
- fields = ['id', 'content_type', 'name', 'description', 'template_code', 'mime_type', 'file_extension']
- class TopologyMapSerializer(serializers.ModelSerializer):
- site = NestedSiteSerializer()
- class Meta:
- model = TopologyMap
- fields = ['id', 'name', 'slug', 'site', 'device_patterns', 'description']
- class WritableTopologyMapSerializer(serializers.ModelSerializer):
- class Meta:
- model = TopologyMap
- fields = ['id', 'name', 'slug', 'site', 'device_patterns', 'description']
- class ImageAttachmentSerializer(serializers.ModelSerializer):
- parent = serializers.SerializerMethodField()
- class Meta:
- model = ImageAttachment
- fields = ['id', 'parent', 'name', 'image', 'image_height', 'image_width', 'created']
- def get_parent(self, obj):
-
- if isinstance(obj.parent, Device):
- serializer = NestedDeviceSerializer
- elif isinstance(obj.parent, Rack):
- serializer = NestedRackSerializer
- elif isinstance(obj.parent, Site):
- serializer = NestedSiteSerializer
- else:
- raise Exception("Unexpected type of parent object for ImageAttachment")
- return serializer(obj.parent, context={'request': self.context['request']}).data
- class WritableImageAttachmentSerializer(ValidatedModelSerializer):
- content_type = ContentTypeFieldSerializer()
- class Meta:
- model = ImageAttachment
- fields = ['id', 'content_type', 'object_id', 'name', 'image']
- def validate(self, data):
-
- try:
- data['content_type'].get_object_for_this_type(id=data['object_id'])
- except ObjectDoesNotExist:
- raise serializers.ValidationError(
- "Invalid parent object: {} ID {}".format(data['content_type'], data['object_id'])
- )
-
- super(WritableImageAttachmentSerializer, self).validate(data)
- return data
- class UserActionSerializer(serializers.ModelSerializer):
- user = NestedUserSerializer()
- action = ChoiceFieldSerializer(choices=ACTION_CHOICES)
- class Meta:
- model = UserAction
- fields = ['id', 'time', 'user', 'action', 'message']
|