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