From fd33fc16e83b9624d18bcc2bed97b8668ec0268f Mon Sep 17 00:00:00 2001 From: Brian Moe <bmoe@gravity.phys.uwm.edu> Date: Thu, 29 Oct 2009 13:17:19 -0500 Subject: [PATCH] On creation, don't return an event object if event is deleted due to error --- gracedb/views.py | 49 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/gracedb/views.py b/gracedb/views.py index 42af9b8be..7786caa6b 100644 --- a/gracedb/views.py +++ b/gracedb/views.py @@ -32,13 +32,15 @@ def create(request): # str(x) is *often* the same as json(x), but not always. # It's not, because we don't reliably have json on the client side. response = HttpResponse(mimetype='application/json') - if int(request.POST['cli_version']) == 1: - d['graceid'] = "UID: %s" % d['graceid'] + d['output'] = "%s" % d['graceid'] + d['graceid'] = "%s" % d['graceid'] msg = str(d) else: # Old client response = HttpResponse(mimetype='text/plain') if 'error' in d: msg = "ERROR: " + d['error'] + elif 'warning' in d: + msg = "ERROR: " + d['warning'] else: msg = d['graceid'] response.write(msg) @@ -59,10 +61,18 @@ def _create(request): else: form = CreateEventForm(request.POST, request.FILES) if form.is_valid(): - event = _createEventFromForm(request, form) + event, warnings = _createEventFromForm(request, form) if 'cli' not in request.POST: + if not event: + # problem creating event... XXX need an error page for this. + raise Exception("\n".join(warnings)) return HttpResponseRedirect(reverse(view, args=[event.graceid()])) - rv['graceid'] = str(event.graceid()) + if event: + rv['graceid'] = str(event.graceid()) + if warnings: + rv['warning'] = "\n".join(warnings) + else: + rv['error'] = "\n".join(warnings) else: if 'cli' not in request.POST: rv['form'] = form @@ -85,6 +95,7 @@ def _create(request): def _createEventFromForm(request, form): saved = False + warnings = [] try: group = Group.objects.filter(name=form.cleaned_data['group']) type = form.cleaned_data['type'] @@ -121,14 +132,16 @@ def _createEventFromForm(request, form): # Extract Info from uploaded data # Temp (ha!) hack to deal with # out of band data from Omega to LUMIN. - temp_data_loc = handle_uploaded_data(event, uploadDestination) - - # Send an alert. - issueAlert(event, - os.path.join(event.clusterurl(), "private", f.name), - temp_data_loc) + try: + temp_data_loc = handle_uploaded_data(event, uploadDestination) + # Send an alert. + issueAlert(event, + os.path.join(event.clusterurl(), "private", f.name), + temp_data_loc) + except Exception, e: + warnings += ["Problem handling event creation (%s)" % e] #return HttpResponseRedirect(reverse(view, args=[event.graceid()])) - except: + except Exception, e: # something went wrong. # XXX We need to make sure we clean up EVERYTHING. # We don't. Wiki page and data directories remain. @@ -138,17 +151,17 @@ def _createEventFromForm(request, form): if saved: # undo save. event.delete() - raise - return event + warnings += ["Problem creating event (%s)" % e] + event = None + return event, warnings def _saveUploadedFile(event, uploadedFile): # XXX Hardcoding. fname = os.path.join("/mnt/gracedb-web/data", event.graceid(), "private", uploadedFile.name) f = open(fname, "w") - for chunk in uploadedfile.chunks(): + for chunk in uploadedFile.chunks(): f.write(chunk) f.close() - event.filename = uploadedFile.name def _createLog(request, graceid, comment, uploadedFile=None): response = HttpResponse(mimetype='application/json') @@ -168,7 +181,11 @@ def _createLog(request, graceid, comment, uploadedFile=None): issuer=request.ligouser, comment=comment) if uploadedFile: - _saveUploadedFile(event, uploadedFile) + try: + _saveUploadedFile(event, uploadedFile) + logEntry.filename = uploadedFile.name + except Exception, e: + rdict['error'] = "Problem saving file: %s" % str(e) logEntry.save() # XXX should be json -- GitLab