]>
Commit | Line | Data |
---|---|---|
940227cb MT |
1 | #!/usr/bin/python |
2 | ||
60024cc8 MT |
3 | from __future__ import division |
4 | ||
940227cb MT |
5 | import httplib |
6 | import time | |
7 | import tornado.locale | |
8 | import tornado.web | |
9 | ||
10 | import backend | |
11 | ||
60024cc8 MT |
12 | def 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 | 23 | class 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() |