]>
git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - www/webapp/handlers.py
9 import tornado
.httpclient
13 from banners
import banners
15 from releases
import releases
22 class BaseHandler(tornado
.web
.RequestHandler
):
23 def get_user_locale(self
):
24 uri
= self
.request
.uri
.split("/")
26 for lang
in tornado
.locale
.get_supported_locales(None):
27 if lang
[:2] == uri
[1]:
28 return tornado
.locale
.get(lang
)
31 def render_args(self
):
33 "banner" : banners
.get(),
34 "lang" : self
.locale
.code
[:2],
35 "langs" : [l
[:2] for l
in tornado
.locale
.get_supported_locales(None)],
36 "lang_link" : self
.lang_link
,
38 "title" : "no title given",
39 "server" : self
.request
.host
.replace("ipfire", "<span>ipfire</span>"),
40 "uri" : self
.request
.uri
,
41 "year" : time
.strftime("%Y"),
44 def render(self
, *args
, **kwargs
):
45 nargs
= self
.render_args
47 nargs
["title"] = "%s - %s" % (self
.request
.host
, nargs
["title"])
48 tornado
.web
.RequestHandler
.render(self
, *args
, **nargs
)
51 return "/%s/%s" % (self
.locale
.code
[:2], s
)
53 def lang_link(self
, lang
):
54 return "/%s/%s" % (lang
, self
.request
.uri
[4:])
56 def get_error_html(self
, status_code
, **kwargs
):
57 if status_code
in (404, 500):
58 render_args
= self
.render_args
61 "exception" : kwargs
.get("exception", None),
62 "message" : httplib
.responses
[status_code
],
64 return self
.render_string("error-%s.html" % status_code
, **render_args
)
66 return tornado
.web
.RequestHandler
.get_error_html(self
, status_code
, **kwargs
)
69 class MainHandler(BaseHandler
):
71 lang
= self
.locale
.code
[:2]
72 self
.redirect("/%s/index" % (lang
))
75 class DownloadHandler(BaseHandler
):
77 self
.render("downloads.html", release
=releases
.latest
)
80 class DownloadAllHandler(BaseHandler
):
82 self
.render("downloads-all.html", releases
=releases
)
85 class DownloadDevelopmentHandler(BaseHandler
):
87 self
.render("downloads-development.html", releases
=releases
)
90 class DownloadTorrentHandler(BaseHandler
):
91 tracker_url
= "http://tracker.ipfire.org:6969/stats?format=txt&mode=tpbs"
93 @tornado.web
.asynchronous
95 http
= tornado
.httpclient
.AsyncHTTPClient()
96 http
.fetch(self
.tracker_url
, callback
=self
.async_callback(self
.on_response
))
98 def on_response(self
, response
):
99 torrents
= releases
.torrents
101 if response
.code
== 200:
102 for line
in response
.body
.split("\n"):
103 if not line
: continue
104 hash, seeds
, peers
= line
.split(":")
111 self
.render("downloads-torrents.html",
114 request_time
=response
.request_time
,
115 tracker
=urlparse
.urlparse(response
.request
.url
).netloc
)
118 class StaticHandler(BaseHandler
):
120 def static_path(self
):
121 return os
.path
.join(self
.application
.settings
["template_path"], "static")
124 def static_files(self
):
126 for filename
in os
.listdir(self
.static_path
):
127 if filename
.endswith(".html"):
131 def get(self
, name
=None):
132 name
= "%s.html" % name
134 if not name
in self
.static_files
:
135 raise tornado
.web
.HTTPError(404)
137 self
.render("static/%s" % name
)
140 class IndexHandler(BaseHandler
):
142 self
.render("index.html", news
=news
)
145 class NewsHandler(BaseHandler
):
147 self
.render("news.html", news
=news
)
150 class RedirectHandler(BaseHandler
):
160 class BuildHandler(BaseHandler
):
168 for build
in builds
.find():
169 if (time
.time() - float(build
.get("date"))) < 12*60:
170 self
.builds
["<12h"].append(build
)
171 elif (time
.time() - float(build
.get("date"))) < 24*60:
172 self
.builds
[">12h"].append(build
)
174 self
.builds
[">24h"].append(build
)
176 for l
in self
.builds
.values():
180 self
.render("builds.html", builds
=self
.builds
)
183 class UrielBaseHandler(BaseHandler
):
184 #db = uriel.Database()
187 class UrielHandler(UrielBaseHandler
):
192 class ApiClusterInfoHandler(BaseHandler
):
194 id = self
.get_argument("id", "null")
196 c
= cluster
.Cluster("minerva.ipfire.org")
198 self
.write(simplejson
.dumps({
202 "error" : "null", }))
206 class TranslationHandler(BaseHandler
):
208 self
.render("translations.html", projects
=translations
.projects
)