~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/dispatch/__init__.py

  • Committer: wagrant
  • Date: 2008-07-14 01:56:12 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:853
dispatch: Extract exception information from IVLEJailErrors if caught.
          This means we now catch most exceptions inside the jail,
          rather than printing out a raw exception, and confusing AJAX.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
import sys
33
33
import os
34
34
import os.path
 
35
import urllib
 
36
 
35
37
import conf
36
38
import conf.apps
37
39
import apps
226
228
        # If this is a non-4xx IVLEError, get the message and httpcode and
227
229
        # make the error message a bit nicer (but still include the
228
230
        # traceback).
229
 
        try:
230
 
            codename, msg = req.get_http_codename(httpcode)
231
 
        except AttributeError:
232
 
            codename, msg = None, None
233
 
        # Override the default message with the supplied one,
234
 
        # if available.
235
 
        if hasattr(exc_value, 'message') and exc_value.message is not None:
236
 
            msg = exc_value.message
237
 
            # Prepend the exception type
238
 
            if exc_type != util.IVLEError:
239
 
                msg = exc_type.__name__ + ": " + msg
240
 
 
241
 
        tb = ''.join(traceback.format_exception(exc_type, exc_value,
242
 
                                                exc_traceback))
 
231
        # We also need to special-case IVLEJailError, as we can get another
 
232
        # almost-exception out of it.
 
233
 
 
234
        codename, msg = None, None
 
235
 
 
236
        if exc_type is util.IVLEJailError:
 
237
            msg = exc_value.type_str + ": " + exc_value.message
 
238
            tb = 'Exception information extracted from IVLEJailError:\n'
 
239
            tb += urllib.unquote(exc_value.info)
 
240
        else:
 
241
            try:
 
242
                codename, msg = req.get_http_codename(httpcode)
 
243
            except AttributeError:
 
244
                pass
 
245
            # Override the default message with the supplied one,
 
246
            # if available.
 
247
            if hasattr(exc_value, 'message') and exc_value.message is not None:
 
248
                msg = exc_value.message
 
249
                # Prepend the exception type
 
250
                if exc_type != util.IVLEError:
 
251
                    msg = exc_type.__name__ + ": " + msg
 
252
 
 
253
            tb = ''.join(traceback.format_exception(exc_type, exc_value,
 
254
                                                    exc_traceback))
243
255
 
244
256
        req.write("""<html>
245
257
<head><title>IVLE Internal Server Error</title></head>