]> git.ipfire.org Git - ipfire.org.git/blame - webapp/handlers_base.py
Move everything to the root of the repository.
[ipfire.org.git] / webapp / handlers_base.py
CommitLineData
940227cb
MT
1#!/usr/bin/python
2
60024cc8
MT
3from __future__ import division
4
940227cb
MT
5import httplib
6import time
7import tornado.locale
8import tornado.web
9
10import backend
11
60024cc8
MT
12def format_size(b):
13 units = ["B", "k", "M", "G"]
14 unit_pointer = 0
15
16 while b >= 1024 and unit_pointer < len(units):
17 b /= 1024
18 unit_pointer += 1
19
20 return "%.1f%s" % (b, units[unit_pointer])
21
22
940227cb 23class BaseHandler(tornado.web.RequestHandler):
de683d7c
MT
24 rss_url = None
25
940227cb
MT
26 def get_account(self, uid):
27 # Find the name of the author
28 return self.accounts.find(uid)
29
60024cc8
MT
30 def get_supported_locales(self):
31 for l in tornado.locale.get_supported_locales(None):
32 yield tornado.locale.get(l)
33
34 def valid_locale(self, locale):
35 if not locale:
36 return False
37
38 for l in self.get_supported_locales():
39 if l.code.startswith(locale):
40 return True
940227cb 41
60024cc8
MT
42 return False
43
44 def get_query_locale(self):
940227cb 45 locale = self.get_argument("locale", None)
60024cc8
MT
46
47 if locale is None:
48 return
49
50 if self.valid_locale(locale):
51 return locale
52
53 def prepare(self):
54 locale = self.get_query_locale()
940227cb 55 if locale:
60024cc8 56 self.set_cookie("locale", locale)
54af860e 57
60024cc8
MT
58 def get_user_locale(self):
59 default_locale = tornado.locale.get("en_US")
940227cb 60
45c763aa
MT
61 # The planet is always in english.
62 if self.request.host == "planet.ipfire.org":
60024cc8 63 return default_locale
45c763aa 64
60024cc8
MT
65 # Get the locale from the query.
66 locale = self.get_query_locale()
67 if not locale:
68 # Read the locale from the cookies.
69 locale = self.get_cookie("locale", None)
70
71 if not locale:
72 locale = self.get_browser_locale().code
73
74 for l in self.get_supported_locales():
75 if l.code.startswith(locale):
76 return l
940227cb 77
60024cc8 78 return default_locale
940227cb
MT
79
80 @property
81 def render_args(self):
82 return {
60024cc8 83 "format_size" : format_size,
940227cb
MT
84 "hostname" : self.request.host,
85 "lang" : self.locale.code[:2],
de683d7c 86 "rss_url" : self.rss_url,
940227cb
MT
87 "year" : time.strftime("%Y"),
88 }
89
bcc3ed4d
MT
90 def render(self, *args, **_kwargs):
91 kwargs = self.render_args
92 kwargs.update(_kwargs)
940227cb
MT
93 tornado.web.RequestHandler.render(self, *args, **kwargs)
94
bcc3ed4d
MT
95 def render_string(self, *args, **_kwargs):
96 kwargs = self.render_args
97 kwargs.update(_kwargs)
940227cb
MT
98 return tornado.web.RequestHandler.render_string(self, *args, **kwargs)
99
100 def get_error_html(self, status_code, **kwargs):
101 if status_code in (404, 500):
102 render_args = ({
103 "code" : status_code,
104 "exception" : kwargs.get("exception", None),
105 "message" : httplib.responses[status_code],
106 })
107 return self.render_string("error-%s.html" % status_code, **render_args)
108 else:
109 return tornado.web.RequestHandler.get_error_html(self, status_code, **kwargs)
110
3d540c40
MT
111 def static_url(self, path, static=True):
112 ret = tornado.web.RequestHandler.static_url(self, path)
113
54b8df1a
MT
114 if self.settings.get("debug", False):
115 return ret
116
3d540c40
MT
117 if static:
118 return "http://static.ipfire.org%s" % ret
119
120 return ret
121
a0048e66
MT
122 @property
123 def advertisements(self):
124 return backend.Advertisements()
125
940227cb
MT
126 @property
127 def accounts(self):
128 return backend.Accounts()
129
130 @property
131 def banners(self):
132 return backend.Banners()
133
b3250465
MT
134 @property
135 def memcached(self):
136 return backend.Memcached()
137
940227cb
MT
138 @property
139 def mirrors(self):
140 return backend.Mirrors()
141
142 @property
143 def news(self):
144 return backend.News()
145
146 @property
147 def config(self):
148 return backend.Config()
149
150 @property
151 def releases(self):
152 return backend.Releases()
153
154 @property
155 def banners(self):
156 return backend.Banners()
157
158 @property
159 def geoip(self):
160 return backend.GeoIP()
161
162 @property
163 def tracker(self):
164 return backend.Tracker()
bcc3ed4d
MT
165
166 @property
167 def planet(self):
168 return backend.Planet()
7771acea
MT
169
170 @property
171 def wishlist(self):
172 return backend.Wishlist()