X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fcore%2Fxoslib%2Fxoslib.py;h=b8866c4732d6fee7a913e9a1d502b82cb5a895d2;hb=1a6473c0a601c61aee884bbe466de72d3aeba9c0;hp=53d8b28dc6679b8a3674a9df99d6e951cdeeb792;hpb=9a27092424dc11c9b4ddd93fd9a0b261946e7426;p=plstackapi.git 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')