~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/wsgiapp.py

  • Committer: Michael Hudson
  • Date: 2008-06-16 07:27:01 UTC
  • mto: This revision was merged to the branch mainline in revision 164.
  • Revision ID: michael.hudson@canonical.com-20080616072701-u1eocfbrp3vl7hsw
less cherry

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import logging
 
2
import os
 
3
 
 
4
from paste import urlparser
 
5
from paste import request
 
6
from paste import httpexceptions
 
7
from paste.wsgiwrappers import WSGIRequest, WSGIResponse
 
8
 
 
9
from loggerhead.controllers.changelog_ui import ChangeLogUI
 
10
from loggerhead.controllers.inventory_ui import InventoryUI
 
11
from loggerhead.controllers.annotate_ui import AnnotateUI
 
12
from loggerhead.controllers.revision_ui import RevisionUI
 
13
 
 
14
 
 
15
static = os.path.join(
 
16
    os.path.dirname(__file__), 'static')
 
17
 
 
18
static_app = urlparser.make_static(None, static)
 
19
 
 
20
logging.basicConfig()
 
21
logging.getLogger().setLevel(logging.DEBUG)
 
22
 
 
23
class BranchWSGIApp(object):
 
24
 
 
25
    def __init__(self, history):
 
26
        self.history = history
 
27
        self.friendly_name = 'hello'
 
28
        self.log = logging.getLogger('hi')
 
29
 
 
30
    def url(self, *args, **kw):
 
31
        if isinstance(args[0], list):
 
32
            args = args[0]
 
33
        qs = ''
 
34
        for k, v in kw.iteritems():
 
35
            qs += '%s=%s'%(k, v)
 
36
        return request.construct_url(
 
37
            self._environ, script_name=self._url_base,
 
38
            path_info=self._url_base + '/'.join(args),
 
39
            querystring=qs)
 
40
 
 
41
    context_url = url
 
42
 
 
43
    def app(self, environ, start_response):
 
44
        req = WSGIRequest(environ)
 
45
        response = WSGIResponse()
 
46
        response.headers['Content-Type'] = 'text/plain'
 
47
        self._url_base = environ['SCRIPT_NAME']
 
48
        self._environ = environ
 
49
        path = request.path_info_pop(environ)
 
50
        if not path:
 
51
            raise httpexceptions.HTTPMovedPermanently('changes')
 
52
        elif path == 'changes':
 
53
            c = ChangeLogUI(self)
 
54
            c.default(req, response)
 
55
        elif path == 'annotate':
 
56
            c = AnnotateUI(self)
 
57
            c.default(req, response)
 
58
        elif path == 'files':
 
59
            c = InventoryUI(self)
 
60
            c.default(req, response)
 
61
        elif path == 'revision':
 
62
            c = RevisionUI(self)
 
63
            c.default(req, response)
 
64
        elif path == 'static':
 
65
            return static_app(environ, start_response)
 
66
        return response(environ, start_response)
 
67