Re-implemented REST API and urls.
[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 RoleSerializer(serializers.HyperlinkedModelSerializer):
7     # HyperlinkedModelSerializer doesn't include the id by default
8     id = serializers.Field()
9     class Meta:
10         model = Role
11         fields = ('id', 
12                   'role',
13                   'role_type')
14
15
16 class UserSerializer(serializers.HyperlinkedModelSerializer):
17     # HyperlinkedModelSerializer doesn't include the id by default
18     id = serializers.Field()
19     site = serializers.HyperlinkedRelatedField(view_name='site-detail')
20     slice_memberships = serializers.HyperlinkedRelatedField(view_name='slice-membership-detail')
21     site_privileges = serializers.HyperlinkedRelatedField(view_name='siteprivilege-detail')
22     class Meta:
23         model = User
24         fields = ('id',
25                   'kuser_id', 
26                   'firstname', 
27                   'lastname',
28                   'email', 
29                   'password',
30                   'phone',
31                   'public_key', 
32                   'user_url',
33                   'is_admin',
34                   'site',
35                   'slice_memberships',
36                   'site_privileges')
37                     
38 class SliceSerializer(serializers.HyperlinkedModelSerializer):
39     # HyperlinkedModelSerializer doesn't include the id by default
40     id = serializers.Field()
41     site = serializers.HyperlinkedRelatedField(view_name='site-detail')
42     slivers = serializers.HyperlinkedRelatedField(view_name='sliver-detail')
43     class Meta:
44         model = Slice
45         fields = ('id',
46                   'tenant_id',
47                   'enabled',
48                   'name',
49                   'url',
50                   'omf_friendly',
51                   'description',
52                   'slice_url',
53                   'network_id',
54                   'router_id',
55                   'subnet_id',
56                   'site',
57                   'slivers',
58                   'updated',
59                   'created')
60
61 class SliceMembershipSerializer(serializers.HyperlinkedModelSerializer):
62     id = serializers.Field()
63     slice = serializers.HyperlinkedRelatedField(view_name='slice-detail')
64     user = serializers.HyperlinkedRelatedField(view_name='user-detail')
65     role = serializers.HyperlinkedRelatedField(view_name='role-detail')
66     class Meta:
67         model = SliceMembership
68         fields = ('id',
69                   'user',
70                   'slice',
71                   'role')
72
73 class SiteSerializer(serializers.HyperlinkedModelSerializer):
74
75     #Experimenting with whether to use ids, hyperlinks, or nested includes
76     #slices = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
77     #slices = serializers.RelatedField(many=True, read_only=True)
78     #slices = SliceSerializer(many=True)
79     # HyperlinkedModelSerializer doesn't include the id by default
80     id = serializers.Field()
81     slices = serializers.HyperlinkedRelatedField(many=True, read_only=True,view_name='slice-detail')
82
83     class Meta:
84         model = Site
85         fields = ('id',
86                   'url',
87                   'name',
88                   'slices',
89                   'site_url',
90                   'enabled',
91                   'longitude',
92                   'latitude',
93                   'login_base',
94                   'tenant_id',
95                   'is_public',
96                   'abbreviated_name',
97                   'updated',
98                   'created')
99
100 class SitePrivilegeSerializer(serializers.HyperlinkedModelSerializer):
101     id = serializers.Field()
102     site = serializers.HyperlinkedRelatedField(view_name='site-detail')
103     user = serializers.HyperlinkedRelatedField(view_name='user-detail')
104     role = serializers.HyperlinkedRelatedField(view_name='role-detail')
105     class Meta:
106         model = SitePrivilege
107         fields = ('id',
108                   'user',
109                   'site',
110                   'role')
111
112 class DeploymentSerializer(serializers.HyperlinkedModelSerializer):
113
114     # HyperlinkedModelSerializer doesn't include the id by default
115     id = serializers.Field()
116     sites = serializers.HyperlinkedRelatedField(view_name='site-detail')
117     class Meta:
118         model = Deployment
119         fields = ('id',
120                   'name',
121                   'sites'
122                  )
123
124 class SliverSerializer(serializers.HyperlinkedModelSerializer):
125     # HyperlinkedModelSerializer doesn't include the id by default
126     id = serializers.Field()
127     image = serializers.HyperlinkedRelatedField(view_name='image-detail')
128     slice = serializers.HyperlinkedRelatedField(view_name='slice-detail')
129     deployment = serializers.HyperlinkedRelatedField(view_name='deployment-detail')
130     node = serializers.HyperlinkedRelatedField(view_name='node-detail')
131     
132     
133     #slice = serializers.PrimaryKeyRelatedField(read_only=True)
134
135     class Meta:
136         model = Sliver
137         fields = ('id',
138                   'instance_id',
139                   'name',
140                   'instance_name',
141                   'ip',
142                   'image',
143                   'slice',
144                   'deployment',
145                   'node')
146
147 class NodeSerializer(serializers.HyperlinkedModelSerializer):
148     # HyperlinkedModelSerializer doesn't include the id by default
149     id = serializers.Field()
150     class Meta:
151         model = Node
152         fields = ('id',
153                  'name')
154
155 class ImageSerializer(serializers.HyperlinkedModelSerializer):
156     # HyperlinkedModelSerializer doesn't include the id by default
157     id = serializers.Field()
158     class Meta:
159         model = Image
160         fields = ('id',
161                   'image_id',
162                   'name',
163                   'disk_format',
164                   'container_format')
165
166 serializerLookUp = { 
167                  Role: RoleSerializer,
168                  User: UserSerializer,
169                  Site: SiteSerializer,
170                  SitePrivilege: SitePrivilegeSerializer,
171                  Slice: SliceSerializer,
172                  SliceMembership: SliceMembershipSerializer,
173                  Node: NodeSerializer,
174                  Sliver: SliverSerializer,
175                  Deployment: DeploymentSerializer,
176                  Image: ImageSerializer,
177                  None: None,
178                 }
179