-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
executable file
·60 lines (52 loc) · 1.78 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.api import taskqueue
import page
class LookupHandler(webapp.RequestHandler):
def get(self, key):
if key and len(key):
url = page.get(key)
if url:
return self.redirect(url, permanent=True)
self.response.set_status(404)
class InsertHandler(webapp.RequestHandler):
def post(self):
url = self.request.get('url')
if url and len(url):
deferred = self.request.get('deferred')
key = page.create(url)
if not deferred:
url = page.resolve(url)
if url:
page.store(key, url)
else:
taskqueue.add(url='/deferred', params=dict(url=url, key=key))
if key and url:
self.response.set_status(201)
self.response.headers['Location'] = '%s/%s' % (self.request.host_url, key)
self.response.clear()
else:
self.response.set_status(404)
else:
self.response.set_status(400)
class DeferredInsertHandler(webapp.RequestHandler):
def post(self):
url = self.request.get('url')
key = self.request.get('key')
final_url = page.resolve(url)
if final_url:
page.store(key, final_url)
else:
import logging
logging.info('Error on url %s' % url)
self.response.set_status(404)
def main():
routes = [
('/', InsertHandler),
('/deferred', DeferredInsertHandler),
('/(\w+)', LookupHandler),
]
application = webapp.WSGIApplication(routes, debug=False)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()