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

« back to all changes in this revision

Viewing changes to ivle/dispatch/request.py

  • Committer: Matt Giuca
  • Date: 2009-12-01 04:27:58 UTC
  • mfrom: (1164.2.46 sphinx-docs)
  • Revision ID: matt.giuca@gmail.com-20091201042758-wuxd9bdec00c283i
Merged sphinx-docs branch. This adds Sphinx documentation for the entire IVLE system (for system administrators and developers), and removes all of our random old document files (all either irrelevant, or moved into the Sphinx docs nicely). Currently incomplete, but ready to merge.

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
39
import ivle.database
38
40
from ivle.webapp.base.plugins import CookiePlugin
77
79
        location (write)
78
80
            String. Response "Location" header value. Used with HTTP redirect
79
81
            responses.
80
 
        styles (write)
81
 
            List of strings. Write a list of URLs to CSS files here, and they
82
 
            will be incorporated as <link rel="stylesheet" type="text/css">
83
 
            elements in the head, if write_html_head_foot is True.
84
 
            URLs should be relative to the IVLE root; they will be fixed up
85
 
            to be site-relative.
86
 
        scripts (write)
87
 
            List of strings. Write a list of URLs to JS files here, and they
88
 
            will be incorporated as <script type="text/javascript"> elements
89
 
            in the head, if write_html_head_foot is True.
90
 
            URLs should be relative to the IVLE root; they will be fixed up
91
 
            to be site-relative.
92
 
        scripts_init (write)
93
 
            List of strings. Write a list of JS function names, and they
94
 
            will be added as window.addListener('load', ..., false); calls
95
 
            in the head, if write_html_head_foot is True.
96
 
            This is the propper way to specify functions that need to run at 
97
 
            page load time.
98
82
    """
99
83
 
100
84
    # Special code for an OK response.
104
88
 
105
89
    # HTTP status codes
106
90
 
107
 
    HTTP_CONTINUE                     = 100
108
 
    HTTP_SWITCHING_PROTOCOLS          = 101
109
 
    HTTP_PROCESSING                   = 102
110
91
    HTTP_OK                           = 200
111
 
    HTTP_CREATED                      = 201
112
 
    HTTP_ACCEPTED                     = 202
113
 
    HTTP_NON_AUTHORITATIVE            = 203
114
 
    HTTP_NO_CONTENT                   = 204
115
 
    HTTP_RESET_CONTENT                = 205
116
 
    HTTP_PARTIAL_CONTENT              = 206
117
 
    HTTP_MULTI_STATUS                 = 207
118
 
    HTTP_MULTIPLE_CHOICES             = 300
119
 
    HTTP_MOVED_PERMANENTLY            = 301
120
92
    HTTP_MOVED_TEMPORARILY            = 302
121
 
    HTTP_SEE_OTHER                    = 303
122
 
    HTTP_NOT_MODIFIED                 = 304
123
 
    HTTP_USE_PROXY                    = 305
124
 
    HTTP_TEMPORARY_REDIRECT           = 307
125
 
    HTTP_BAD_REQUEST                  = 400
126
 
    HTTP_UNAUTHORIZED                 = 401
127
 
    HTTP_PAYMENT_REQUIRED             = 402
128
93
    HTTP_FORBIDDEN                    = 403
129
94
    HTTP_NOT_FOUND                    = 404
130
 
    HTTP_METHOD_NOT_ALLOWED           = 405
131
 
    HTTP_NOT_ACCEPTABLE               = 406
132
 
    HTTP_PROXY_AUTHENTICATION_REQUIRED= 407
133
 
    HTTP_REQUEST_TIME_OUT             = 408
134
 
    HTTP_CONFLICT                     = 409
135
 
    HTTP_GONE                         = 410
136
 
    HTTP_LENGTH_REQUIRED              = 411
137
 
    HTTP_PRECONDITION_FAILED          = 412
138
 
    HTTP_REQUEST_ENTITY_TOO_LARGE     = 413
139
 
    HTTP_REQUEST_URI_TOO_LARGE        = 414
140
 
    HTTP_UNSUPPORTED_MEDIA_TYPE       = 415
141
 
    HTTP_RANGE_NOT_SATISFIABLE        = 416
142
 
    HTTP_EXPECTATION_FAILED           = 417
143
 
    HTTP_UNPROCESSABLE_ENTITY         = 422
144
 
    HTTP_LOCKED                       = 423
145
 
    HTTP_FAILED_DEPENDENCY            = 424
146
95
    HTTP_INTERNAL_SERVER_ERROR        = 500
147
 
    HTTP_NOT_IMPLEMENTED              = 501
148
 
    HTTP_BAD_GATEWAY                  = 502
149
 
    HTTP_SERVICE_UNAVAILABLE          = 503
150
 
    HTTP_GATEWAY_TIME_OUT             = 504
151
 
    HTTP_VERSION_NOT_SUPPORTED        = 505
152
 
    HTTP_VARIANT_ALSO_VARIES          = 506
153
 
    HTTP_INSUFFICIENT_STORAGE         = 507
154
 
    HTTP_NOT_EXTENDED                 = 510
155
96
 
156
97
    def __init__(self, req, config):
157
98
        """Create an IVLE request from a mod_python one.
