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

« back to all changes in this revision

Viewing changes to www/dispatch/request.py

  • Committer: mattgiuca
  • Date: 2008-01-25 06:20:32 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:313
test/test_framework: Updated examples, a bit of better descriptions, sample
    partial solutions, etc.

Added all sample subject material.
This has been copied from test/test_framework and modified slightly.
There is now a subject "sample" with 2 worksheets. The 1st worksheet has 3
exercises. These work in IVLE by default.

setup.py: Added code to install subjects into the designated directory. This
means that installing IVLE will result in the sample subjects being
immediately available.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 
26
26
import common.util
27
27
import mod_python
 
28
from mod_python import (util, Session)
 
29
import conf
28
30
 
29
31
class Request:
30
32
    """An IVLE request object. This is presented to the IVLE apps as a way of
31
33
    interacting with the web server and the dispatcher.
32
34
 
33
35
    Request object attributes:
 
36
        method (read)
 
37
            String. The request method (eg. 'GET', 'POST', etc)
34
38
        uri (read)
35
39
            String. The path portion of the URI.
36
40
        app (read)
39
43
            String. The path specified in the URL *not including* the
40
44
            application or the IVLE location prefix. eg. a URL of
41
45
            "/ivle/files/joe/myfiles" has a path of "joe/myfiles".
 
46
        username (read)
 
47
            String. Login name of the user who is currently logged in, or
 
48
            None.
 
49
        hostname (read)
 
50
            String. Hostname the server is running on.
 
51
        headers_in (read)
 
52
            Table object representing headers sent by the client.
 
53
        headers_out (read, can be written to)
 
54
            Table object representing headers to be sent to the client.
 
55
        publicmode (read)
 
56
            Bool. True if the request came for the "public host" as
 
57
            configured in conf.py. Note that public mode requests do not
 
58
            have an app (app is set to None).
42
59
 
43
60
        status (write)
44
61
            Int. Response status number. Use one of the status codes defined
51
68
        title (write)
52
69
            String. HTML page title. Used if write_html_head_foot is True, in
53
70
            the HTML title element text.
 
71
        styles (write)
 
72
            List of strings. Write a list of URLs to CSS files here, and they
 
73
            will be incorporated as <link rel="stylesheet" type="text/css">
 
74
            elements in the head, if write_html_head_foot is True.
 
75
            URLs should be relative to the IVLE root; they will be fixed up
 
76
            to be site-relative.
 
77
        scripts (write)
 
78
            List of strings. Write a list of URLs to JS files here, and they
 
79
            will be incorporated as <script type="text/javascript"> elements
 
80
            in the head, if write_html_head_foot is True.
 
81
            URLs should be relative to the IVLE root; they will be fixed up
 
82
            to be site-relative.
54
83
        write_html_head_foot (write)
55
84
            Boolean. If True, dispatch assumes that this is an XHTML page, and
56
85
            will immediately write a full HTML head, open the body element,
136
165
        self.func_write_html_head = write_html_head
137
166
        self.headers_written = False
138
167
 
 
168
        # Determine if the browser used the public host name to make the
 
169
        # request (in which case we are in "public mode")
 
170
        if req.hostname == conf.public_host:
 
171
            self.publicmode = True
 
172
        else:
 
173
            self.publicmode = False
 
174
 
139
175
        # Inherit values for the input members
 
176
        self.method = req.method
140
177
        self.uri = req.uri
141
178
        # Split the given path into the app (top-level dir) and sub-path
142
179
        # (after first stripping away the root directory)
143
 
        (self.app, self.path) = (
144
 
            common.util.split_path(common.util.unmake_path(req.uri)))
 
180
        path = common.util.unmake_path(req.uri)
 
181
        if self.publicmode:
 
182
            self.app = None
 
183
            self.path = path
 
184
        else:
 
185
            (self.app, self.path) = (common.util.split_path(path))
 
186
        self.username = None
 
187
        self.hostname = req.hostname
 
188
        self.headers_in = req.headers_in
 
189
        self.headers_out = req.headers_out
145
190
 
146
191
        # Default values for the output members
147
 
        self.status = Request.OK
 
192
        self.status = Request.HTTP_OK
148
193
        self.content_type = None        # Use Apache's default
149
194
        self.location = None
150
195
        self.title = None     # Will be set by dispatch before passing to app
 
196
        self.styles = []
 
197
        self.scripts = []
151
198
        self.write_html_head_foot = False
 
199
        self.got_common_vars = False
152
200
 
153
201
    def __writeheaders(self):
154
202
        """Writes out the HTTP and HTML headers before any real data is
192
240
        """Reads at most len bytes directly from the client. (See mod_python
193
241
        Request.read)."""
194
242
        if len is None:
195
 
            self.apache_req.read()
 
243
            return self.apache_req.read()
196
244
        else:
197
 
            self.apache_req.read(len)
 
245
            return self.apache_req.read(len)
198
246
 
199
247
    def throw_error(self, httpcode):
200
248
        """Writes out an HTTP error of the specified code. Raises an exception
215
263
        Request class.
216
264
        """
217
265
        mod_python.util.redirect(self.apache_req, location)
 
266
 
 
267
    def get_session(self):
 
268
        """Returns a mod_python Session object for this request.
 
269
        Note that this is dependent on mod_python and may need to change
 
270
        interface if porting away from mod_python."""
 
271
        # Cache the session object
 
272
        if not hasattr(self, 'session'):
 
273
            self.session = Session.Session(self.apache_req)
 
274
        return self.session
 
275
 
 
276
    def get_fieldstorage(self):
 
277
        """Returns a mod_python FieldStorage object for this request.
 
278
        Note that this is dependent on mod_python and may need to change
 
279
        interface if porting away from mod_python."""
 
280
        # Cache the fieldstorage object
 
281
        if not hasattr(self, 'fields'):
 
282
            self.fields = util.FieldStorage(self.apache_req)
 
283
        return self.fields
 
284
 
 
285
    def get_cgi_environ(self):
 
286
        """Returns the CGI environment emulation for this request. (Calls
 
287
        add_common_vars). The environment is returned as a mapping
 
288
        compatible with os.environ."""
 
289
        if not self.got_common_vars:
 
290
            self.apache_req.add_common_vars()
 
291
            self.got_common_vars = True
 
292
        return self.apache_req.subprocess_env