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

« back to all changes in this revision

Viewing changes to ivle/dispatch/__init__.py

  • Committer: William Grant
  • Date: 2009-06-24 09:57:42 UTC
  • Revision ID: grantw@unimelb.edu.au-20090624095742-0mk2uzne2glpk7xf
Add default messages to our HTTP errors. Fixes issue #98.

Show diffs side-by-side

added added

removed removed

Lines of Context:
139
139
            req.store.commit()
140
140
            return req.OK
141
141
    else:
142
 
        req.status = 404
143
142
        XHTMLErrorView(req, NotFound()).render(req)
144
143
        return req.OK
145
144
 
156
155
    req.content_type = "text/html"
157
156
    logfile = os.path.join(config['paths']['logs'], 'ivle_error.log')
158
157
    logfail = False
159
 
 
160
 
    # XXX: This remains here for ivle.interpret's IVLEErrors. Once we rewrite
161
 
    #      fileservice, req.status should always be 500 (ISE) here.
162
158
    try:
163
159
        httpcode = exc_value.httpcode
164
160
        req.status = httpcode
165
161
    except AttributeError:
166
162
        httpcode = None
167
163
        req.status = mod_python.apache.HTTP_INTERNAL_SERVER_ERROR
168
 
 
169
164
    try:
170
165
        publicmode = req.publicmode
171
166
    except AttributeError:
194
189
    # misbehaves (which is currently very easy, if things aren't set up
195
190
    # correctly).
196
191
    # Write the traceback.
197
 
 
198
 
    # We need to special-case IVLEJailError, as we can get another
 
192
    # If this is a non-4xx IVLEError, get the message and httpcode and
 
193
    # make the error message a bit nicer (but still include the
 
194
    # traceback).
 
195
    # We also need to special-case IVLEJailError, as we can get another
199
196
    # almost-exception out of it.
 
197
 
 
198
    codename, msg = None, None
 
199
 
200
200
    if exc_type is util.IVLEJailError:
 
201
        msg = exc_value.type_str + ": " + exc_value.message
201
202
        tb = 'Exception information extracted from IVLEJailError:\n'
202
203
        tb += urllib.unquote(exc_value.info)
203
204
    else:
 
205
        try:
 
206
            codename, msg = req.get_http_codename(httpcode)
 
207
        except AttributeError:
 
208
            pass
 
209
 
204
210
        tb = ''.join(traceback.format_exception(exc_type, exc_value,
205
211
                                                exc_traceback))
206
212
 
207
 
    logging.error('\n' + tb)
 
213
    logging.error('%s\n%s'%(str(msg), tb))
208
214
 
209
215
    # Error messages are only displayed is the user is NOT a student,
210
216
    # or if there has been a problem logging the error message
214
220
<html xmlns="http://www.w3.org/1999/xhtml">
215
221
<head><title>IVLE Internal Server Error</title></head>
216
222
<body>
217
 
<h1>IVLE Internal Server Error</h1>
 
223
<h1>IVLE Internal Server Error""")
 
224
    if show_errors:
 
225
        if codename is not None and \
 
226
           httpcode != mod_python.apache.HTTP_INTERNAL_SERVER_ERROR:
 
227
            req.write(": %s" % cgi.escape(codename))
 
228
 
 
229
    req.write("""</h1>
218
230
<p>An error has occured which is the fault of the IVLE developers or
219
231
administrators. """)
220
232
 
226
238
    req.write("</p>")
227
239
 
228
240
    if show_errors:
 
241
        if msg is not None:
 
242
            req.write("<p>%s</p>\n" % cgi.escape(msg))
 
243
        if httpcode is not None:
 
244
            req.write("<p>(HTTP error code %d)</p>\n" % httpcode)
229
245
        req.write("<h2>Debugging information</h2>")
 
246
 
230
247
        req.write("<pre>\n%s\n</pre>\n"%cgi.escape(tb))
231
248
    req.write("</body></html>")