~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 05:31:41 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:43
src/common/util.py: Added functions unmake_path and split_path.
src/dispatch/request: Now properly writes "app" and "path" attributes.
src/dispatch: Test code now displays app separately from path.

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
from request import Request
 
36
import html
 
37
import common.util
 
38
from common.util import make_path
 
39
 
 
40
def handler(req):
 
41
    """Handles a request which may be to anywhere in the site except media.
 
42
    Intended to be called by mod_python, as a handler.
 
43
 
 
44
    req: An Apache request object.
 
45
    """
 
46
    # Make the request object into an IVLE request which can be passed to apps
 
47
    req = Request(req, html.write_html_head)
 
48
 
 
49
    # TODO: Check req.app to see if it is valid. 404 if not.
 
50
 
 
51
    # TODO: Check if app requires auth. If so, perform authentication and
 
52
    # login.
 
53
 
 
54
    # TODO: If user did not specify an app, HTTP redirect to default app and
 
55
    # exit.
 
56
 
 
57
    # Call the specified app with the request object
 
58
    # TODO: Call a real app.
 
59
    test_app(req)
 
60
 
 
61
    # When done, write out the HTML footer if the app has requested it
 
62
    if req.write_html_head_foot:
 
63
        # MAKE SURE we write the head (we would never do that if the app, nor
 
64
        # write_html_foot, ever writes anything - so just to be sure).
 
65
        req.write("", flush=0)
 
66
        html.write_html_foot(req)
 
67
 
 
68
    # Have Apache output its own HTML code if non-200 status codes were found
 
69
    return req.status
 
70
 
 
71
def test_app(req):
 
72
    """This (temporary) function serves as an IVLE application. It takes an
 
73
    IVLE request and conforms to the application API."""
 
74
    # TEMP: Dummy (test) handler
 
75
 
 
76
    # Set request attributes
 
77
    req.content_type = "text/html"
 
78
    req.write_html_head_foot = True     # Have dispatch print head and foot
 
79
 
 
80
    # Start writing data
 
81
    req.write("<p>Hello, IVLE!</p>\n")
 
82
    req.write('<p>')
 
83
    if req.app == None:
 
84
        req.write('<b>No app specified</b>')
 
85
    else:
 
86
        req.write('<b>' + req.app + '</b> ')
 
87
        req.write('<img src="' + make_path("media/images/mime/dir.png")
 
88
            + '" /> ')
 
89
        req.write(str(req.path))
 
90
    req.write("</p>\n")
 
91
 
 
92
    print_apps_list(req)
 
93
 
 
94
def print_apps_list(file):
 
95
    """Prints all app tabs, as a UL. Prints a list item for each app that has
 
96
    a tab.
 
97
 
 
98
    file: Object with a "write" method - ie. the request object.
 
99
    Reads from: conf
 
100
    """
 
101
    file.write('<ul class="apptabs">\n')
 
102
 
 
103
    for urlname in conf.apps.apps_in_tabs:
 
104
        app = conf.apps.app_url[urlname]
 
105
        file.write('  <li><a href="')
 
106
        file.write(make_path(app.dir))
 
107
        file.write('">')
 
108
        file.write(app.name)
 
109
        file.write('</a></li>\n')
 
110
 
 
111
    file.write('</ul>\n')