]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - www/webapp/handlers_base.py
manager: Fix crash is release directory does not exist, yet.
[people/shoehn/ipfire.org.git] / www / webapp / handlers_base.py
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 rss_url = None
12
13 def get_account(self, uid):
14 # Find the name of the author
15 return self.accounts.find(uid)
16
17 def get_user_locale(self):
18 DEFAULT_LOCALE = tornado.locale.get("en_US")
19 ALLOWED_LOCALES = \
20 [tornado.locale.get(l) for l in tornado.locale.get_supported_locales(None)]
21
22 # One can append "?locale=de" to mostly and URI on the site and
23 # another output that guessed.
24 locale = self.get_argument("locale", None)
25 if locale:
26 for l in ALLOWED_LOCALES:
27 if not l.code.startswith(locale):
28 continue
29
30 return l
31
32 # If no locale was provided we guess what the browser sends us
33 locale = self.get_browser_locale()
34 if locale in ALLOWED_LOCALES:
35 return locale
36
37 # If no one of the cases above worked we use our default locale
38 return DEFAULT_LOCALE
39
40 @property
41 def render_args(self):
42 return {
43 "hostname" : self.request.host,
44 "lang" : self.locale.code[:2],
45 "rss_url" : self.rss_url,
46 "year" : time.strftime("%Y"),
47 }
48
49 def render(self, *args, **_kwargs):
50 kwargs = self.render_args
51 kwargs.update(_kwargs)
52 tornado.web.RequestHandler.render(self, *args, **kwargs)
53
54 def render_string(self, *args, **_kwargs):
55 kwargs = self.render_args
56 kwargs.update(_kwargs)
57 return tornado.web.RequestHandler.render_string(self, *args, **kwargs)
58
59 def get_error_html(self, status_code, **kwargs):
60 if status_code in (404, 500):
61 render_args = ({
62 "code" : status_code,
63 "exception" : kwargs.get("exception", None),
64 "message" : httplib.responses[status_code],
65 })
66 return self.render_string("error-%s.html" % status_code, **render_args)
67 else:
68 return tornado.web.RequestHandler.get_error_html(self, status_code, **kwargs)
69
70 @property
71 def accounts(self):
72 return backend.Accounts()
73
74 @property
75 def banners(self):
76 return backend.Banners()
77
78 @property
79 def memcached(self):
80 return backend.Memcached()
81
82 @property
83 def mirrors(self):
84 return backend.Mirrors()
85
86 @property
87 def news(self):
88 return backend.News()
89
90 @property
91 def config(self):
92 return backend.Config()
93
94 @property
95 def releases(self):
96 return backend.Releases()
97
98 @property
99 def banners(self):
100 return backend.Banners()
101
102 @property
103 def geoip(self):
104 return backend.GeoIP()
105
106 @property
107 def tracker(self):
108 return backend.Tracker()
109
110 @property
111 def planet(self):
112 return backend.Planet()