master
Raw Download raw file
 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)