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()))