]> git.ipfire.org Git - ipfire.org.git/blame - webapp/handlers_base.py
planet: Add fulltext search.
[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 30 def get_query_locale(self):
940227cb 31 locale = self.get_argument("locale", None)
60024cc8
MT
32
33 if locale is None:
34 return
35
dbf95cf2 36 return tornado.locale.get(locale)
60024cc8
MT
37
38 def prepare(self):
39 locale = self.get_query_locale()
940227cb 40 if locale:
dbf95cf2 41 self.set_cookie("locale", locale.code)
54af860e 42
60024cc8 43 def get_user_locale(self):
45c763aa
MT
44 # The planet is always in english.
45 if self.request.host == "planet.ipfire.org":
dbf95cf2 46 return tornado.locale.get("en_US")
45c763aa 47
60024cc8
MT
48 # Get the locale from the query.
49 locale = self.get_query_locale()
dbf95cf2
MT
50 if locale:
51 return locale
60024cc8 52
dbf95cf2
MT
53 # Read the locale from the cookies.
54 locale = self.get_cookie("locale", None)
55 if locale:
56 return tornado.locale.get(locale)
940227cb 57
dbf95cf2
MT
58 # Otherwise take the browser locale.
59 return self.get_browser_locale()
940227cb
MT
60
61 @property
62 def render_args(self):
63 return {
60024cc8 64 "format_size" : format_size,
940227cb
MT
65 "hostname" : self.request.host,
66 "lang" : self.locale.code[:2],
de683d7c 67 "rss_url" : self.rss_url,
940227cb
MT
68 "year" : time.strftime("%Y"),
69 }
70
bcc3ed4d
MT
71 def render(self, *args, **_kwargs):
72 kwargs = self.render_args
73 kwargs.update(_kwargs)
940227cb
MT
74 tornado.web.RequestHandler.render(self, *args, **kwargs)
75
bcc3ed4d
MT
76 def render_string(self, *args, **_kwargs):
77 kwargs = self.render_args
78 kwargs.update(_kwargs)
940227cb
MT
79 return tornado.web.RequestHandler.render_string(self, *args, **kwargs)
80
02f2d7fe 81 def write_error(self, status_code, **kwargs):
940227cb
MT
82 if status_code in (404, 500):
83 render_args = ({
84 "code" : status_code,
85 "exception" : kwargs.get("exception", None),
86 "message" : httplib.responses[status_code],
87 })
02f2d7fe 88 self.render("error-%s.html" % status_code, **render_args)
940227cb 89 else:
02f2d7fe 90 return tornado.web.RequestHandler.write_error(self, status_code, **kwargs)
940227cb 91
3d540c40
MT
92 def static_url(self, path, static=True):
93 ret = tornado.web.RequestHandler.static_url(self, path)
94
54b8df1a
MT
95 if self.settings.get("debug", False):
96 return ret
97
3d540c40
MT
98 if static:
99 return "http://static.ipfire.org%s" % ret
100
101 return ret
102
a0048e66
MT
103 @property
104 def advertisements(self):
105 return backend.Advertisements()
106
940227cb
MT
107 @property
108 def accounts(self):
109 return backend.Accounts()
110
111 @property
112 def banners(self):
113 return backend.Banners()
114
b3250465
MT
115 @property
116 def memcached(self):
117 return backend.Memcached()
118
940227cb
MT
119 @property
120 def mirrors(self):
121 return backend.Mirrors()
122
123 @property
124 def news(self):
125 return backend.News()
126
127 @property
128 def config(self):
129 return backend.Config()
130
131 @property
132 def releases(self):
133 return backend.Releases()
134
135 @property
136 def banners(self):
137 return backend.Banners()
138
139 @property
140 def geoip(self):
141 return backend.GeoIP()
142
143 @property
144 def tracker(self):
145 return backend.Tracker()
bcc3ed4d
MT
146
147 @property
148 def planet(self):
149 return backend.Planet()
7771acea
MT
150
151 @property
152 def wishlist(self):
153 return backend.Wishlist()