Mercurial > wiki
comparison server.py @ 28:602baadb535a default tip
Added a requesthandler infrastructure to atulweb.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Wed, 11 Mar 2009 23:19:18 -0500 |
parents | 52f02c6edfa9 |
children |
comparison
equal
deleted
inserted
replaced
27:a42400d52a1e | 28:602baadb535a |
---|---|
6 changesets = { | 6 changesets = { |
7 0: dict(date='Thu Feb 12 2009 19:03:56 GMT-0800 (PST)', | 7 0: dict(date='Thu Feb 12 2009 19:03:56 GMT-0800 (PST)', |
8 content=open('static-files/wiki.txt', 'r').read()) | 8 content=open('static-files/wiki.txt', 'r').read()) |
9 } | 9 } |
10 | 10 |
11 CID_PATH = re.compile(r'/(\d+)') | 11 class RequestHandler(object): |
12 NOUNS = {'csid': re.compile(r'\d+')} | |
12 | 13 |
13 @atulweb.wsgiapp | 14 def status(self): |
14 def application(environ, start_response): | 15 'GET /status' |
15 if environ['REQUEST_METHOD'] == 'GET': | 16 |
16 path = environ['PATH_INFO'] | 17 return atulweb.Response(status, 'application/json') |
17 if path == '/status': | 18 |
18 return atulweb.Response(status, 'application/json') | 19 def get_doc(self, csid): |
20 'GET /{csid}' | |
21 | |
22 csid = int(csid) | |
23 if csid in changesets: | |
24 return atulweb.Response(changesets[csid], | |
25 'application/json') | |
19 else: | 26 else: |
20 match = CID_PATH.match(path) | 27 raise atulweb.HttpError('not found') |
21 if match: | 28 |
22 cid = int(match.group(1)) | 29 def put_doc(self, csid): |
23 if cid in changesets: | 30 'PUT /{csid}' |
24 return atulweb.Response(changesets[cid], | 31 |
25 'application/json') | 32 csid = int(csid) |
26 else: | 33 if csid == status['max_changeset'] + 1: |
27 raise atulweb.HttpError('not found') | 34 status['max_changeset'] = csid |
28 else: | 35 req = atulweb.Request(self.environ) |
29 raise atulweb.HttpError('not found') | 36 try: |
30 elif environ['REQUEST_METHOD'] == 'PUT': | 37 changeset = req.get_input('application/json') |
31 match = CID_PATH.match(environ['PATH_INFO']) | 38 except ValueError: |
32 if match: | |
33 cid = int(match.group(1)) | |
34 if cid == status['max_changeset'] + 1: | |
35 status['max_changeset'] = cid | |
36 req = atulweb.Request(environ) | |
37 try: | |
38 changeset = req.get_input('application/json') | |
39 except ValueError: | |
40 raise atulweb.HttpError('bad request', | |
41 'invalid json data') | |
42 changesets[cid] = changeset | |
43 return atulweb.Response('changeset committed.') | |
44 else: | |
45 raise atulweb.HttpError('bad request', | 39 raise atulweb.HttpError('bad request', |
46 'invalid changeset id') | 40 'invalid json data') |
41 changesets[csid] = changeset | |
42 return atulweb.Response('changeset committed.') | |
47 else: | 43 else: |
48 raise atulweb.HttpError('bad request') | 44 raise atulweb.HttpError('bad request', |
49 else: | 45 'invalid changeset id') |
50 raise atulweb.HttpError('method not allowed') | |
51 | 46 |
52 if __name__ == '__main__': | 47 if __name__ == '__main__': |
53 atulweb.main(application) | 48 atulweb.main(atulweb.make_wsgiapp(RequestHandler())) |