]> git.ipfire.org Git - ipfire.org.git/blob - www/webapp/handlers_base.py
84316ace67d2e1d9e9fc4304d4fe80b10118d0cd
[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 # The planet is always in english.
33 if self.request.host == "planet.ipfire.org":
34 return DEFAULT_LOCALE
35
36 # If no locale was provided we guess what the browser sends us
37 locale = self.get_browser_locale()
38 if locale in ALLOWED_LOCALES:
39 return locale
40
41 # If no one of the cases above worked we use our default locale
42 return DEFAULT_LOCALE
43
44 @property
45 def render_args(self):
46 return {
47 "hostname" : self.request.host,
48 "lang" : self.locale.code[:2],
49 "rss_url" : self.rss_url,
50 "year" : time.strftime("%Y"),
51 }
52
53 def render(self, *args, **_kwargs):
54 kwargs = self.render_args
55 kwargs.update(_kwargs)
56 tornado.web.RequestHandler.render(self, *args, **kwargs)
57
58 def render_string(self, *args, **_kwargs):
59 kwargs = self.render_args
60 kwargs.update(_kwargs)
61 return tornado.web.RequestHandler.render_string(self, *args, **kwargs)
62
63 def get_error_html(self, status_code, **kwargs):
64 if status_code in (404, 500):
65 render_args = ({
66 "code" : status_code,
67 "exception" : kwargs.get("exception", None),
68 "message" : httplib.responses[status_code],
69 })
70 return self.render_string("error-%s.html" % status_code, **render_args)
71 else:
72 return tornado.web.RequestHandler.get_error_html(self, status_code, **kwargs)
73
74 def static_url(self, path, static=True):
75 ret = tornado.web.RequestHandler.static_url(self, path)
76
77 if static:
78 return "http://static.ipfire.org%s" % ret
79
80 return ret
81
82 @property
83 def accounts(self):
84 return backend.Accounts()
85
86 @property
87 def banners(self):
88 return backend.Banners()
89
90 @property
91 def memcached(self):
92 return backend.Memcached()
93
94 @property
95 def mirrors(self):
96 return backend.Mirrors()
97
98 @property
99 def news(self):
100 return backend.News()
101
102 @property
103 def config(self):
104 return backend.Config()
105
106 @property
107 def releases(self):
108 return backend.Releases()
109
110 @property
111 def banners(self):
112 return backend.Banners()
113
114 @property
115 def geoip(self):
116 return backend.GeoIP()
117
118 @property
119 def tracker(self):
120 return backend.Tracker()
121
122 @property
123 def planet(self):
124 return backend.Planet()