24
by mattgiuca
src: Added basic directory hierarchy and dummy code for top-level dispatch |
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 |
|
28
by mattgiuca
src/conf: Added a handful of configuration files with some basic info needed |
30 |
import os |
31 |
import os.path |
|
32 |
import conf |
|
32
by mattgiuca
src/dispatch: Added code to fetch and print the list of apps with links. |
33 |
import conf.apps |
34 |
||
37
by mattgiuca
Added src/dispatch/request.py: The IVLE Request class. |
35 |
import request |
36 |
||
32
by mattgiuca
src/dispatch: Added code to fetch and print the list of apps with links. |
37 |
root_dir = conf.root_dir |
24
by mattgiuca
src: Added basic directory hierarchy and dummy code for top-level dispatch |
38 |
|
39 |
def handler(req): |
|
32
by mattgiuca
src/dispatch: Added code to fetch and print the list of apps with links. |
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 |
"""
|
|
37
by mattgiuca
Added src/dispatch/request.py: The IVLE Request class. |
45 |
# Make the request object into an IVLE request which can be passed to apps
|
46 |
req = request.Request(req) |
|
47 |
||
24
by mattgiuca
src: Added basic directory hierarchy and dummy code for top-level dispatch |
48 |
# TEMP: Dummy (test) handler
|
28
by mattgiuca
src/conf: Added a handful of configuration files with some basic info needed |
49 |
req.content_type = "text/html" |
32
by mattgiuca
src/dispatch: Added code to fetch and print the list of apps with links. |
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 |
+ '" /> ') |
|
24
by mattgiuca
src: Added basic directory hierarchy and dummy code for top-level dispatch |
54 |
req.write(str(req.uri)) |
32
by mattgiuca
src/dispatch: Added code to fetch and print the list of apps with links. |
55 |
req.write("</p>\n") |
56 |
||
57 |
print_apps_list(req) |
|
58 |
||
59 |
req.write("</html>") |
|
24
by mattgiuca
src: Added basic directory hierarchy and dummy code for top-level dispatch |
60 |
return apache.OK |
61 |
||
32
by mattgiuca
src/dispatch: Added code to fetch and print the list of apps with links. |
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') |