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

« back to all changes in this revision

Viewing changes to src/dispatch/__init__.py

  • Committer: mattgiuca
  • Date: 2007-12-12 01:38:59 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:37
Added src/dispatch/request.py: The IVLE Request class.
dispatch module now transforms the Apache request object into an IVLE one, and
goes through it. (Note this temporarily means the content type is no longer
set, because the request object is missing functionality).

Added brief description of this object in notes/apps/dispatch.txt.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# IVLE
 
2
# Copyright (C) 2007-2008 The University of Melbourne
 
3
#
 
4
# This program is free software; you can redistribute it and/or modify
 
5
# it under the terms of the GNU General Public License as published by
 
6
# the Free Software Foundation; either version 2 of the License, or
 
7
# (at your option) any later version.
 
8
#
 
9
# This program is distributed in the hope that it will be useful,
 
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
# GNU General Public License for more details.
 
13
#
 
14
# You should have received a copy of the GNU General Public License
 
15
# along with this program; if not, write to the Free Software
 
16
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
17
 
 
18
# Module: dispatch
 
19
# Author: Matt Giuca
 
20
# Date: 11/12/2007
 
21
 
 
22
# This is a mod_python handler program. The correct way to call it is to have
 
23
# Apache send all requests to be handled by the module 'dispatch'.
 
24
 
 
25
# Top-level handler. Handles all requests to all pages in IVLE.
 
26
# Handles authentication (not authorization).
 
27
# Then passes the request along to the appropriate ivle app.
 
28
 
 
29
from mod_python import apache
 
30
import os
 
31
import os.path
 
32
import conf
 
33
import conf.apps
 
34
 
 
35
import request
 
36
 
 
37
root_dir = conf.root_dir
 
38
 
 
39
def handler(req):
 
40
    """Handles a request which may be to anywhere in the site except media.
 
41
    Intended to be called by mod_python, as a handler.
 
42
 
 
43
    req: An Apache request object.
 
44
    """
 
45
    # Make the request object into an IVLE request which can be passed to apps
 
46
    req = request.Request(req)
 
47
 
 
48
    # TEMP: Dummy (test) handler
 
49
    req.content_type = "text/html"
 
50
    req.write("<html>\n")
 
51
    req.write("<p>Hello, IVLE!</p>\n")
 
52
    req.write('<p><img src="' + make_path("media/images/mime/dir.png")
 
53
        + '" /> ')
 
54
    req.write(str(req.uri))
 
55
    req.write("</p>\n")
 
56
 
 
57
    print_apps_list(req)
 
58
 
 
59
    req.write("</html>")
 
60
    return apache.OK
 
61
 
 
62
def make_path(path):
 
63
    """Given a path relative to the IVLE root, makes the path relative to the
 
64
    site root using conf.root_dir. This path can be used in URLs sent to the
 
65
    client."""
 
66
    return os.path.join(root_dir, path)
 
67
 
 
68
def print_apps_list(file):
 
69
    """Prints all app tabs, as a UL. Prints a list item for each app that has
 
70
    a tab.
 
71
 
 
72
    file: Object with a "write" method - ie. the request object.
 
73
    Reads from: conf
 
74
    """
 
75
    file.write('<ul class="apptabs">\n')
 
76
 
 
77
    for urlname in conf.apps.apps_in_tabs:
 
78
        app = conf.apps.app_url[urlname]
 
79
        file.write('  <li><a href="')
 
80
        file.write(make_path(app.dir))
 
81
        file.write('">')
 
82
        file.write(app.name)
 
83
        file.write('</a></li>\n')
 
84
 
 
85
    file.write('</ul>\n')