return backend status in sliceplus object
authorScott Baker <smbaker@gmail.com>
Thu, 28 Aug 2014 21:02:54 +0000 (14:02 -0700)
committerScott Baker <smbaker@gmail.com>
Thu, 28 Aug 2014 21:02:54 +0000 (14:02 -0700)
planetstack/core/xoslib/methods/plus.py [new file with mode: 0644]
planetstack/core/xoslib/methods/sliceplus.py
planetstack/core/xoslib/objects/plus.py [new file with mode: 0644]
planetstack/core/xoslib/objects/sliceplus.py

diff --git a/planetstack/core/xoslib/methods/plus.py b/planetstack/core/xoslib/methods/plus.py
new file mode 100644 (file)
index 0000000..1e4cdf5
--- /dev/null
@@ -0,0 +1,22 @@
+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()
+
index f990275..bb93dc6 100644 (file)
@@ -6,8 +6,9 @@ from rest_framework import generics
 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
@@ -20,7 +21,7 @@ class SlicePlusIdSerializer(serializers.ModelSerializer):
 \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()
diff --git a/planetstack/core/xoslib/objects/plus.py b/planetstack/core/xoslib/objects/plus.py
new file mode 100644 (file)
index 0000000..f183f33
--- /dev/null
@@ -0,0 +1,22 @@
+""" 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())
+
index 2542fd7..a5d7a7e 100644 (file)
@@ -1,6 +1,7 @@
 from core.models.slice import Slice
+from plus import PlusObjectMixin
 
-class SlicePlus(Slice):
+class SlicePlus(Slice, PlusObjectMixin):
     class Meta:
         proxy = True