]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - webapp/handlers_base.py
Major update of the webapp.
[people/shoehn/ipfire.org.git] / webapp / handlers_base.py
CommitLineData
940227cb
MT
1#!/usr/bin/python
2
60024cc8
MT
3from __future__ import division
4
940227cb 5import httplib
cc3b928d 6import datetime
940227cb
MT
7import time
8import tornado.locale
9import tornado.web
10
60024cc8
MT
11def format_size(b):
12 units = ["B", "k", "M", "G"]
13 unit_pointer = 0
14
15 while b >= 1024 and unit_pointer < len(units):
16 b /= 1024
17 unit_pointer += 1
18
19 return "%.1f%s" % (b, units[unit_pointer])
20
21
940227cb 22class BaseHandler(tornado.web.RequestHandler):
de683d7c
MT
23 rss_url = None
24
940227cb
MT
25 def get_account(self, uid):
26 # Find the name of the author
27 return self.accounts.find(uid)
28
60024cc8 29 def get_query_locale(self):
940227cb 30 locale = self.get_argument("locale", None)
60024cc8
MT
31
32 if locale is None:
33 return
34
dbf95cf2 35 return tornado.locale.get(locale)
60024cc8
MT
36
37 def prepare(self):
38 locale = self.get_query_locale()
940227cb 39 if locale:
dbf95cf2 40 self.set_cookie("locale", locale.code)
54af860e 41
60024cc8 42 def get_user_locale(self):
45c763aa
MT
43 # The planet is always in english.
44 if self.request.host == "planet.ipfire.org":
dbf95cf2 45 return tornado.locale.get("en_US")
45c763aa 46
60024cc8
MT
47 # Get the locale from the query.
48 locale = self.get_query_locale()
dbf95cf2
MT
49 if locale:
50 return locale
60024cc8 51
dbf95cf2
MT
52 # Read the locale from the cookies.
53 locale = self.get_cookie("locale", None)
54 if locale:
55 return tornado.locale.get(locale)
940227cb 56
dbf95cf2
MT
57 # Otherwise take the browser locale.
58 return self.get_browser_locale()
940227cb
MT
59
60 @property
61 def render_args(self):
cc3b928d
MT
62 today = datetime.date.today()
63
940227cb 64 return {
60024cc8 65 "format_size" : format_size,
940227cb
MT
66 "hostname" : self.request.host,
67 "lang" : self.locale.code[:2],
de683d7c 68 "rss_url" : self.rss_url,
cc3b928d 69 "year" : today.year,
940227cb
MT
70 }
71
bcc3ed4d
MT
72 def render(self, *args, **_kwargs):
73 kwargs = self.render_args
74 kwargs.update(_kwargs)
940227cb
MT
75 tornado.web.RequestHandler.render(self, *args, **kwargs)
76
bcc3ed4d
MT
77 def render_string(self, *args, **_kwargs):
78 kwargs = self.render_args
79 kwargs.update(_kwargs)
940227cb
MT
80 return tornado.web.RequestHandler.render_string(self, *args, **kwargs)
81
02f2d7fe 82 def write_error(self, status_code, **kwargs):
940227cb
MT
83 if status_code in (404, 500):
84 render_args = ({
85 "code" : status_code,
86 "exception" : kwargs.get("exception", None),
87 "message" : httplib.responses[status_code],
88 })
02f2d7fe 89 self.render("error-%s.html" % status_code, **render_args)
940227cb 90 else:
02f2d7fe 91 return tornado.web.RequestHandler.write_error(self, status_code, **kwargs)
940227cb 92
3d540c40
MT
93 def static_url(self, path, static=True):
94 ret = tornado.web.RequestHandler.static_url(self, path)
95
54b8df1a
MT
96 if self.settings.get("debug", False):
97 return ret
98
6ec4605e
MT
99 elif self.request.host == "admin.ipfire.org":
100 return ret
101
102 elif static:
3d540c40
MT
103 return "http://static.ipfire.org%s" % ret
104
105 return ret
106
9068dba1
MT
107 def get_remote_ip(self):
108 # Fix for clients behind a proxy that sends "X-Forwarded-For".
109 ip_addr = self.request.remote_ip.split(", ")
110
111 if ip_addr:
112 ip_addr = ip_addr[-1]
113
114 return ip_addr
115
116 def get_remote_location(self):
117 if not hasattr(self, "__remote_location"):
118 remote_ip = self.get_remote_ip()
119
120 self.__remote_location = self.geoip.get_location(remote_ip)
121
122 return self.__remote_location
123
a6dc0bad
MT
124 @property
125 def backend(self):
126 return self.application.backend
127
9068dba1
MT
128 @property
129 def db(self):
130 return self.backend.db
131
a0048e66
MT
132 @property
133 def advertisements(self):
9068dba1 134 return self.backend.advertisements
a0048e66 135
940227cb
MT
136 @property
137 def accounts(self):
a6dc0bad 138 return self.backend.accounts
940227cb
MT
139
140 @property
9068dba1
MT
141 def downloads(self):
142 return self.backend.downloads
143
144 @property
145 def iuse(self):
146 return self.backend.iuse
940227cb 147
b3250465
MT
148 @property
149 def memcached(self):
9068dba1 150 return self.backend.memcache
b3250465 151
940227cb
MT
152 @property
153 def mirrors(self):
9068dba1
MT
154 return self.backend.mirrors
155
156 @property
157 def netboot(self):
158 return self.backend.netboot
940227cb
MT
159
160 @property
161 def news(self):
9068dba1 162 return self.backend.news
940227cb
MT
163
164 @property
165 def config(self):
9068dba1 166 return self.backend.settings
940227cb
MT
167
168 @property
169 def releases(self):
9068dba1 170 return self.backend.releases
940227cb
MT
171
172 @property
9068dba1
MT
173 def geoip(self):
174 return self.backend.geoip
940227cb
MT
175
176 @property
9068dba1
MT
177 def stasy(self):
178 return self.backend.stasy
940227cb
MT
179
180 @property
181 def tracker(self):
9068dba1 182 return self.backend.tracker
bcc3ed4d
MT
183
184 @property
185 def planet(self):
a6dc0bad 186 return self.backend.planet
7771acea
MT
187
188 @property
189 def wishlist(self):
9068dba1 190 return self.backend.wishlist