X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/a9da31c5588575b4e020db099770a23c79748445..46b517f360122c3c2d010bb059dd016cdd8a1b26:/code/main.py diff --git a/code/main.py b/code/main.py index 01d6e39..646f7d0 100755 --- a/code/main.py +++ b/code/main.py @@ -118,12 +118,13 @@ class Defaults: DEFAULT_HEADERS = {'Content-Type': 'text/html'} def error(op, username, fields, err, emsg, traceback): - """Print an error page when a CodeError occurs""" - send_error_mail('xvm error on %s for %s: %s' % (op, username, err), - 'error on %s for %s: %s\n\n%s\n' - % (op, username, err, emsg)) + """Print an error page when an exception occurs""" d = dict(op=op, user=username, fields=fields, errorMessage=str(err), stderr=emsg, traceback=traceback) + details = templates.error_raw(searchList=[d]) + send_error_mail('xvm error on %s for %s: %s' % (op, username, err), + details) + d['details'] = details return templates.error(searchList=[d]) def invalidInput(op, username, fields, err, emsg): @@ -583,7 +584,7 @@ def unauthFront(_, _2, fields): def throwError(_, __, ___): """Throw an error, to test the error-tracing mechanisms.""" - raise CodeError("test of the emergency broadcast system") + raise RuntimeError("test of the emergency broadcast system") mapping = dict(list=listVms, vnc=vnc, @@ -675,35 +676,20 @@ class App: output_string = str(output) checkpoint.checkpoint('output as a string') except Exception, err: - import traceback if not fields.has_key('js'): - if isinstance(err, CodeError): - self.start('500 Internal Server Error', [('Content-Type', 'text/html')]) - e = revertStandardError() - s = error(operation, self.username, fields, - err, e, traceback.format_exc()) - yield str(s) - return if isinstance(err, InvalidInput): self.start('200 OK', [('Content-Type', 'text/html')]) e = revertStandardError() yield str(invalidInput(operation, self.username, fields, err, e)) return - self.start('500 Internal Server Error', [('Content-Type', 'text/plain')]) - send_error_mail('xvm error: %s' % (err,), - '%s\n' % (traceback.format_exc(),)) - yield '''Uh-oh! We experienced an error. -Sorry about that. We've gotten mail about it. - -Feel free to poke us at xvm@mit.edu if this bug is -consistently biting you and we don't seem to be fixing it. - -In case you're curious, the gory details are here. ----- -%s ----- -%s -----''' % (str(err), traceback.format_exc()) + import traceback + self.start('500 Internal Server Error', + [('Content-Type', 'text/html')]) + e = revertStandardError() + s = error(operation, self.username, fields, + err, e, traceback.format_exc()) + yield str(s) + return status = headers.setdefault('Status', '200 OK') del headers['Status'] self.start(status, headers.items())