From: Loic Baron Date: Sat, 1 Mar 2014 13:48:49 +0000 (+0100) Subject: Rest delete: Filters required, using the Class defined in __init__.py should be facto... X-Git-Tag: myslice-1.1~257 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=566ca3fdb6a8d05f3da5703e5d1abe60c2ad1820;p=myslice.git Rest delete: Filters required, using the Class defined in __init__.py should be factorized somehow... --- diff --git a/rest/delete.py b/rest/delete.py index 0ce5f387..70d0ae64 100644 --- a/rest/delete.py +++ b/rest/delete.py @@ -27,43 +27,99 @@ class DecimalEncoder(json.JSONEncoder): return (str(o) for o in [o]) return super(DecimalEncoder, self)._iterencode(o, markers) +class objectRequest(object): + + def __init__(self, request, object_type, object_name): + self.type = object_type + self.name = object_name + # No params in delete + self.properties = [] + self.filters = {} + self.options = None + + self.request = request + + # What about key formed of multiple fields??? + query = Query.get('local:object').filter_by('table', '==', self.type).select('key') + results = execute_query(self.request, query) + print "key of object = %s" % results + if results : + for r in results[0]['key'] : + self.id = r + else : + return error('Manifold db error') + + query = Query.get('local:object').filter_by('table', '==', self.type).select('column.name') + results = execute_query(self.request, query) + if results : + for r in results[0]['column'] : + self.properties.append(r['name']) + else : + return error('Manifold db error') + + def addFilters(self, properties): + selected_properties = [] + for p in properties : + if p in self.properties : + selected_properties.append(p) + self.properties = selected_properties + self.setId() + + def setId(self): + if self.id in self.properties : + self.properties.remove(self.id) + [self.id].extend(self.properties) + + def execute(self): + query = Query.delete(self.type) + if self.filters : + for k, f in self.filters.iteritems() : + if (f[:1] == "!") : + query.filter_by(k, '!=', f[1:]) + elif (f[:2] == ">=") : + query.filter_by(k, '>=', f[2:]) + elif (f[:1] == ">") : + query.filter_by(k, '>', f[1:]) + elif (f[:2] == "<=") : + query.filter_by(k, '<=', f[2:]) + elif (f[:1] == "<") : + query.filter_by(k, '<', f[1:]) + else : + query.filter_by(k, '==', f) + else: + raise Exception, "Filters are required for delete" + return execute_query(self.request, query) + def dispatch(request, object_type, object_name): + o = objectRequest(request, object_type, object_name) + object_filters = {} object_params = {} result = {} if request.method == 'POST': - req_items = request.POST.items() + req_items = request.POST elif request.method == 'GET': - return HttpResponse(json.dumps({'error' : 'only post request is supported'}), content_type="application/json") + #return HttpResponse(json.dumps({'error' : 'only post request is supported'}), content_type="application/json") + req_items = request.GET + + for el in req_items.items(): + if el[0].startswith('filters'): + o.filters[el[0][8:-1]] = el[1] + elif el[0].startswith('columns'): + o.addFilters(req_items.getlist('columns[]')) + elif el[0].startswith('options'): + o.options = req_items.getlist('options[]') + + try: + response = o.execute() + + if response : + return HttpResponse(json.dumps({'success' : 'record deleted'}), content_type="application/json") + else : + return HttpResponse(json.dumps({'error' : 'an error has occurred'}), content_type="application/json") + + except Exception, e: + return HttpResponse(json.dumps({'error' : str(e)}), 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") -