blob: 69156af4b7d98c522b18dfceeb2b1d0c21137b29 [file] [log] [blame]
Scott Baker3a055582016-03-25 10:55:03 -07001from rest_framework import generics
2from rest_framework import serializers
3from rest_framework.response import Response
4from rest_framework import status
5from xos.apibase import XOSRetrieveUpdateDestroyAPIView, XOSListCreateAPIView
6from rest_framework import viewsets
7from django.conf.urls import patterns, url
8
9""" PlusSerializerMixin
10
11 Implements Serializer fields that are common to all OpenCloud objects. For
12 example, stuff related to backend fields.
13"""
14
15class 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}
22 # Rest_framework 3.0 uses _declared_fields instead of base_fields
23 _declared_fields = {"backendIcon": backendIcon, "backendHtml": backendHtml}
24
25 def getBackendIcon(self, obj):
26 return obj.getBackendIcon()
27
28 def getBackendHtml(self, obj):
29 return obj.getBackendHtml()
30
31class XOSViewSet(viewsets.ModelViewSet):
Scott Baker40fa2302016-03-25 13:33:11 -070032 api_path=""
33
Scott Baker3a055582016-03-25 10:55:03 -070034 @classmethod
35 def detail_url(self, pattern, viewdict, name):
Scott Baker40fa2302016-03-25 13:33:11 -070036 return url(r'^' + self.api_path + self.method_name + r'/(?P<pk>[a-zA-Z0-9\-]+)/' + pattern,
Scott Baker3a055582016-03-25 10:55:03 -070037 self.as_view(viewdict),
38 name=self.base_name+"_"+name)
39
40 @classmethod
41 def list_url(self, pattern, viewdict, name):
Scott Baker40fa2302016-03-25 13:33:11 -070042 return url(r'^' + self.api_path + self.method_name + r'/' + pattern,
Scott Baker3a055582016-03-25 10:55:03 -070043 self.as_view(viewdict),
44 name=self.base_name+"_"+name)
45
46 @classmethod
Scott Baker40fa2302016-03-25 13:33:11 -070047 def get_urlpatterns(self, api_path=""):
48 self.api_path = api_path
49
Scott Baker3a055582016-03-25 10:55:03 -070050 patterns = []
51
Scott Baker40fa2302016-03-25 13:33:11 -070052 patterns.append(url(r'^' + self.api_path + self.method_name + '/$', self.as_view({'get': 'list'}), name=self.base_name+'_list'))
53 patterns.append(url(r'^' + self.api_path + 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 Baker3a055582016-03-25 10:55:03 -070054
55 return patterns