user's can't set/unset site in Login Details without the proper authorization
[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                   'imagePreference',
128                   'network',
129                   'mountDataSets',
130                   'site',
131                   'slivers',
132                   'updated',
133                   'created')
134
135 class SlicePrivilegeSerializer(serializers.HyperlinkedModelSerializer):
136     id = serializers.Field()
137     slice = serializers.HyperlinkedRelatedField(view_name='slice-detail')
138     user = serializers.HyperlinkedRelatedField(view_name='user-detail')
139     role = serializers.HyperlinkedRelatedField(view_name='role-detail')
140     class Meta:
141         model = SlicePrivilege
142         fields = ('id',
143                   'url',
144                   'user',
145                   'slice',
146                   'role')
147
148 class SiteSerializer(serializers.HyperlinkedModelSerializer):
149
150     #Experimenting with whether to use ids, hyperlinks, or nested includes
151     #slices = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
152     #slices = serializers.RelatedField(many=True, read_only=True)
153     #slices = SliceSerializer(many=True)
154     # HyperlinkedModelSerializer doesn't include the id by default
155     id = serializers.Field()
156     slices = serializers.HyperlinkedRelatedField(many=True, read_only=True,view_name='slice-detail')
157
158     class Meta:
159         model = Site
160         fields = ('id',
161                   'url',
162                   'name',
163                   'slices',
164                   'site_url',
165                   'enabled',
166                   'longitude',
167                   'latitude',
168                   'login_base',
169                   'tenant_id',
170                   'is_public',
171                   'abbreviated_name',
172                   'updated',
173                   'created')
174
175 class SitePrivilegeSerializer(serializers.HyperlinkedModelSerializer):
176     id = serializers.Field()
177     site = serializers.HyperlinkedRelatedField(view_name='site-detail')
178     user = serializers.HyperlinkedRelatedField(view_name='user-detail')
179     role = serializers.HyperlinkedRelatedField(view_name='role-detail')
180     class Meta:
181         model = SitePrivilege
182         fields = ('id',
183                   'url',
184                   'user',
185                   'site',
186                   'role')
187
188 class SliverSerializer(serializers.HyperlinkedModelSerializer):
189     # HyperlinkedModelSerializer doesn't include the id by default
190     id = serializers.Field()
191     image = serializers.HyperlinkedRelatedField(view_name='image-detail')
192     slice = serializers.HyperlinkedRelatedField(view_name='slice-detail')
193     deploymentNetwork = serializers.HyperlinkedRelatedField(view_name='deployment-detail')
194     node = serializers.HyperlinkedRelatedField(view_name='node-detail')
195     
196     #slice = serializers.PrimaryKeyRelatedField(read_only=True)
197
198     class Meta:
199         model = Sliver
200         fields = ('id',
201                   'url',
202                   'instance_id',
203                   'name',
204                   'instance_name',
205                   'ip',
206                   'image',
207                   'slice',
208                   'deploymentNetwork',
209                   'node')
210
211 class UserSerializer(serializers.HyperlinkedModelSerializer):
212     # HyperlinkedModelSerializer doesn't include the id by default
213     id = serializers.Field()
214     site = serializers.HyperlinkedRelatedField(view_name='site-detail')
215     slice_privileges = serializers.HyperlinkedRelatedField(view_name='sliceprivilege-detail')
216     site_privileges = serializers.HyperlinkedRelatedField(view_name='siteprivilege-detail')
217     class Meta:
218         model = User
219         fields = ('id',
220                   'url',
221                   'kuser_id', 
222                   'firstname', 
223                   'lastname',
224                   'email', 
225                   'password',
226                   'phone',
227                   'public_key', 
228                   'user_url',
229                   'is_admin',
230                   'slice_privileges',
231                   'site_privileges')
232                     
233 class TagSerializer(serializers.HyperlinkedModelSerializer):
234     # HyperlinkedModelSerializer doesn't include the id by default
235     id = serializers.Field()
236     project = serializers.HyperlinkedRelatedField(view_name='project-detail')
237     #content_type = serializers.PrimaryKeyRelatedField(read_only=True)
238     content_type = serializers.RelatedField(source = "content_type")
239     content_object = serializers.RelatedField(source='content_object')
240     class Meta:
241         model = Tag
242         fields = ('id', 
243                   'url',
244                   'project',
245                   'value',
246                   'content_type',
247                   'object_id',
248                   'content_object',
249                   'name')
250
251 serializerLookUp = { 
252                  Deployment: DeploymentSerializer,
253                  Image: ImageSerializer,
254                  Node: NodeSerializer,
255                  Project: ProjectSerializer,
256                  Reservation: ReservationSerializer,
257                  Role: RoleSerializer,
258                  ServiceClass: ServiceClassSerializer,
259                  ServiceResource: ServiceResourceSerializer,
260                  Site: SiteSerializer,
261                  SitePrivilege: SitePrivilegeSerializer,
262                  Slice: SliceSerializer,
263                  SlicePrivilege: SlicePrivilegeSerializer,
264                  Sliver: SliverSerializer,
265                  Tag: TagSerializer,
266                  User: UserSerializer,
267                  None: None,
268                 }
269