master
1import tornado.web
2import tornado.gen
3import survey
4import config
5
6import logging
7l = logging.getLogger(__name__)
8
9class BaseHandler(tornado.web.RequestHandler):
10 def get_current_user(self):
11 user_json = self.get_secure_cookie("%s_user" % config.APP_NAME)
12 if not user_json: return None
13 return tornado.escape.json_decode(user_json)
14
15 def render_string(self, template_name, **kwargs):
16 for var in ["pagename", "onload"]:
17 if var not in kwargs.keys(): kwargs[var] = None
18 return super(BaseHandler, self).render_string(template_name, **kwargs)
19
20class TemplateHandler(BaseHandler):
21 def get(self, pagename = None, id = None):
22 if pagename: self.render("%s.html" % pagename, pagename = pagename)
23 else: self.render("index.html", pagename = pagename)
24
25class MainHandler(BaseHandler):
26 @tornado.gen.coroutine
27 def get(self):
28 self.render("index.html")
29
30class PDFSurveyHandler(BaseHandler):
31 def get(self, pagename, id = None):
32 #Downlaod?
33 #self.set_header("Content-Disposition","attachment; filename=foo.pdf")
34 #TODO: Async support?
35 pdf = survey.getPDF(id)
36 self.set_header("Content-Type","application/pdf")
37 self.write(pdf)
38
39class DataHandler(BaseHandler):
40 def get(self, args):
41 #TODO: Get data from database, render as appropriate type
42 #TODO: render as appropriate type
43 #TODO: get from GET variables
44 filename = "data"
45 type = "csv"
46 download = False
47 if type == "csv":
48 self.set_header("Content-Type","application/CSV")
49 elif type == "xlsx":
50 self.set_header("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
51 else:
52 #TODO Send 500 error
53 pass
54 if download:
55 self.set_header("Content-Disposition","attachment; filename=%s.%s" % (filename, type))
56 data = ""
57 self.write(data)
58
59class MultiStaticFileHandler(tornado.web.StaticFileHandler):
60 def initialize(self, paths):
61 self.paths = paths
62
63 def get(self, path):
64 for p in self.paths:
65 try:
66 # Initialize the Static file with a path
67 super(MultiStaticFileHandler, self).initialize(p)
68 # Try to get the file
69 return super(MultiStaticFileHandler, self).get(path)
70 except tornado.web.HTTPError as exc:
71 # File not found, carry on
72 if exc.status_code == 404:
73 continue
74 raise
75 # Oops file not found anywhere!
76 raise tornado.web.HTTPError(404)