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

« back to all changes in this revision

Viewing changes to www/dispatch/request.py

  • Committer: mattgiuca
  • Date: 2008-02-05 01:51:26 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:411
Renamed lib/fileservice to lib/fileservice_lib (naming conflict).
Added new app: fileservice. This app replaces the old one that was deleted -
it simply calls fileservice_lib.handle, and that's it (so it functions exactly
the same).

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
import common.util
27
27
import mod_python
28
28
from mod_python import (util, Session)
 
29
import conf
29
30
 
30
31
class Request:
31
32
    """An IVLE request object. This is presented to the IVLE apps as a way of
45
46
        username (read)
46
47
            String. Login name of the user who is currently logged in, or
47
48
            None.
 
49
        hostname (read)
 
50
            String. Hostname the server is running on.
48
51
        headers_in (read)
49
52
            Table object representing headers sent by the client.
50
53
        headers_out (read, can be written to)
51
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).
52
59
 
53
60
        status (write)
54
61
            Int. Response status number. Use one of the status codes defined
158
165
        self.func_write_html_head = write_html_head
159
166
        self.headers_written = False
160
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
 
161
175
        # Inherit values for the input members
162
176
        self.method = req.method
163
177
        self.uri = req.uri
164
178
        # Split the given path into the app (top-level dir) and sub-path
165
179
        # (after first stripping away the root directory)
166
 
        (self.app, self.path) = (
167
 
            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))
168
186
        self.username = None
 
187
        self.hostname = req.hostname
169
188
        self.headers_in = req.headers_in
170
189
        self.headers_out = req.headers_out
171
190
 
177
196
        self.styles = []
178
197
        self.scripts = []
179
198
        self.write_html_head_foot = False
 
199
        self.got_common_vars = False
180
200
 
181
201
    def __writeheaders(self):
182
202
        """Writes out the HTTP and HTML headers before any real data is
204
224
 
205
225
        if not self.headers_written:
206
226
            self.__writeheaders()
207
 
        self.apache_req.write(string, flush)
 
227
        if isinstance(string, unicode):
 
228
            # Encode unicode strings as UTF-8
 
229
            # (Otherwise cannot handle being written to a bytestream)
 
230
            self.apache_req.write(string.encode('utf8'), flush)
 
231
        else:
 
232
            # 8-bit clean strings just get written directly.
 
233
            # This includes binary strings.
 
234
            self.apache_req.write(string, flush)
208
235
 
209
236
    def flush(self):
210
237
        """Flushes the output buffer."""
220
247
        """Reads at most len bytes directly from the client. (See mod_python
221
248
        Request.read)."""
222
249
        if len is None:
223
 
            self.apache_req.read()
 
250
            return self.apache_req.read()
224
251
        else:
225
 
            self.apache_req.read(len)
 
252
            return self.apache_req.read(len)
226
253
 
227
254
    def throw_error(self, httpcode):
228
255
        """Writes out an HTTP error of the specified code. Raises an exception
250
277
        interface if porting away from mod_python."""
251
278
        # Cache the session object
252
279
        if not hasattr(self, 'session'):
253
 
            self.session = Session.Session(self.apache_req)
 
280
            self.session = Session.FileSession(self.apache_req)
254
281
        return self.session
255
282
 
256
283
    def get_fieldstorage(self):
261
288
        if not hasattr(self, 'fields'):
262
289
            self.fields = util.FieldStorage(self.apache_req)
263
290
        return self.fields
 
291
 
 
292
    def get_cgi_environ(self):
 
293
        """Returns the CGI environment emulation for this request. (Calls
 
294
        add_common_vars). The environment is returned as a mapping
 
295
        compatible with os.environ."""
 
296
        if not self.got_common_vars:
 
297
            self.apache_req.add_common_vars()
 
298
            self.got_common_vars = True
 
299
        return self.apache_req.subprocess_env