lib/handler.py
author Tero Marttila <terom@fixme.fi>
Sat, 07 Feb 2009 06:54:52 +0200
branchsites
changeset 30 a86a25a9f75b
parent 10 d83b10c210e3
child 31 107062ebb6f9
permissions -rw-r--r--
route requests through sites/www.qmsk.net, although still hardcoded
7
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    The actual application behaviour, i.e. generating a Response from a Request :)
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
30
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
     5
class Handler (object) :
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
     6
    """
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
     7
        A handler handles a Request, returning a Response
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
     8
    """
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
     9
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    10
    def __init__ (self, func, *args, **kwargs) :
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    11
        self.func = func
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    12
        self.args = args
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    13
        self.kwargs = kwargs
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    14
    
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    15
    def handle_request (self, request) :
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    16
        """
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    17
            Handle the request, returning a Response object
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    18
        """
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    19
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    20
        return self.func(request, *self.args, **self.kwargs)
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    21
a86a25a9f75b route requests through sites/www.qmsk.net, although still hardcoded
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    22
# fs handler
9
2a47b00f60b0 page list + menu
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    23
import http, page, menu, template
7
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
def handle_request (request) :
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    """
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        Take the Request, and return a Response
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    """
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
8
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    30
    # determine the page name
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    31
    page_name = request.get_page_name()
7
d6a8258bd90e YES YES MOAR WSGI - Hello World
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
8
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    33
    # get the page handler
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    34
    p = page.lookup(page_name)
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    35
10
d83b10c210e3 some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents: 9
diff changeset
    36
    # bind to request
d83b10c210e3 some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents: 9
diff changeset
    37
    p.bind_request(request)
d83b10c210e3 some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents: 9
diff changeset
    38
8
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    39
    # render the template
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    40
    response_data = template.render("layout",
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    41
        site_root_url   = request.get_script_dir(),
10
d83b10c210e3 some vodoo for generating correct URLs
Tero Marttila <terom@fixme.fi>
parents: 9
diff changeset
    42
        site_page_url   = request.get_page_prefix(),
9
2a47b00f60b0 page list + menu
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    43
        page            = p,
2a47b00f60b0 page list + menu
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    44
        menu            = menu.Menu(p),
8
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    45
    )
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    46
    
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    47
    # return the response
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    48
    return http.Response(response_data)
0ce1f471e9d7 and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    49