xoslib second prototype
authorScott Baker <smbaker@gmail.com>
Mon, 7 Jul 2014 17:14:04 +0000 (10:14 -0700)
committerScott Baker <smbaker@gmail.com>
Mon, 7 Jul 2014 17:14:04 +0000 (10:14 -0700)
planetstack/core/xoslib/__init__.py [new file with mode: 0644]
planetstack/core/xoslib/objects/__init__.py [new file with mode: 0644]
planetstack/core/xoslib/objects/nodes.py [new file with mode: 0644]
planetstack/core/xoslib/objects/sites.py [new file with mode: 0644]
planetstack/core/xoslib/objects/slices.py
planetstack/core/xoslib/objects/slivers.py
planetstack/core/xoslib/objects/xosbase.py [new file with mode: 0644]
planetstack/core/xoslib/xoslib.py

diff --git a/planetstack/core/xoslib/__init__.py b/planetstack/core/xoslib/__init__.py
new file mode 100644 (file)
index 0000000..f71ac5d
--- /dev/null
@@ -0,0 +1 @@
+from .xoslib import *
diff --git a/planetstack/core/xoslib/objects/__init__.py b/planetstack/core/xoslib/objects/__init__.py
new file mode 100644 (file)
index 0000000..5387bfe
--- /dev/null
@@ -0,0 +1,12 @@
+from .slivers import XOSSlivers
+from .sites import XOSSites
+from .nodes import XOSNodes
+from .slices import XOSSlices
+
+XOSLIB_OBJECTS = {}
+
+XOSLIB_OBJECTS[XOSSlivers.name] = XOSSlivers
+XOSLIB_OBJECTS[XOSSites.name] = XOSSites
+XOSLIB_OBJECTS[XOSNodes.name] = XOSNodes
+XOSLIB_OBJECTS[XOSSlices.name] = XOSSlices
+
diff --git a/planetstack/core/xoslib/objects/nodes.py b/planetstack/core/xoslib/objects/nodes.py
new file mode 100644 (file)
index 0000000..fedd0b0
--- /dev/null
@@ -0,0 +1,19 @@
+from core.models import Node
+from xosbase import XOSBase
+from django.forms.models import model_to_dict
+
+class XOSNodes(XOSBase):
+    name = "nodes"
+
+    def __init__(self):
+         super(XOSNodes, self).__init__()
+
+    def get(self):
+        allNodes = list(Node.objects.all())
+
+        result = []
+        for nocd in allNodes:
+            d=model_to_dict(nocd)
+            result.append(self.ensure_serializable(d))
+
+        return result
diff --git a/planetstack/core/xoslib/objects/sites.py b/planetstack/core/xoslib/objects/sites.py
new file mode 100644 (file)
index 0000000..7146320
--- /dev/null
@@ -0,0 +1,20 @@
+from core.models import Site
+from xosbase import XOSBase
+from django.forms.models import model_to_dict
+
+class XOSSites(XOSBase):
+    name = "sites"
+
+    def __init__(self):
+         super(XOSSites, self).__init__()
+
+    def get(self):
+        allSites = list(Site.objects.all())
+
+        result = []
+        for site in allSites:
+            d=model_to_dict(site)
+            result.append(self.ensure_serializable(d))
+
+        return result
+
index 139597f..04a04f2 100644 (file)
@@ -1,2 +1,21 @@
+from core.models import Slice
+from xosbase import XOSBase
+from django.forms.models import model_to_dict
+
+class XOSSlices(XOSBase):
+    name = "slices"
+
+    def __init__(self):
+         super(XOSSlices, self).__init__()
+
+    def get(self):
+        allSlices = list(Slice.objects.all())
+
+        result = []
+        for slice in allSlices:
+            d = model_to_dict(slice)
+            result.append(self.ensure_serializable(d))
+
+        return result
 
 
index 139597f..1428908 100644 (file)
@@ -1,2 +1,20 @@
+from core.models import Sliver
+from xosbase import XOSBase
+from django.forms.models import model_to_dict
 
+class XOSSlivers(XOSBase):
+    name = "slivers"
+
+    def __init__(self):
+         super(XOSSlivers, self).__init__()
+
+    def get(self):
+        allSlivers = list(Sliver.objects.all())
+
+        result = []
+        for sliver in allSlivers:
+            d=model_to_dict(sliver)
+            result.append(self.ensure_serializable(d))
+
+        return result
 
