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

« back to all changes in this revision

Viewing changes to ivle/dispatch/__init__.py

Simplify and prettify the crash handler.

Show diffs side-by-side

added added

removed removed

Lines of Context:
150
150
    req.content_type = "text/html"
151
151
    logfile = os.path.join(ivle.conf.log_path, 'ivle_error.log')
152
152
    logfail = False
153
 
    # For some reason, some versions of mod_python have "_server" instead of
154
 
    # "main_server". So we check for both.
155
 
    try:
156
 
        admin_email = mod_python.apache.main_server.server_admin
157
 
    except AttributeError:
158
 
        try:
159
 
            admin_email = mod_python.apache._server.server_admin
160
 
        except AttributeError:
161
 
            admin_email = ""
162
153
    try:
163
154
        httpcode = exc_value.httpcode
164
155
        req.status = httpcode
192
183
            filemode='a')
193
184
    except IOError:
194
185
        logfail = True
195
 
    logging.debug('Logging Unhandled Exception')
196
186
 
197
187
    # A "bad" error message. We shouldn't get here unless IVLE
198
188
    # misbehaves (which is currently very easy, if things aren't set up
215
205
            codename, msg = req.get_http_codename(httpcode)
216
206
        except AttributeError:
217
207
            pass
218
 
        # Override the default message with the supplied one,
219
 
        # if available.
220
 
        if hasattr(exc_value, 'message') and exc_value.message is not None:
221
 
            msg = exc_value.message
222
 
            # Prepend the exception type
223
 
            if exc_type != util.IVLEError:
224
 
                msg = exc_type.__name__ + ": " + repr(msg)
225
208
 
226
209
        tb = ''.join(traceback.format_exception(exc_type, exc_value,
227
210
                                                exc_traceback))
228
211
 
229
 
    # Logging
230
212
    logging.error('%s\n%s'%(str(msg), tb))
 
213
 
231
214
    # Error messages are only displayed is the user is NOT a student,
232
215
    # or if there has been a problem logging the error message
233
216
    show_errors = (not publicmode) and ((login and \
238
221
<head><title>IVLE Internal Server Error</title></head>
239
222
<body>
240
223
<h1>IVLE Internal Server Error""")
241
 
    if (show_errors):
242
 
        if (codename is not None
243
 
                    and httpcode != mod_python.apache.HTTP_INTERNAL_SERVER_ERROR):
 
224
    if show_errors:
 
225
        if codename is not None and \
 
226
           httpcode != mod_python.apache.HTTP_INTERNAL_SERVER_ERROR:
244
227
            req.write(": %s" % cgi.escape(codename))
245
228
 
246
229
    req.write("""</h1>
247
230
<p>An error has occured which is the fault of the IVLE developers or
248
 
administration. The developers have been notified.</p>
 
231
administrators. Details have been logged for further examination.</p>
249
232
""")
250
 
    if (show_errors):
 
233
    if show_errors:
251
234
        if msg is not None:
252
235
            req.write("<p>%s</p>\n" % cgi.escape(msg))
253
236
        if httpcode is not None:
254
237
            req.write("<p>(HTTP error code %d)</p>\n" % httpcode)
255
 
        req.write("""
256
 
<p>Please report this to <a href="mailto:%s">%s</a> (the system
257
 
administrator). Include the following information:</p>
258
 
""" % (cgi.escape(admin_email), cgi.escape(admin_email)))
 
238
        req.write("<h2>Debugging information</h2>")
259
239
 
260
240
        req.write("<pre>\n%s\n</pre>\n"%cgi.escape(tb))
261
241
        if logfail:
262
 
            req.write("<p>Warning: Could not open Error Log: '%s'</p>\n"
 
242
            req.write("<p>Warning: Could not open error log.</p>\n"
263
243
                %cgi.escape(logfile))
264
244
    req.write("</body></html>")