177
118
        self.uri = req.uri
178
119
        # Split the given path into the app (top-level dir) and sub-path
179
120
        # (after first stripping away the root directory)
180
 
        path = ivle.util.unmake_path(req.uri)
181
 
        (self.app, self.path) = (ivle.util.split_path(path))
 
121
        (self.app, self.path) = (ivle.util.split_path(req.uri))
182
122
        self.user = None
183
123
        self.hostname = req.hostname
184
124
        self.headers_in = req.headers_in
192
132
        self.status = Request.HTTP_OK
193
133
        self.content_type = None        # Use Apache's default
194
134
        self.location = None
195
 
        self.styles = []
196
 
        self.scripts = []
197
 
        self.scripts_init = []
198
135
        # In some cases we don't want the template JS (such as the username
199
136
        # and public FQDN) in the output HTML. In that case, set this to 0.
200
137
        self.write_javascript_settings = True
251
188
                for cookie in plugin.cookies:
252
189
                    self.add_cookie(mod_python.Cookie.Cookie(cookie, '',
253
190
                                                    expires=1, path='/'))
254
 
        self.throw_redirect(ivle.util.make_path('')) 
 
191
        self.throw_redirect(self.make_path(''))
255
192
 
256
193
 
257
194
    def flush(self):
291
228
        else:
292
229
            mod_python.Cookie.add_cookie(self.apache_req, cookie, value, **attributes)
293
230
 
 
231
    def make_path(self, path):
 
232
        """Prepend the IVLE URL prefix to the given path.
 
233
 
 
234
        This is used when generating URLs to send to the client.
 
235
 
 
236
        This method is DEPRECATED. We no longer support use of a prefix.
 
237
        """
 
238
        return os.path.join(self.config['urls']['root'], path)
 
239
 
294
240
    def get_session(self):
295
241
        """Returns a mod_python Session object for this request.
296
242
        Note that this is dependent on mod_python and may need to change
323
269
            self.got_common_vars = True
324
270
        return self.apache_req.subprocess_env
325
271
 
326
 
    @staticmethod
327
 
    def get_http_codename(code):
328
 
        """Given a HTTP error code int, returns a (name, description)
329
 
        pair, suitable for displaying to the user.
330
 
        May return (None,None) if code is unknown.
331
 
        Only lists common 4xx and 5xx codes (since this is just used
332
 
        to display throw_error error messages).
333
 
        """
334
 
        try:
335
 
            return http_codenames[code]
336
 
        except KeyError:
337
 
            return None, None
338
 
 
339
 
# Human strings for HTTP response codes
340
 
http_codenames = {
341
 
    Request.HTTP_BAD_REQUEST:
342
 
        ("Bad Request",
343
 
        "Your browser sent a request IVLE did not understand."),
344
 
    Request.HTTP_UNAUTHORIZED:
345
 
        ("Unauthorized",
346
 
        "You are not allowed to view this part of IVLE."),
347
 
    Request.HTTP_FORBIDDEN:
348
 
        ("Forbidden",
349
 
        "You are not allowed to view this part of IVLE."),
350
 
    Request.HTTP_NOT_FOUND:
351
 
        ("Not Found",
352
 
        "The application or file you requested does not exist."),
353
 
    Request.HTTP_METHOD_NOT_ALLOWED:
354
 
        ("Method Not Allowed",
355
 
        "Your browser is interacting with IVLE in the wrong way."
356
 
        "This is probably a bug in IVLE. "
357
 
        "Please report it to the administrators."),
358
 
    Request.HTTP_INTERNAL_SERVER_ERROR:
359
 
        ("Internal Server Error",
360
 
        "An unknown error occured in IVLE."),
361
 
    Request.HTTP_NOT_IMPLEMENTED:
362
 
        ("Not Implemented",
363
 
        "The application or file you requested has not been implemented "
364
 
        "in IVLE."),
365
 
    Request.HTTP_SERVICE_UNAVAILABLE:
366
 
        ("Service Unavailable",
367
 
        "IVLE is currently experiencing technical difficulties. "
368
 
        "Please try again later."),
369
 
}