From: Ciro Scognamiglio Date: Wed, 26 Feb 2014 17:34:28 +0000 (+0100) Subject: filters and columns can be passed to the rest api X-Git-Tag: myslice-1.1~288 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;ds=sidebyside;h=419ed05f20cf382154c52c3a166679cf401d9eed;p=unfold.git filters and columns can be passed to the rest api --- diff --git a/rest/__init__.py b/rest/__init__.py index b8e733ab..3b6c48d8 100644 --- a/rest/__init__.py +++ b/rest/__init__.py @@ -13,13 +13,13 @@ from string import join import decimal import datetime import json -from json import encoder +import urlparse # 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 -encoder.FLOAT_REPR = lambda o: format(o, '.2f') +json.encoder.FLOAT_REPR = lambda o: format(o, '.2f') # handles decimal numbers serialization in json class DecimalEncoder(json.JSONEncoder): @@ -30,8 +30,8 @@ class DecimalEncoder(json.JSONEncoder): def dispatch(request, object_type, object_name): - object_properties = None - object_filters = None + object_properties = [] + object_filters = {} switch = { 'platform' : platform, @@ -41,15 +41,11 @@ def dispatch(request, object_type, object_name): } if request.method == 'POST': - if 'filters' in request.POST : - object_filters = request.POST.getlist('filters[]') - print '########################' - print object_filters - print "$$$$$$$$$$$$$$$$$$$$$$" - print request.POST - - if 'columns[]' in request.POST : - object_properties = request.POST.getlist('columns[]') + for el in request.POST.items(): + if el[0].startswith('filters'): + object_filters[el[0][8:-1]] = el[1] + elif el[0].startswith('columns'): + object_properties = request.POST.getlist('columns[]') # platform is local if ((object_type == 'platform') or (object_type == 'testbed')) : @@ -69,25 +65,36 @@ def dispatch(request, object_type, object_name): return error(request, object_name, {}) return switch.get(object_type, error)(request, object_name, object_properties, object_filters) -# if request.method == 'GET': -# return switch.get(request, object_type, object_name, object_properties) -# elif request.method == 'POST': -# return post(request, object_type, object_name) - def platform(request, object_name, object_properties, object_filters = None): - query = Query().get('local:platform').filter_by('disabled', '==', '0').filter_by('gateway_type', '==', 'sfa').filter_by('platform', '!=', 'myslice').select(object_properties) + query = Query().get('local:platform').filter_by('disabled', '==', '0').filter_by('gateway_type', '==', 'sfa').filter_by('platform', '!=', 'myslice') + if object_filters : + for k, f in object_filters.iteritems() : + query.filter_by(k, '==', f) + query.select(object_properties) return send(request, execute_query(request, query), object_properties) def slice(request, object_name, object_properties, object_filters = None): - query = Query().get('slice').filter_by('user.user_hrn', '==', '$user_hrn').select(object_properties) + query = Query().get('slice').filter_by('user.user_hrn', '==', '$user_hrn') + if object_filters : + for k, f in object_filters.iteritems() : + query.filter_by(k, '==', f) + query.select(object_properties) return send(request, execute_query(request, query), object_properties) def resource(request, object_name, object_properties, object_filters = None): - query = Query().get('resource').select(object_properties) + query = Query().get('resource') + if object_filters : + for k, f in object_filters.iteritems() : + query.filter_by(k, '==', f) + query.select(object_properties) return send(request, execute_query(request, query), object_properties) def user(request, object_name, object_properties, object_filters = None): - query = Query().get('user').filter_by('user_hrn', '==', '$user_hrn').select(object_properties) + query = Query().get('user').filter_by('user_hrn', '==', '$user_hrn') + if object_filters : + for k, f in object_filters.iteritems() : + query.filter_by(k, '==', f) + query.select(object_properties) return send(request, execute_query(request, query), object_properties) def send(request, response, object_properties): @@ -114,4 +121,23 @@ def send(request, response, object_properties): return HttpResponse(json.dumps(response_data, cls=DecimalEncoder, default=DateEncoder), content_type="application/json") def error(request, object_name, object_properties): - return HttpResponse(json.dumps({'error' : 'an error has occurred'}), content_type="application/json") \ No newline at end of file + return HttpResponse(json.dumps({'error' : 'an error has occurred'}), content_type="application/json") + +def getDictArray(post, name): + dic = {} + for k in post.keys(): + if k.startswith(name): + rest = k[len(name):] + + # split the string into different components + parts = [p[:-1] for p in rest.split('[')][1:] + print parts + id = int(parts[0]) + + # add a new dictionary if it doesn't exist yet + if id not in dic: + dic[id] = {} + + # add the information to the dictionary + dic[id][parts[1]] = post.get(k) + return dic \ No newline at end of file diff --git a/rest/templates/table-default.html b/rest/templates/table-default.html index 79d81948..aeed9848 100644 --- a/rest/templates/table-default.html +++ b/rest/templates/table-default.html @@ -18,15 +18,4 @@ {% endfor %} {% endfor %} - - \ No newline at end of file + \ No newline at end of file