~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:
26
26
# Handles authentication (not authorization).
27
27
# Then passes the request along to the appropriate ivle app.
28
28
 
29
 
import mod_python
30
29
from mod_python import apache
31
 
 
32
30
import os
33
31
import os.path
34
32
import conf
35
33
import conf.apps
36
 
import apps
37
34
 
38
35
from request import Request
39
36
import html
40
 
from common import util
 
37
import common.util
 
38
from common.util import make_path
41
39
 
42
40
def handler(req):
43
41
    """Handles a request which may be to anywhere in the site except media.
46
44
    req: An Apache request object.
47
45
    """
48
46
    # Make the request object into an IVLE request which can be passed to apps
49
 
    apachereq = req
50
47
    req = Request(req, html.write_html_head)
51
48
 
52
 
    # Check req.app to see if it is valid. 404 if not.
53
 
    if req.app is not None and req.app not in conf.apps.app_url:
54
 
        # TODO: Nicer 404 message?
55
 
        req.throw_error(Request.HTTP_NOT_FOUND)
56
 
 
57
 
    # app is the App object for the chosen app
58
 
    if req.app is None:
59
 
        app = conf.apps.app_url[conf.default_app]
60
 
    else:
61
 
        app = conf.apps.app_url[req.app]
62
 
 
63
 
    # Check if app requires auth. If so, perform authentication and login.
64
 
    if app.requireauth:
65
 
        # TODO: Perform authentication
66
 
        pass
67
 
 
68
 
    # If user did not specify an app, HTTP redirect to default app and exit.
69
 
    if req.app is None:
70
 
        req.throw_redirect(util.make_path(conf.default_app))
71
 
 
72
 
    # Set the default title to the app's tab name, if any. Otherwise URL name.
73
 
    if app.name is not None:
74
 
        req.title = app.name
75
 
    else:
76
 
        req.title = req.app
 
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.
77
56
 
78
57
    # Call the specified app with the request object
79
 
    apps.call_app(app.dir, req)
80
 
 
81
 
    # MAKE SURE we write the HTTP (and possibly HTML) header. This
82
 
    # wouldn't happen if nothing else ever got written, so we have to make
83
 
    # sure.
84
 
    req.ensure_headers_written()
 
58
    # TODO: Call a real app.
 
59
    test_app(req)
85
60
 
86
61
    # When done, write out the HTML footer if the app has requested it
87
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)
88
66
        html.write_html_foot(req)
89
67
 
90
68
    # Have Apache output its own HTML code if non-200 status codes were found
91
69
    return req.status
92
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')