]>
Commit | Line | Data |
---|---|---|
940227cb MT |
1 | #!/usr/bin/python |
2 | ||
60024cc8 MT |
3 | from __future__ import division |
4 | ||
940227cb | 5 | import httplib |
cc3b928d | 6 | import datetime |
940227cb MT |
7 | import time |
8 | import tornado.locale | |
9 | import tornado.web | |
10 | ||
11 | import backend | |
12 | ||
60024cc8 MT |
13 | def 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 | 24 | class 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 | ||
a0048e66 MT |
106 | @property |
107 | def advertisements(self): | |
108 | return backend.Advertisements() | |
109 | ||
940227cb MT |
110 | @property |
111 | def accounts(self): | |
112 | return backend.Accounts() | |
113 | ||
114 | @property | |
115 | def banners(self): | |
116 | return backend.Banners() | |
117 | ||
b3250465 MT |
118 | @property |
119 | def memcached(self): | |
120 | return backend.Memcached() | |
121 | ||
940227cb MT |
122 | @property |
123 | def mirrors(self): | |
124 | return backend.Mirrors() | |
125 | ||
126 | @property | |
127 | def news(self): | |
128 | return backend.News() | |
129 | ||
130 | @property | |
131 | def config(self): | |
132 | return backend.Config() | |
133 | ||
134 | @property | |
135 | def releases(self): | |
136 | return backend.Releases() | |
137 | ||
138 | @property | |
139 | def banners(self): | |
140 | return backend.Banners() | |
141 | ||
142 | @property | |
143 | def geoip(self): | |
144 | return backend.GeoIP() | |
145 | ||
146 | @property | |
147 | def tracker(self): | |
148 | return backend.Tracker() | |
bcc3ed4d MT |
149 | |
150 | @property | |
151 | def planet(self): | |
152 | return backend.Planet() | |
7771acea MT |
153 | |
154 | @property | |
155 | def wishlist(self): | |
156 | return backend.Wishlist() |