comparison simpypi/wsgi.py @ 14:7f426a77e192

mv dispatcher to wsgi
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 28 Feb 2012 14:45:50 -0800
parents simpypi/dispatcher.py@1cdb25cef7ee
children 90777e79ea13
comparison
equal deleted inserted replaced
13:fc44434040e5 14:7f426a77e192
1 """
2 request dispatcher:
3 data persisting across requests should go here
4 """
5
6 import os
7 #from handlers import Index
8 from webob import Request, Response, exc
9
10 here = os.path.dirname(os.path.abspath(__file__))
11
12 class Dispatcher(object):
13
14 ### class level variables
15 defaults = {'auto_reload': 'False',
16 'template_dirs': '',
17 }
18
19 def __init__(self, directory, index=None):
20
21 self.directory = directory
22 assert os.path.exists(directory)
23
24 # set instance parameters from kw and defaults
25 # XXX unneeded for now
26 # for key in self.defaults:
27 # setattr(self, key, kw.get(key, self.defaults[key]))
28 # self.auto_reload = self.auto_reload.lower() == 'true'
29
30 # request handlers
31 self.handlers = dict([(method, getattr(self, method))
32 for method in ('GET', 'POST')])
33 # XXX unneeded for now
34 # self.handlers = [ Index ]
35
36 # cache index HTML
37 self.index = index or os.path.join(here, 'templates', 'index.html')
38 assert os.path.exists(self.index)
39 self.index = file(self.index).read()
40
41 # template directories
42 # self.template_dirs = self.template_dirs.split()
43 # self.template_dirs = [os.path.join(here, 'templates')]
44
45 def __call__(self, environ, start_response):
46
47 # get a request object
48 request = Request(environ)
49
50 # get the path
51 # path = request.path_info.strip('/').split('/')
52 # if path == ['']:
53 # path = []
54 # request.environ['path'] = path
55
56 # match the request to a handler
57 handler = self.handlers.get(request.method)
58 if handler:
59 res = handler(request)
60 else:
61 res = exc.HTTPNotFound()
62 # for h in self.handlers:
63 # handler = h.match(self, request)
64 # if handler is not None:
65 # break
66 # else:
67 # handler = exc.HTTPNotFound
68
69 # get response
70 # res = handler()
71 return res(environ, start_response)
72
73 def GET(self, request):
74 return Response(body=self.index, content_type='text/html')
75
76 def POST(self, request):
77 """handle posting a package"""
78
79 # get the package
80 package = self.request.POST.get('package')
81
82 # redirect to the main page
83 # TODO
84 # self.redirect(self.link(self.handler_path))