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

« back to all changes in this revision

Viewing changes to ivle/dispatch/__init__.py

  • Committer: David Coles
  • Date: 2009-12-07 06:43:01 UTC
  • Revision ID: coles.david@gmail.com-20091207064301-2t1if3ixorclqm9n
Documentation for ivle.conf configuration file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
import routes
41
41
 
42
42
from ivle import util
43
 
import ivle.conf
 
43
import ivle.config
44
44
from ivle.dispatch.request import Request
45
45
import ivle.webapp.security
46
46
from ivle.webapp.base.plugins import ViewPlugin, PublicViewPlugin
47
47
from ivle.webapp.base.xhtml import XHTMLView, XHTMLErrorView
48
48
from ivle.webapp.errors import HTTPError, Unauthorized, NotFound
49
49
 
50
 
def generate_route_mapper(view_plugins, attr):
 
50
config = ivle.config.Config()
 
51
 
 
52
def generate_router(view_plugins, attr):
51
53
    """
52
54
    Build a Mapper object for doing URL matching using 'routes', based on the
53
55
    given plugin registry.
71
73
    @param apachereq: An Apache request object.
72
74
    """
73
75
    # Make the request object into an IVLE request which can be given to views
74
 
    req = Request(apachereq)
 
76
    req = Request(apachereq, config)
75
77
 
76
78
    # Hack? Try and get the user login early just in case we throw an error
77
79
    # (most likely 404) to stop us seeing not logged in even when we are.
82
84
        if user and user.valid:
83
85
            req.user = user
84
86
 
85
 
    conf = ivle.config.Config()
86
 
    req.config = conf
87
 
 
88
87
    if req.publicmode:
89
 
        req.mapper = generate_route_mapper(conf.plugin_index[PublicViewPlugin],
90
 
                                           'public_urls')
 
88
        req.mapper = generate_router(config.plugin_index[PublicViewPlugin],
 
89
                                    'public_urls')
91
90
    else:
92
 
        req.mapper = generate_route_mapper(conf.plugin_index[ViewPlugin],
93
 
                                           'urls')
 
91
        req.mapper = generate_router(config.plugin_index[ViewPlugin], 'urls')
94
92
 
95
93
    matchdict = req.mapper.match(req.uri)
96
94
    if matchdict is not None:
141
139
            req.store.commit()
142
140
            return req.OK
143
141
    else:
 
142
        req.status = 404
144
143
        XHTMLErrorView(req, NotFound()).render(req)
145
144
        return req.OK
146
145
 
155
154
    the IVLE request is created.
156
155
    """
157
156
    req.content_type = "text/html"
158
 
    logfile = os.path.join(ivle.conf.log_path, 'ivle_error.log')
 
157
    logfile = os.path.join(config['paths']['logs'], 'ivle_error.log')
159
158
    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.
160
162
    try:
161
163
        httpcode = exc_value.httpcode
162
164
        req.status = httpcode
163
165
    except AttributeError:
164
166
        httpcode = None
165
167
        req.status = mod_python.apache.HTTP_INTERNAL_SERVER_ERROR
 
168
 
166
169
    try:
167
170
        publicmode = req.publicmode
168
171
    except AttributeError:
191
194
    # misbehaves (which is currently very easy, if things aren't set up
192
195
    # correctly).
193
196
    # Write the traceback.
194
 
    # If this is a non-4xx IVLEError, get the message and httpcode and
195
 
    # make the error message a bit nicer (but still include the
196
 
    # traceback).
197
 
    # We also need to special-case IVLEJailError, as we can get another
 
197
 
 
198
    # We need to special-case IVLEJailError, as we can get another
198
199
    # almost-exception out of it.
199
 
 
200
 
    codename, msg = None, None
201
 
 
202
200
    if exc_type is util.IVLEJailError:
203
 
        msg = exc_value.type_str + ": " + exc_value.message
204
201
        tb = 'Exception information extracted from IVLEJailError:\n'
205
202
        tb += urllib.unquote(exc_value.info)
206
203
    else:
207
 
        try:
208
 
            codename, msg = req.get_http_codename(httpcode)
209
 
        except AttributeError:
210
 
            pass
211
 
 
212
204
        tb = ''.join(traceback.format_exception(exc_type, exc_value,
213
205
                                                exc_traceback))
214
206
 
215
 
    logging.error('%s\n%s'%(str(msg), tb))
 
207
    logging.error('\n' + tb)
216
208
 
217
209
    # Error messages are only displayed is the user is NOT a student,
218
210
    # or if there has been a problem logging the error message
222
214
<html xmlns="http://www.w3.org/1999/xhtml">
223
215
<head><title>IVLE Internal Server Error</title></head>
224
216
<body>
225
 
<h1>IVLE Internal Server Error""")
226
 
    if show_errors:
227
 
        if codename is not None and \
228
 
           httpcode != mod_python.apache.HTTP_INTERNAL_SERVER_ERROR:
229
 
            req.write(": %s" % cgi.escape(codename))
230
 
 
231
 
    req.write("""</h1>
 
217
<h1>IVLE Internal Server Error</h1>
232
218
<p>An error has occured which is the fault of the IVLE developers or
233
219
administrators. """)
234
220
 
240
226
    req.write("</p>")
241
227
 
242
228
    if show_errors:
243
 
        if msg is not None:
244
 
            req.write("<p>%s</p>\n" % cgi.escape(msg))
245
 
        if httpcode is not None:
246
 
            req.write("<p>(HTTP error code %d)</p>\n" % httpcode)
247
229
        req.write("<h2>Debugging information</h2>")
248
 
 
249
230
        req.write("<pre>\n%s\n</pre>\n"%cgi.escape(tb))
250
231
    req.write("</body></html>")