--- /dev/null
+from rest_framework import serializers
+
+""" PlusSerializerMixin
+
+ Implements Serializer fields that are common to all OpenCloud objects. For
+ example, stuff related to backend fields.
+"""
+\r
+class PlusSerializerMixin():
+ backendIcon = serializers.SerializerMethodField("getBackendIcon")
+ backendHtml = serializers.SerializerMethodField("getBackendHtml")
+
+ # This will cause a descendant class to pull in the methods defined
+ # above. See rest_framework/serializers.py: _get_declared_fields().
+ base_fields = {"backendIcon": backendIcon, "backendHtml": backendHtml}
+
+ def getBackendIcon(self, obj):
+ return obj.getBackendIcon()
+
+ def getBackendHtml(self, obj):
+ return obj.getBackendHtml()
+
from core.models import *\r
from django.forms import widgets
from core.xoslib.objects.sliceplus import SlicePlus
+from plus import PlusSerializerMixin
-class SlicePlusIdSerializer(serializers.ModelSerializer):
+class SlicePlusIdSerializer(serializers.ModelSerializer, PlusSerializerMixin):
id = serializers.Field()\r
\r
sliceInfo = serializers.SerializerMethodField("getSliceInfo")\r
\r
class Meta:\r
model = SlicePlus\r
- fields = ('id','created','updated','enacted','name','enabled','omf_friendly','description','slice_url','site','max_slivers','imagePreference','service','network','mountDataSets','serviceClass','creator','networks','availableNetworks','sliceInfo')
+ fields = ('id','created','updated','enacted','name','enabled','omf_friendly','description','slice_url','site','max_slivers','imagePreference','service','network','mountDataSets','serviceClass','creator','networks','availableNetworks','sliceInfo','backendIcon','backendHtml')
class SlicePlusList(generics.ListCreateAPIView):
queryset = SlicePlus.objects.select_related().all()
--- /dev/null
+""" PlusObjectMixin
+
+ Implements fields that are common to all OpenCloud objects. For example,
+ stuff related to backend icons.
+"""
+
+class PlusObjectMixin:
+ def getBackendIcon(self):
+ if (self.enacted is not None) and self.enacted >= self.updated:
+ return "/static/admin/img/icon_success.gif"
+ else:
+ if self.backend_status == "Provisioning in progress" or self.backend_status=="":
+ return "/static/admin/img/icon_clock.gif"
+ else:
+ return "/static/admin/img/icon_error.gif"
+
+ def getBackendHtml(self):
+ if (self.enacted is not None) and self.enacted >= self.updated:
+ return '<img src="%s">' % self.getBackendIcon()
+ else:
+ return '<div title="%s"><img src="%s"></div>' % (self.backend_status, self.getBackendIcon())
+
from core.models.slice import Slice
+from plus import PlusObjectMixin
-class SlicePlus(Slice):
+class SlicePlus(Slice, PlusObjectMixin):
class Meta:
proxy = True