blob: 294fba86ce2135add33b631c02a8aea461b1beb1 [file] [log] [blame]
Scott Baker03696ee2015-01-11 13:45:19 -08001from rest_framework import generics
Scott Bakere791dc62014-08-28 14:02:54 -07002from rest_framework import serializers
Scott Baker03696ee2015-01-11 13:45:19 -08003from rest_framework.response import Response
4from rest_framework import status
Scott Baker6e33ea32015-02-16 23:46:01 -08005from xos.apibase import XOSRetrieveUpdateDestroyAPIView, XOSListCreateAPIView
Scott Baker012c54b2015-12-08 19:27:50 -08006from rest_framework import viewsets
7from django.conf.urls import patterns, url
Scott Bakere791dc62014-08-28 14:02:54 -07008
9""" PlusSerializerMixin
10
11 Implements Serializer fields that are common to all OpenCloud objects. For
12 example, stuff related to backend fields.
13"""
S.Çağlar Onurb6e63f02015-02-24 17:28:09 -050014
Scott Bakere791dc62014-08-28 14:02:54 -070015class PlusSerializerMixin():
16 backendIcon = serializers.SerializerMethodField("getBackendIcon")
17 backendHtml = serializers.SerializerMethodField("getBackendHtml")
18
19 # This will cause a descendant class to pull in the methods defined
20 # above. See rest_framework/serializers.py: _get_declared_fields().
21 base_fields = {"backendIcon": backendIcon, "backendHtml": backendHtml}
Scott Bakere5e44eb2014-12-23 11:04:27 -080022 # Rest_framework 3.0 uses _declared_fields instead of base_fields
23 _declared_fields = {"backendIcon": backendIcon, "backendHtml": backendHtml}
Scott Bakere791dc62014-08-28 14:02:54 -070024
25 def getBackendIcon(self, obj):
26 return obj.getBackendIcon()
27
28 def getBackendHtml(self, obj):
29 return obj.getBackendHtml()
30
Scott Baker012c54b2015-12-08 19:27:50 -080031class XOSViewSet(viewsets.ModelViewSet):
32 @classmethod
33 def detail_url(self, pattern, viewdict, name):
34 return url(r'^' + self.method_name + r'/(?P<pk>[a-zA-Z0-9\-]+)/' + pattern,
35 self.as_view(viewdict),
36 name=self.base_name+"_"+name)
Scott Bakerbd46a922015-02-03 15:02:17 -080037
Scott Baker012c54b2015-12-08 19:27:50 -080038 @classmethod
39 def list_url(self, pattern, viewdict, name):
40 return url(r'^' + self.method_name + r'/' + pattern,
41 self.as_view(viewdict),
42 name=self.base_name+"_"+name)
Scott Bakerbd46a922015-02-03 15:02:17 -080043
Scott Baker012c54b2015-12-08 19:27:50 -080044 @classmethod
45 def get_urlpatterns(self):
46 patterns = []
Scott Baker77eba942015-01-12 12:57:22 -080047
Scott Baker012c54b2015-12-08 19:27:50 -080048 patterns.append(url(r'^' + self.method_name + '/$', self.as_view({'get': 'list'}), name=self.base_name+'_list'))
49 patterns.append(url(r'^' + self.method_name + '/(?P<pk>[a-zA-Z0-9\-]+)/$', self.as_view({'get': 'retrieve', 'put': 'update', 'post': 'update', 'delete': 'destroy', 'patch': 'partial_update'}), name=self.base_name+'_detail'))
Scott Baker03696ee2015-01-11 13:45:19 -080050
Scott Baker012c54b2015-12-08 19:27:50 -080051 return patterns