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