Django-suit, add in Roles for specific classes site, slice, deployment, planetstack...
[plstackapi.git] / planetstack / core / serializers.py
1 from django.forms import widgets
2 from rest_framework import serializers
3 from core.models import *
4
5
6 class DeploymentSerializer(serializers.HyperlinkedModelSerializer):
7
8     # HyperlinkedModelSerializer doesn't include the id by default
9     id = serializers.Field()
10     sites = serializers.HyperlinkedRelatedField(view_name='site-detail')
11     class Meta:
12         model = Deployment
13         fields = ('id',
14                   'url',
15                   'name',
16                   'sites'
17                  )
18
19 class ImageSerializer(serializers.HyperlinkedModelSerializer):
20     # HyperlinkedModelSerializer doesn't include the id by default
21     id = serializers.Field()
22     class Meta:
23         model = Image
24         fields = ('id',
25                   'url',
26                   'image_id',
27                   'name',
28                   'disk_format',
29                   'container_format')
30
31 class NodeSerializer(serializers.HyperlinkedModelSerializer):
32     # HyperlinkedModelSerializer doesn't include the id by default
33     id = serializers.Field()
34     class Meta:
35         model = Node
36         fields = ('id',
37                  'url',
38                  'name')
39
40 class ProjectSerializer(serializers.HyperlinkedModelSerializer):
41     # HyperlinkedModelSerializer doesn't include the id by default
42     id = serializers.Field()
43     class Meta:
44         model = Project
45         fields = ('id',
46                  'url',
47                  'name')
48
49 class ReservationSerializer(serializers.HyperlinkedModelSerializer):
50     # HyperlinkedModelSerializer doesn't include the id by default
51     id = serializers.Field()
52     class Meta:
53         model = Reservation
54         fields = ('id',
55                  'url',
56                  'startTime',
57                  'slice',
58                  'duration',
59                  'endTime',
60                  )
61
62 class RoleSerializer(serializers.HyperlinkedModelSerializer):
63     # HyperlinkedModelSerializer doesn't include the id by default
64     id = serializers.Field()
65     class Meta:
66         model = Role
67         fields = ('id', 
68                  'url',
69                  'role',
70                  'role_type')
71
72
73 class ServiceClassSerializer(serializers.HyperlinkedModelSerializer):
74     # HyperlinkedModelSerializer doesn't include the id by default
75     id = serializers.Field()
76     class Meta:
77         model = ServiceClass
78         fields = ('id',
79                  'url',
80                  'name',
81                  'description',
82                  'commitment',
83                  'membershipFee',
84                  'membershipFeeMonths',
85                  'upgradeRequiresApproval',
86                  'upgradeFrom',
87                  )
88
89 class ServiceResourceSerializer(serializers.HyperlinkedModelSerializer):
90     # HyperlinkedModelSerializer doesn't include the id by default
91     id = serializers.Field()
92     serviceClass = serializers.HyperlinkedRelatedField(view_name='serviceclass-detail')
93     class Meta:
94         model = ServiceResource
95         fields = ('id',
96                  'url',
97                  'name',
98                  'serviceClass',
99                  'maxUnitsDeployment',
100                  'maxUnitsNode',
101                  'maxDuration',
102                  'bucketInRate',
103                  'bucketMaxSize',
104                  'cost',
105                  'calendarReservable',
106                  )
107
108 class SliceSerializer(serializers.HyperlinkedModelSerializer):
109     # HyperlinkedModelSerializer doesn't include the id by default
110     id = serializers.Field()
111     site = serializers.HyperlinkedRelatedField(view_name='site-detail')
112     slivers = serializers.HyperlinkedRelatedField(view_name='sliver-detail')
113     class Meta:
114         model = Slice
115         fields = ('id',
116                   'url',
117                   'tenant_id',
118                   'enabled',
119                   'name',
120                   'url',
121                   'omf_friendly',
122                   'description',
123                   'slice_url',
124                   'network_id',
125                   'router_id',
126                   'subnet_id',
127                   'site',
128                   'slivers',
129                   'updated',
130                   'created')
131
132 class SlicePrivilegeSerializer(serializers.HyperlinkedModelSerializer):
133     id = serializers.Field()
134     slice = serializers.HyperlinkedRelatedField(view_name='slice-detail')
135     user = serializers.HyperlinkedRelatedField(view_name='user-detail')
136     role = serializers.HyperlinkedRelatedField(view_name='role-detail')
137     class Meta:
138         model = SlicePrivilege
139         fields = ('id',
140                   'url',
141                   'user',
142                   'slice',
143                   'role')
144
145 class SiteSerializer(serializers.HyperlinkedModelSerializer):
146
147     #Experimenting with whether to use ids, hyperlinks, or nested includes
148     #slices = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
149     #slices = serializers.RelatedField(many=True, read_only=True)
150     #slices = SliceSerializer(many=True)
151     # HyperlinkedModelSerializer doesn't include the id by default
152     id = serializers.Field()
153     slices = serializers.HyperlinkedRelatedField(many=True, read_only=True,view_name='slice-detail')
154
155     class Meta:
156         model = Site
157         fields = ('id',
158                   'url',
159                   'name',
160                   'slices',
161                   'site_url',
162                   'enabled',
163                   'longitude',
164                   'latitude',
165                   'login_base',
166                   'tenant_id',
167                   'is_public',
168                   'abbreviated_name',
169                   'updated',
170                   'created')
171
172 class SitePrivilegeSerializer(serializers.HyperlinkedModelSerializer):
173     id = serializers.Field()
174     site = serializers.HyperlinkedRelatedField(view_name='site-detail')
175     user = serializers.HyperlinkedRelatedField(view_name='user-detail')
176     role = serializers.HyperlinkedRelatedField(view_name='role-detail')
177     class Meta:
178         model = SitePrivilege
179         fields = ('id',
180                   'url',
181                   'user',
182                   'site',
183                   'role')
184
185 class SliverSerializer(serializers.HyperlinkedModelSerializer):
186     # HyperlinkedModelSerializer doesn't include the id by default
187     id = serializers.Field()
188     image = serializers.HyperlinkedRelatedField(view_name='image-detail')
189     slice = serializers.HyperlinkedRelatedField(view_name='slice-detail')
190     deploymentNetwork = serializers.HyperlinkedRelatedField(view_name='deployment-detail')
191     node = serializers.HyperlinkedRelatedField(view_name='node-detail')
192     
193     #slice = serializers.PrimaryKeyRelatedField(read_only=True)
194
195     class Meta:
196         model = Sliver
197         fields = ('id',
198                   'url',
199                   'instance_id',
200                   'name',
201                   'instance_name',
202                   'ip',
203                   'image',
204                   'slice',
205                   'deploymentNetwork',
206                   'node')
207
208 class UserSerializer(serializers.HyperlinkedModelSerializer):
209     # HyperlinkedModelSerializer doesn't include the id by default
210     id = serializers.Field()
211     site = serializers.HyperlinkedRelatedField(view_name='site-detail')
212     slice_privileges = serializers.HyperlinkedRelatedField(view_name='sliceprivilege-detail')
213     site_privileges = serializers.HyperlinkedRelatedField(view_name='siteprivilege-detail')
214     class Meta:
215         model = User
216         fields = ('id',
217                   'url',
218                   'kuser_id', 
219                   'firstname', 
220                   'lastname',
221                   'email', 
222                   'password',
223                   'phone',
224                   'public_key', 
225                   'user_url',
226                   'is_admin',
227                   'slice_privileges',
228                   'site_privileges')
229                     
230 class TagSerializer(serializers.HyperlinkedModelSerializer):
231     # HyperlinkedModelSerializer doesn't include the id by default
232     id = serializers.Field()
233     project = serializers.HyperlinkedRelatedField(view_name='project-detail')
234     #content_type = serializers.PrimaryKeyRelatedField(read_only=True)
235     content_type = serializers.RelatedField(source = "content_type")
236     content_object = serializers.RelatedField(source='content_object')
237     class Meta:
238         model = Tag
239         fields = ('id', 
240                   'url',
241                   'project',
242                   'value',
243                   'content_type',
244                   'object_id',
245                   'content_object',
246                   'name')
247
248 serializerLookUp = { 
249                  Deployment: DeploymentSerializer,
250                  Image: ImageSerializer,
251                  Node: NodeSerializer,
252                  Project: ProjectSerializer,
253                  Reservation: ReservationSerializer,
254                  Role: RoleSerializer,
255                  ServiceClass: ServiceClassSerializer,
256                  ServiceResource: ServiceResourceSerializer,
257                  Site: SiteSerializer,
258                  SitePrivilege: SitePrivilegeSerializer,
259                  Slice: SliceSerializer,
260                  SlicePrivilege: SlicePrivilegeSerializer,
261                  Sliver: SliverSerializer,
262                  Tag: TagSerializer,
263                  User: UserSerializer,
264                  None: None,
265                 }
266