From: Ciro Scognamiglio Date: Fri, 28 Feb 2014 19:08:28 +0000 (+0100) Subject: Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into onelab X-Git-Tag: myslice-1.1~256^2~2 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=ed05804919d39c41003f2eac34d90e345cbf6aa6;hp=a596acd4a59e1117be69cc8c5cf38c79b222741e;p=myslice.git Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into onelab --- diff --git a/myslice/urls.py b/myslice/urls.py index bc8dad87..cc8b2592 100644 --- a/myslice/urls.py +++ b/myslice/urls.py @@ -67,6 +67,8 @@ urls = [ (r'^table/(?P[^/]+)/(?P[^/]+)?/?$', 'rest.dispatch'), (r'^datatable/(?P[^/]+)/(?P[^/]+)?/?$', 'rest.dispatch'), (r'^update/(?P[^/]+)/(?P[^/]+)?/?$', 'rest.update.dispatch'), + (r'^create/(?P[^/]+)/(?P[^/]+)?/?$', 'rest.create.dispatch'), + (r'^delete/(?P[^/]+)/(?P[^/]+)?/?$', 'rest.delete.dispatch'), # # #(r'^view/?', include('view.urls')), diff --git a/rest/__init__.py b/rest/__init__.py index d44d860d..fe5e2925 100644 --- a/rest/__init__.py +++ b/rest/__init__.py @@ -39,6 +39,9 @@ class objectRequest(object): self.request = request + # XXX TODO: What about the local: objects? + # Example: local:user (Manifold) is different from user (SFA GW) + if ((self.type == 'platform') or (self.type == 'testbed')) : self.type = 'local:platform' self.id = 'platform' diff --git a/rest/create.py b/rest/create.py new file mode 100644 index 00000000..eaad539d --- /dev/null +++ b/rest/create.py @@ -0,0 +1,68 @@ +from manifold.core.query import Query + +from django.views.generic.base import TemplateView +from django.shortcuts import render_to_response + +from unfold.loginrequired import LoginRequiredView +from django.http import HttpResponse + +from manifold.core.query import Query, AnalyzedQuery +from manifoldapi.manifoldapi import execute_query + +from string import join +import decimal +import datetime +import json + +# handles serialization of datetime in json +DateEncoder = lambda obj: obj.strftime("%B %d, %Y %H:%M:%S") if isinstance(obj, datetime.datetime) else None + +# support converting decimal in json +json.encoder.FLOAT_REPR = lambda o: format(o, '.2f') + +# handles decimal numbers serialization in json +class DecimalEncoder(json.JSONEncoder): + def _iterencode(self, o, markers=None): + if isinstance(o, decimal.Decimal): + return (str(o) for o in [o]) + return super(DecimalEncoder, self)._iterencode(o, markers) + +def dispatch(request, object_type, object_name): + + object_filters = {} + object_params = {} + result = {} + + if request.method == 'POST': + req_items = request.POST.items() + elif request.method == 'GET': + return HttpResponse(json.dumps({'error' : 'only post request is supported'}), content_type="application/json") + + query = Query.create(object_type) + +# No filters for create +# if object_filters : +# for k, f in object_filters.iteritems() : +# query.filter_by(k, '==', f) +# +# # DEBUG +# print object_filters + + if object_params : + query.set(object_params.iteritems()) + else : + return HttpResponse(json.dumps({'error' : 'params are required for create'}), content_type="application/json") + + # DEBUG + print object_params + + result = execute_query(request, query) + + # DEBUG + print result + + if result : + return HttpResponse(json.dumps({'error' : 'an error has occurred'}), content_type="application/json") + else : + return HttpResponse(json.dumps({'success' : 'record updated'}), content_type="application/json") + diff --git a/rest/delete.py b/rest/delete.py new file mode 100644 index 00000000..0ce5f387 --- /dev/null +++ b/rest/delete.py @@ -0,0 +1,69 @@ +from manifold.core.query import Query + +from django.views.generic.base import TemplateView +from django.shortcuts import render_to_response + +from unfold.loginrequired import LoginRequiredView +from django.http import HttpResponse + +from manifold.core.query import Query, AnalyzedQuery +from manifoldapi.manifoldapi import execute_query + +from string import join +import decimal +import datetime +import json + +# handles serialization of datetime in json +DateEncoder = lambda obj: obj.strftime("%B %d, %Y %H:%M:%S") if isinstance(obj, datetime.datetime) else None + +# support converting decimal in json +json.encoder.FLOAT_REPR = lambda o: format(o, '.2f') + +# handles decimal numbers serialization in json +class DecimalEncoder(json.JSONEncoder): + def _iterencode(self, o, markers=None): + if isinstance(o, decimal.Decimal): + return (str(o) for o in [o]) + return super(DecimalEncoder, self)._iterencode(o, markers) + +def dispatch(request, object_type, object_name): + + object_filters = {} + object_params = {} + result = {} + + if request.method == 'POST': + req_items = request.POST.items() + elif request.method == 'GET': + return HttpResponse(json.dumps({'error' : 'only post request is supported'}), content_type="application/json") + + query = Query.delete(object_type) + + if object_filters : + for k, f in object_filters.iteritems() : + query.filter_by(k, '==', f) + else: + return HttpResponse(json.dumps({'error' : 'Filters are required for delete'}), content_type="application/json") + # DEBUG + print object_filters + +# No params in delete +# if object_params : +# query.set(object_params.iteritems()) +# else : +# return HttpResponse(json.dumps({'error' : 'an error has occurred'}), content_type="application/json") +# +# # DEBUG +# print object_params + + result = execute_query(request, query) + + # DEBUG + print result + + if result : + return HttpResponse(json.dumps({'error' : 'an error has occurred'}), content_type="application/json") + else : + return HttpResponse(json.dumps({'success' : 'record updated'}), content_type="application/json") +