diff --git a/planetstack/core/xoslib/objects/xosbase.py b/planetstack/core/xoslib/objects/xosbase.py
new file mode 100644 (file)
index 0000000..881c7b5
--- /dev/null
@@ -0,0 +1,21 @@
+import datetime
+import time
+
+class XOSBase(object):
+    name = "XOSBase"
+
+    def __init__(self):
+        pass
+
+    def ensure_serializable(self, d):
+        d2={}
+        for (k,v) in d.items():
+            # datetime is not json serializable
+            if isinstance(v, datetime.datetime):
+                d2[k] = time.mktime(v.timetuple())
+            elif v.__class__.__name__ == "Geoposition":
+                pass
+            else:
+                d2[k] = v
+        return d2
+
index 53d8b28..b8866c4 100644 (file)
@@ -6,85 +6,14 @@ import time
 import json
 from django.http import HttpResponse, HttpResponseServerError, HttpResponseForbidden
 from django.views.generic import TemplateView, View
-from core.models import *
 from django.forms.models import model_to_dict
+from objects import XOSLIB_OBJECTS
 
-def ensure_serializable(d):
-    d2={}
-    for (k,v) in d.items():
-        # datetime is not json serializable
-        if isinstance(v, datetime.datetime):
-            d2[k] = time.mktime(v.timetuple())
-        elif v.__class__.__name__ == "Geoposition":
-            pass
+class XOSLibDataView(View):
+    def get(self, request,  name="hello_world", **kwargs):
+        if name in XOSLIB_OBJECTS:
+            result = XOSLIB_OBJECTS[name]().get()
         else:
-            d2[k] = v
-    return d2
-
-def sliver_to_dict(sliver):
-    d = model_to_dict(sliver)
-    d["slice_id"] = sliver.slice.id
-    d["node_id"] = sliver.node.id
-    return d
-
-def slice_to_dict(slice):
-    d = model_to_dict(slice)
-    d["slivers"] = [sliver_to_dict(x) for x in slice.slivers]
-    return d
-
-def node_to_dict(node):
-    d = model_to_dict(node)
-    d["slivers"] = []
-
-
-class OpenCloudData:
-    def __init__(self, user):
-        self.loadAll()
-
-    def loadAll(self):
-        self.allNodes = list(Node.objects.all())
-        self.allSlices = list(Slice.objects.all())
-        self.allSlivers = list(Sliver.objects.all())
-        self.allSites = list(Site.objects.all())
-
-        self.site_id = {}
-        for site in self.allSites:
-            d = model_to_dict(site)
-            d["node_ids"] = []
-            d["slice_ids"] = []
-            self.site_id[site.id] = ensure_serializable(d)
-
-        self.node_id = {}
-        for node in self.allNodes:
-            d = model_to_dict(node)
-            d["sliver_ids"] = []
-            self.node_id[node.id] = ensure_serializable(d)
-            self.site_id[node.site_id]["node_ids"].append(node.id)
-
-        self.slice_id = {}
-        for slice in self.allSlices:
-            d = model_to_dict(slice)
-            d["sliver_ids"] = []
-            self.slice_id[slice.id] = ensure_serializable(d)
-            self.site_id[slice.site_id]["slice_ids"].append(site.id)
-
-        self.sliver_id = {}
-        for sliver in self.allSlivers:
-            self.sliver_id[sliver.id] = model_to_dict(sliver)
-
-            self.slice_id[sliver.slice_id]["sliver_ids"].append(sliver.id)
-            self.node_id[sliver.node_id]["sliver_ids"].append(sliver.id)
-
-    def get_opencloud_data(self):
-        return {"slices": self.slice_id.values(),
-                "slivers": self.sliver_id.values(),
-                "nodes": self.node_id.values(),
-                "sites": self.site_id.values()}
-
-class ShellDataView(View):
-    url = r'^shelldata/'
-
-    def get(self, request, **kwargs):
-        result = OpenCloudData(request.user).get_opencloud_data()
+            raise ValueError("Unknown object %s" % name)
 
         return HttpResponse(json.dumps(result), mimetype='application/json')