]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - webapp/handlers_base.py
fireinfo: Fix layout and disabled module.
[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
0cc8f04c 96
3d540c40
MT
97
98 return ret
99
9068dba1
MT
100 def get_remote_ip(self):
101 # Fix for clients behind a proxy that sends "X-Forwarded-For".
102 ip_addr = self.request.remote_ip.split(", ")
103
104 if ip_addr:
105 ip_addr = ip_addr[-1]
106
107 return ip_addr
108
109 def get_remote_location(self):
110 if not hasattr(self, "__remote_location"):
111 remote_ip = self.get_remote_ip()
112
113 self.__remote_location = self.geoip.get_location(remote_ip)
114
115 return self.__remote_location
116
a6dc0bad
MT
117 @property
118 def backend(self):
119 return self.application.backend
120
9068dba1
MT
121 @property
122 def db(self):
123 return self.backend.db
124
a0048e66
MT
125 @property
126 def advertisements(self):
9068dba1 127 return self.backend.advertisements
a0048e66 128
940227cb
MT
129 @property
130 def accounts(self):
a6dc0bad 131 return self.backend.accounts
940227cb
MT
132
133 @property
9068dba1
MT
134 def downloads(self):
135 return self.backend.downloads
136
137 @property
138 def iuse(self):
139 return self.backend.iuse
940227cb 140
b3250465
MT
141 @property
142 def memcached(self):
9068dba1 143 return self.backend.memcache
b3250465 144
940227cb
MT
145 @property
146 def mirrors(self):
9068dba1
MT
147 return self.backend.mirrors
148
149 @property
150 def netboot(self):
151 return self.backend.netboot
940227cb
MT
152
153 @property
154 def news(self):
9068dba1 155 return self.backend.news
940227cb
MT
156
157 @property
158 def config(self):
9068dba1 159 return self.backend.settings
940227cb
MT
160
161 @property
162 def releases(self):
9068dba1 163 return self.backend.releases
940227cb
MT
164
165 @property
9068dba1
MT
166 def geoip(self):
167 return self.backend.geoip
940227cb
MT
168
169 @property
9068dba1
MT
170 def stasy(self):
171 return self.backend.stasy
940227cb
MT
172
173 @property
174 def tracker(self):
9068dba1 175 return self.backend.tracker
bcc3ed4d
MT
176
177 @property
178 def planet(self):
a6dc0bad 179 return self.backend.planet
7771acea
MT
180
181 @property
182 def wishlist(self):
9068dba1 183 return self.backend.wishlist