blob: 50bd5a6109c94996fff9b915b1cd5e6ad5aba5b6 [file] [log] [blame]
Scott Baker8e6647a2016-06-20 17:16:20 -07001from rest_framework.decorators import api_view
2from rest_framework.response import Response
3from rest_framework.reverse import reverse
4from rest_framework import serializers
5from rest_framework import generics
6from rest_framework import status
7from core.models import *
8from django.forms import widgets
Scott Bakerc15556d2017-05-06 09:55:01 -07009from services.volt.models import VOLTTenant, VOLTService
10from services.rcord.models import CordSubscriberRoot
Scott Baker8e6647a2016-06-20 17:16:20 -070011from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
12from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
13
14def get_default_volt_service():
15 volt_services = VOLTService.get_service_objects().all()
16 if volt_services:
17 return volt_services[0].id
18 return None
19
20class VOLTTenantForAPI(VOLTTenant):
21 class Meta:
22 proxy = True
23 app_label = "cord"
24
25 @property
26 def subscriber(self):
27 return self.subscriber_root.id
28
29 @subscriber.setter
30 def subscriber(self, value):
31 self.subscriber_root = value # CordSubscriberRoot.get_tenant_objects().get(id=value)
32
33 @property
34 def related(self):
35 related = {}
36 if self.vcpe:
37 related["vsg_id"] = self.vcpe.id
38 if self.vcpe.instance:
39 related["instance_id"] = self.vcpe.instance.id
40 related["instance_name"] = self.vcpe.instance.name
41 related["wan_container_ip"] = self.vcpe.wan_container_ip
42 if self.vcpe.instance.node:
43 related["compute_node_name"] = self.vcpe.instance.node.name
44 return related
45
46class VOLTTenantSerializer(PlusModelSerializer):
47 id = ReadOnlyField()
48 service_specific_id = serializers.CharField(required=False)
49 s_tag = serializers.CharField()
50 c_tag = serializers.CharField()
51 subscriber = serializers.PrimaryKeyRelatedField(queryset=CordSubscriberRoot.get_tenant_objects().all(), required=False)
52 related = serializers.DictField(required=False)
53
54 property_fields=["subscriber"]
55
56 humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
57 class Meta:
58 model = VOLTTenantForAPI
59 fields = ('humanReadableName', 'id', 'service_specific_id', 's_tag', 'c_tag', 'subscriber', 'related' )
60
61 def getHumanReadableName(self, obj):
62 return obj.__unicode__()
63
64class VOLTTenantViewSet(XOSViewSet):
65 base_name = "volt"
66 method_name = "volt"
67 method_kind = "viewset"
68 queryset = VOLTTenantForAPI.get_tenant_objects().all() # select_related().all()
69 serializer_class = VOLTTenantSerializer
70
71 @classmethod
72 def get_urlpatterns(self, api_path="^"):
73 patterns = super(VOLTTenantViewSet, self).get_urlpatterns(api_path=api_path)
74
75 return patterns
76
77 def list(self, request):
78 queryset = self.filter_queryset(self.get_queryset())
79
80 c_tag = self.request.query_params.get('c_tag', None)
81 if c_tag is not None:
82 ids = [x.id for x in queryset if x.get_attribute("c_tag", None)==c_tag]
83 queryset = queryset.filter(id__in=ids)
84
85 s_tag = self.request.query_params.get('s_tag', None)
86 if s_tag is not None:
87 ids = [x.id for x in queryset if x.get_attribute("s_tag", None)==s_tag]
88 queryset = queryset.filter(id__in=ids)
89
90 serializer = self.get_serializer(queryset, many=True)
91
92 return Response(serializer.data)
93
94
95
96
97