From 1a6473c0a601c61aee884bbe466de72d3aeba9c0 Mon Sep 17 00:00:00 2001 From: Scott Baker Date: Mon, 7 Jul 2014 10:14:04 -0700 Subject: [PATCH] xoslib second prototype --- planetstack/core/xoslib/__init__.py | 1 + planetstack/core/xoslib/objects/__init__.py | 12 +++ planetstack/core/xoslib/objects/nodes.py | 19 +++++ planetstack/core/xoslib/objects/sites.py | 20 +++++ planetstack/core/xoslib/objects/slices.py | 19 +++++ planetstack/core/xoslib/objects/slivers.py | 18 +++++ planetstack/core/xoslib/objects/xosbase.py | 21 ++++++ planetstack/core/xoslib/xoslib.py | 83 ++------------------- 8 files changed, 116 insertions(+), 77 deletions(-) create mode 100644 planetstack/core/xoslib/__init__.py create mode 100644 planetstack/core/xoslib/objects/__init__.py create mode 100644 planetstack/core/xoslib/objects/nodes.py create mode 100644 planetstack/core/xoslib/objects/sites.py create mode 100644 planetstack/core/xoslib/objects/xosbase.py diff --git a/planetstack/core/xoslib/__init__.py b/planetstack/core/xoslib/__init__.py new file mode 100644 index 0000000..f71ac5d --- /dev/null +++ b/planetstack/core/xoslib/__init__.py @@ -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 index 0000000..5387bfe --- /dev/null +++ b/planetstack/core/xoslib/objects/__init__.py @@ -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 index 0000000..fedd0b0 --- /dev/null +++ b/planetstack/core/xoslib/objects/nodes.py @@ -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 index 0000000..7146320 --- /dev/null +++ b/planetstack/core/xoslib/objects/sites.py @@ -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 + diff --git a/planetstack/core/xoslib/objects/slices.py b/planetstack/core/xoslib/objects/slices.py index 139597f..04a04f2 100644 --- a/planetstack/core/xoslib/objects/slices.py +++ b/planetstack/core/xoslib/objects/slices.py @@ -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 diff --git a/planetstack/core/xoslib/objects/slivers.py b/planetstack/core/xoslib/objects/slivers.py index 139597f..1428908 100644 --- a/planetstack/core/xoslib/objects/slivers.py +++ b/planetstack/core/xoslib/objects/slivers.py @@ -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 index 0000000..881c7b5 --- /dev/null +++ b/planetstack/core/xoslib/objects/xosbase.py @@ -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 + diff --git a/planetstack/core/xoslib/xoslib.py b/planetstack/core/xoslib/xoslib.py index 53d8b28..b8866c4 100644 --- a/planetstack/core/xoslib/xoslib.py +++ b/planetstack/core/xoslib/xoslib.py @@ -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') -- 2.43.0