from __future__ import absolute_import from api import api, serializers from nodes.models import Node from slices.models import Slice from users.models import User, Group from .models import SfaObject class SfaObjectSerializer(serializers.ModelSerializer): class Meta: model = SfaObject exclude = ('object_id', 'content_type', 'id') # TODO /sfa writable -> UUID only writable on creation, once set cannot be changed for model in [Node, User, Group, Slice]: api.aggregate(model, SfaObjectSerializer, name='sfa')
# TODO deserialize addresses XXX #tinc_addr = TincAddressSerializer(data=data.get('addresses'), many=True) #for addr in data.get('addresses'): # tinc_addr = TincAddressSerializer(data=addr) tinc_host.full_clean(exclude=['content_type', 'object_id', 'name']) return [tinc_host] return [] class HostCreateSerializer(serializers.UriHyperlinkedModelSerializer): id = serializers.Field() mgmt_net = MgmtNetConfRelatedField(source='related_mgmtnet') tinc = TincHostRelatedField(source='related_tinc', required=False) class Meta: model = Host exclude = ('owner',) def validate_tinc(self, attrs, source): return validate_tinc(self, attrs, source) class HostSerializer(HostCreateSerializer): class Meta: model = Host # Aggregate tinc to the Server and Node API api.aggregate(Server, TincHostRelatedField, name='tinc', source='related_tinc', required=False) api.aggregate(Node, TincHostRelatedField, name='tinc', source='related_tinc', required=False)
class HostCreateSerializer(serializers.UriHyperlinkedModelSerializer): id = serializers.Field() mgmt_net = MgmtNetConfRelatedField(source='related_mgmtnet') tinc = TincHostRelatedField(source='related_tinc', required=False) class Meta: model = Host exclude = ('owner', ) def validate_tinc(self, attrs, source): return validate_tinc(self, attrs, source) class HostSerializer(HostCreateSerializer): class Meta: model = Host # Aggregate tinc to the Server and Node API api.aggregate(Server, TincHostRelatedField, name='tinc', source='related_tinc', required=False) api.aggregate(Node, TincHostRelatedField, name='tinc', source='related_tinc', required=False)
try: # GenericRelation mgmt_net = value.first() except AttributeError: # MgmtNetConf object mgmt_net = value if mgmt_net is None: return {} return MgmtNetConfSerializer(mgmt_net).to_native(mgmt_net) def from_native(self, data): """ Return a list of management network objects """ data = self.validate(data) mgmt_net = MgmtNetConf(backend=data.get('backend')) mgmt_net.full_clean(exclude=['content_type', 'object_id']) return [mgmt_net] def validate(self, attrs): if 'backend' not in attrs: raise serializers.ValidationError('backend field must be provided.') ## backwards compatibility #157.note-36 ## ## keep tinc_{client|server} until all nodes are compatible ## if attrs['backend'] in ['tinc_client', 'tinc_server']: attrs['backend'] = MgmtNetConf.TINC return attrs # Aggregate mgmt_network to the API for model in [Server, Node]: api.aggregate(model, MgmtNetConfRelatedField, name='mgmt_net', source='related_mgmtnet')
class ResourceReqSerializer(serializers.ModelSerializer): unit = serializers.CharField(read_only=True) class Meta: model = ResourceReq fields = ['name', 'req', 'unit'] for producer_model in ResourcePlugin.get_producers_models(): if producer_model == Testbed: TestbedSerializer.base_fields.update({'testbed_resources': ResourceSerializer(source='resources', many=True, required=False)}) continue api.aggregate(producer_model, ResourceSerializer, name='resources', many=True, required=False) for consumer_model in ResourcePlugin.get_consumers_models(): api.aggregate(consumer_model, ResourceReqSerializer, name='resources', many=True, required=False) # Hack to show explicit handled resource (Vlan) - #46-note87 class VlanResourceReqSerializer(serializers.ModelSerializer): name = serializers.SerializerMethodField('get_vlan_name') unit = serializers.SerializerMethodField('get_vlan_unit') req = serializers.SerializerMethodField('get_vlan_req') alloc = serializers.SerializerMethodField('get_vlan_alloc') class Meta: model = Slice
class Meta: model = ResourceReq fields = ['name', 'req', 'unit'] for producer_model in ResourcePlugin.get_producers_models(): if producer_model == Testbed: TestbedSerializer.base_fields.update({ 'testbed_resources': ResourceSerializer(source='resources', many=True, required=False) }) continue api.aggregate(producer_model, ResourceSerializer, name='resources', many=True, required=False) for consumer_model in ResourcePlugin.get_consumers_models(): api.aggregate(consumer_model, ResourceReqSerializer, name='resources', many=True, required=False) # Hack to show explicit handled resource (Vlan) - #46-note87 class VlanResourceReqSerializer(serializers.ModelSerializer): name = serializers.SerializerMethodField('get_vlan_name') unit = serializers.SerializerMethodField('get_vlan_unit')
from __future__ import absolute_import from rest_framework import serializers from api import api from nodes.models import Server, Node from .models import CnHost class CnHostSerializer(serializers.ModelSerializer): class Meta: model = CnHost exclude = ['id', 'content_type', 'object_id', 'cndb_cached_on'] # TODO: POST/PUT this resource fails. Related info: # https://groups.google.com/forum/#!topic/django-rest-framework/2iEat5mCbvY/discussion api.aggregate(Node, CnHostSerializer, name='cn', required=False) api.aggregate(Server, CnHostSerializer, name='cn', required=False)