]>
git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - webapp/handlers_base.py
3 from __future__
import division
12 units
= ["B", "k", "M", "G"]
15 while b
>= 1024 and unit_pointer
< len(units
):
19 return "%.1f%s" % (b
, units
[unit_pointer
])
22 class BaseHandler(tornado
.web
.RequestHandler
):
25 def get_account(self
, uid
):
26 # Find the name of the author
27 return self
.accounts
.find(uid
)
29 def get_query_locale(self
):
30 locale
= self
.get_argument("locale", None)
35 return tornado
.locale
.get(locale
)
38 locale
= self
.get_query_locale()
40 self
.set_cookie("locale", locale
.code
)
42 def get_user_locale(self
):
43 # The planet is always in english.
44 if self
.request
.host
== "planet.ipfire.org":
45 return tornado
.locale
.get("en_US")
47 # Get the locale from the query.
48 locale
= self
.get_query_locale()
52 # Read the locale from the cookies.
53 locale
= self
.get_cookie("locale", None)
55 return tornado
.locale
.get(locale
)
57 # Otherwise take the browser locale.
58 return self
.get_browser_locale()
61 def render_args(self
):
62 today
= datetime
.date
.today()
65 "format_size" : format_size
,
66 "hostname" : self
.request
.host
,
67 "lang" : self
.locale
.code
[:2],
68 "rss_url" : self
.rss_url
,
72 def render(self
, *args
, **_kwargs
):
73 kwargs
= self
.render_args
74 kwargs
.update(_kwargs
)
75 tornado
.web
.RequestHandler
.render(self
, *args
, **kwargs
)
77 def render_string(self
, *args
, **_kwargs
):
78 kwargs
= self
.render_args
79 kwargs
.update(_kwargs
)
80 return tornado
.web
.RequestHandler
.render_string(self
, *args
, **kwargs
)
82 def write_error(self
, status_code
, **kwargs
):
83 if status_code
in (404, 500):
86 "exception" : kwargs
.get("exception", None),
87 "message" : httplib
.responses
[status_code
],
89 self
.render("error-%s.html" % status_code
, **render_args
)
91 return tornado
.web
.RequestHandler
.write_error(self
, status_code
, **kwargs
)
93 def static_url(self
, path
, static
=True):
94 ret
= tornado
.web
.RequestHandler
.static_url(self
, path
)
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(", ")
105 ip_addr
= ip_addr
[-1]
109 def get_remote_location(self
):
110 if not hasattr(self
, "__remote_location"):
111 remote_ip
= self
.get_remote_ip()
113 self
.__remote
_location
= self
.geoip
.get_location(remote_ip
)
115 return self
.__remote
_location
119 return self
.application
.backend
123 return self
.backend
.db
126 def advertisements(self
):
127 return self
.backend
.advertisements
131 return self
.backend
.accounts
135 return self
.backend
.downloads
139 return self
.backend
.iuse
143 return self
.backend
.memcache
147 return self
.backend
.mirrors
151 return self
.backend
.netboot
155 return self
.backend
.news
159 return self
.backend
.settings
163 return self
.backend
.releases
167 return self
.backend
.geoip
171 return self
.backend
.stasy
175 return self
.backend
.tracker
179 return self
.backend
.planet
183 return self
.backend
.wishlist