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

« back to all changes in this revision

Viewing changes to ivle/dispatch/request.py

  • Committer: William Grant
  • Date: 2009-04-28 08:35:40 UTC
  • Revision ID: grantw@unimelb.edu.au-20090428083540-0mjpvly46rbt8o8l
Drop another unneeded ivle.conf import, from ivle.webapp.help.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
    # This needs to be importable from outside Apache.
34
34
    pass
35
35
 
 
36
import os.path
 
37
 
36
38
import ivle.util
37
 
import ivle.conf
38
39
import ivle.database
39
40
from ivle.webapp.base.plugins import CookiePlugin
40
41
 
154
155
    HTTP_INSUFFICIENT_STORAGE         = 507
155
156
    HTTP_NOT_EXTENDED                 = 510
156
157
 
157
 
    def __init__(self, req):
158
 
        """Builds an IVLE request object from a mod_python request object.
159
 
        This results in an object with all of the necessary methods and
160
 
        additional fields.
 
158
    def __init__(self, req, config):
 
159
        """Create an IVLE request from a mod_python one.
161
160
 
162
 
        req: A mod_python request object.
 
161
        @param req: A mod_python request.
 
162
        @param config: An IVLE configuration.
163
163
        """
164
164
 
165
165
        # Methods are mostly wrappers around the Apache request object
166
166
        self.apache_req = req
 
167
        self.config = config
167
168
        self.headers_written = False
168
169
 
169
170
        # Determine if the browser used the public host name to make the
170
171
        # request (in which case we are in "public mode")
171
 
        if req.hostname == ivle.conf.public_host:
 
172
        if req.hostname == config['urls']['public_host']:
172
173
            self.publicmode = True
173
174
        else:
174
175
            self.publicmode = False
178
179
        self.uri = req.uri
179
180
        # Split the given path into the app (top-level dir) and sub-path
180
181
        # (after first stripping away the root directory)
181
 
        path = ivle.util.unmake_path(req.uri)
 
182
        path = self.unmake_path(req.uri)
182
183
        (self.app, self.path) = (ivle.util.split_path(path))
183
184
        self.user = None
184
185
        self.hostname = req.hostname
187
188
 
188
189
        # Open a database connection and transaction, keep it around for users
189
190
        # of the Request object to use
190
 
        self.store = ivle.database.get_store()
 
191
        self.store = ivle.database.get_store(config)
191
192
 
192
193
        # Default values for the output members
193
194
        self.status = Request.HTTP_OK
252
253
                for cookie in plugin.cookies:
253
254
                    self.add_cookie(mod_python.Cookie.Cookie(cookie, '',
254
255
                                                    expires=1, path='/'))
255
 
        self.throw_redirect(ivle.util.make_path('')) 
 
256
        self.throw_redirect(self.make_path(''))
256
257
 
257
258
 
258
259
    def flush(self):
292
293
        else:
293
294
            mod_python.Cookie.add_cookie(self.apache_req, cookie, value, **attributes)
294
295
 
 
296
    def make_path(self, path):
 
297
        """Prepend the IVLE URL prefix to the given path.
 
298
 
 
299
        This is used when generating URLs to send to the client.
 
300
 
 
301
        This method is DEPRECATED. We no longer support use of a prefix.
 
302
        """
 
303
        return os.path.join(self.config['urls']['root'], path)
 
304
 
 
305
    def unmake_path(self, path):
 
306
        """Strip the IVLE URL prefix from the given path, if present.
 
307
 
 
308
        Also normalises the path.
 
309
 
 
310
        This method is DEPRECATED. We no longer support use of a prefix.
 
311
        """
 
312
        path = os.path.normpath(path)
 
313
        root = os.path.normpath(self.config['urls']['root'])
 
314
 
 
315
        if path.startswith(root):
 
316
            path = path[len(root):]
 
317
            # Take out the slash as well
 
318
            if len(path) > 0 and path[0] == os.sep:
 
319
                path = path[1:]
 
320
 
 
321
        return path
 
322
 
295
323
    def get_session(self):
296
324
        """Returns a mod_python Session object for this request.
297
325
        Note that this is dependent on mod_python and may need to change
298
 
        interface if porting away from mod_python."""
 
326
        interface if porting away from mod_python.
 
327
 
 
328
        IMPORTANT: Call unlock() on the session as soon as you are done with
 
329
                   it! If you don't, all other requests will block!
 
330
        """
299
331
        # Cache the session object and set the timeout to 24 hours.
300
332
        if not hasattr(self, 'session'):
301
333
            self.session = mod_python.Session.FileSession(self.apache_req,