]>
git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - www/webapp/handlers.py
11 import tornado
.httpclient
15 from banners
import banners
16 from helpers
import size
19 from releases
import releases
26 class BaseHandler(tornado
.web
.RequestHandler
):
27 def get_user_locale(self
):
28 uri
= self
.request
.uri
.split("/")
30 for lang
in tornado
.locale
.get_supported_locales(None):
31 if lang
[:2] == uri
[1]:
32 return tornado
.locale
.get(lang
)
35 def render_args(self
):
37 "banner" : banners
.get(),
38 "lang" : self
.locale
.code
[:2],
39 "langs" : [l
[:2] for l
in tornado
.locale
.get_supported_locales(None)],
40 "lang_link" : self
.lang_link
,
42 "title" : "no title given",
43 "server" : self
.request
.host
.replace("ipfire", "<span>ipfire</span>"),
44 "uri" : self
.request
.uri
,
45 "year" : time
.strftime("%Y"),
48 def render(self
, *args
, **kwargs
):
49 nargs
= self
.render_args
51 nargs
["title"] = "%s - %s" % (self
.request
.host
, nargs
["title"])
52 tornado
.web
.RequestHandler
.render(self
, *args
, **nargs
)
55 return "/%s/%s" % (self
.locale
.code
[:2], s
)
57 def lang_link(self
, lang
):
58 return "/%s/%s" % (lang
, self
.request
.uri
[4:])
60 def get_error_html(self
, status_code
, **kwargs
):
61 if status_code
in (404, 500):
62 render_args
= self
.render_args
65 "exception" : kwargs
.get("exception", None),
66 "message" : httplib
.responses
[status_code
],
68 return self
.render_string("error-%s.html" % status_code
, **render_args
)
70 return tornado
.web
.RequestHandler
.get_error_html(self
, status_code
, **kwargs
)
73 class MainHandler(BaseHandler
):
75 lang
= self
.locale
.code
[:2]
76 self
.redirect("/%s/index" % (lang
))
79 class DownloadHandler(BaseHandler
):
81 self
.render("downloads.html", release
=releases
.latest
)
84 class DownloadAllHandler(BaseHandler
):
86 self
.render("downloads-all.html", releases
=releases
)
89 class DownloadDevelopmentHandler(BaseHandler
):
91 self
.render("downloads-development.html", releases
=releases
)
94 class DownloadTorrentHandler(BaseHandler
):
95 tracker_url
= "http://tracker.ipfire.org:6969/stats?format=txt&mode=tpbs"
97 @tornado.web
.asynchronous
99 http
= tornado
.httpclient
.AsyncHTTPClient()
100 http
.fetch(self
.tracker_url
, callback
=self
.async_callback(self
.on_response
))
102 def on_response(self
, response
):
103 torrents
= releases
.torrents
105 if response
.code
== 200:
106 for line
in response
.body
.split("\n"):
107 if not line
: continue
108 hash, seeds
, peers
= line
.split(":")
115 self
.render("downloads-torrents.html",
118 request_time
=response
.request_time
,
119 tracker
=urlparse
.urlparse(response
.request
.url
).netloc
)
122 class StaticHandler(BaseHandler
):
124 def static_path(self
):
125 return os
.path
.join(self
.application
.settings
["template_path"], "static")
128 def static_files(self
):
130 for filename
in os
.listdir(self
.static_path
):
131 if filename
.endswith(".html"):
135 def get(self
, name
=None):
136 name
= "%s.html" % name
138 if not name
in self
.static_files
:
139 raise tornado
.web
.HTTPError(404)
141 self
.render("static/%s" % name
)
144 class IndexHandler(BaseHandler
):
146 self
.render("index.html", news
=news
)
149 class NewsHandler(BaseHandler
):
151 self
.render("news.html", news
=news
)
154 class BuildHandler(BaseHandler
):
162 for build
in builds
.find():
163 if (time
.time() - float(build
.get("date"))) < 12*60:
164 self
.builds
["<12h"].append(build
)
165 elif (time
.time() - float(build
.get("date"))) < 24*60:
166 self
.builds
[">12h"].append(build
)
168 self
.builds
[">24h"].append(build
)
170 for l
in self
.builds
.values():
174 self
.render("builds.html", builds
=self
.builds
)
177 class UrielBaseHandler(BaseHandler
):
178 #db = uriel.Database()
181 class UrielHandler(UrielBaseHandler
):
186 class ApiClusterInfoHandler(BaseHandler
):
188 id = self
.get_argument("id", "null")
190 c
= cluster
.Cluster(info
["cluster"]["hostname"])
192 self
.write(simplejson
.dumps({
196 "error" : "null", }))
200 class TranslationHandler(BaseHandler
):
202 self
.render("translations.html", projects
=translations
.projects
)
205 class SourceHandler(BaseHandler
):
207 if not hasattr(self
, "db"):
208 self
.db
= sqlite3
.connect("/srv/www/ipfire.org/source/hashes.db")
210 c
.execute("CREATE TABLE IF NOT EXISTS hashes(file, sha1)")
214 source_path
= "/srv/sources"
217 for dir, subdirs
, files
in os
.walk(source_path
):
221 if file in [f
["name"] for f
in fileobjects
]:
225 c
.execute("SELECT sha1 FROM hashes WHERE file = '%s'" % file)
226 hash = "%s" % c
.fetchone()
229 hash = "0000000000000000000000000000000000000000"
232 "dir" : dir[len(source_path
)+1:],
235 "size" : size(os
.path
.getsize(os
.path
.join(source_path
, dir, file))),
240 fileobjects
.sort(key
=operator
.itemgetter("name"))
242 self
.render("sources.html", files
=fileobjects
)