]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/python | |
2 | ||
3 | import httplib | |
4 | import time | |
5 | import tornado.locale | |
6 | import tornado.web | |
7 | ||
8 | import backend | |
9 | ||
10 | class BaseHandler(tornado.web.RequestHandler): | |
11 | def get_account(self, uid): | |
12 | # Find the name of the author | |
13 | return self.accounts.find(uid) | |
14 | ||
15 | def get_user_locale(self): | |
16 | DEFAULT_LOCALE = tornado.locale.get("en_US") | |
17 | ALLOWED_LOCALES = \ | |
18 | [tornado.locale.get(l) for l in tornado.locale.get_supported_locales(None)] | |
19 | ||
20 | # One can append "?locale=de" to mostly and URI on the site and | |
21 | # another output that guessed. | |
22 | locale = self.get_argument("locale", None) | |
23 | if locale: | |
24 | locale = tornado.locale.get(locale) | |
25 | for locale in ALLOWED_LOCALES: | |
26 | return locale | |
27 | ||
28 | # If no locale was provided we guess what the browser sends us | |
29 | locale = self.get_browser_locale() | |
30 | if locale in ALLOWED_LOCALES: | |
31 | return locale | |
32 | ||
33 | # If no one of the cases above worked we use our default locale | |
34 | return DEFAULT_LOCALE | |
35 | ||
36 | @property | |
37 | def render_args(self): | |
38 | return { | |
39 | "hostname" : self.request.host, | |
40 | "lang" : self.locale.code[:2], | |
41 | "year" : time.strftime("%Y"), | |
42 | } | |
43 | ||
44 | def render(self, *args, **kwargs): | |
45 | kwargs.update(self.render_args) | |
46 | tornado.web.RequestHandler.render(self, *args, **kwargs) | |
47 | ||
48 | def render_string(self, *args, **kwargs): | |
49 | kwargs.update(self.render_args) | |
50 | return tornado.web.RequestHandler.render_string(self, *args, **kwargs) | |
51 | ||
52 | def get_error_html(self, status_code, **kwargs): | |
53 | if status_code in (404, 500): | |
54 | render_args = ({ | |
55 | "code" : status_code, | |
56 | "exception" : kwargs.get("exception", None), | |
57 | "message" : httplib.responses[status_code], | |
58 | }) | |
59 | return self.render_string("error-%s.html" % status_code, **render_args) | |
60 | else: | |
61 | return tornado.web.RequestHandler.get_error_html(self, status_code, **kwargs) | |
62 | ||
63 | @property | |
64 | def accounts(self): | |
65 | return backend.Accounts() | |
66 | ||
67 | @property | |
68 | def banners(self): | |
69 | return backend.Banners() | |
70 | ||
71 | @property | |
72 | def mirrors(self): | |
73 | return backend.Mirrors() | |
74 | ||
75 | @property | |
76 | def news(self): | |
77 | return backend.News() | |
78 | ||
79 | @property | |
80 | def config(self): | |
81 | return backend.Config() | |
82 | ||
83 | @property | |
84 | def releases(self): | |
85 | return backend.Releases() | |
86 | ||
87 | @property | |
88 | def banners(self): | |
89 | return backend.Banners() | |
90 | ||
91 | @property | |
92 | def geoip(self): | |
93 | return backend.GeoIP() | |
94 | ||
95 | @property | |
96 | def tracker(self): | |
97 | return backend.Tracker() |