]>
git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - webapp/handlers_download.py
9 from handlers_base
import *
11 class DownloadsIndexHandler(BaseHandler
):
13 releases
= self
.releases
.get_all()
15 self
.render("downloads-index.html", releases
=releases
)
18 class DownloadsReleaseHandler(BaseHandler
):
19 def get(self
, release
):
20 release
= self
.releases
.get_by_id(release
)
22 raise tornado
.web
.HTTPError(404)
24 self
.render("downloads-item.html", release
=release
, latest
=False)
27 class DownloadsLatestHandler(BaseHandler
):
29 release
= self
.releases
.get_latest()
31 raise tornado
.web
.HTTPError(404)
33 self
.render("downloads-item.html", release
=release
, latest
=True)
36 class DownloadsOlderHandler(BaseHandler
):
38 releases
= self
.releases
.get_stable()
40 # Drop the latest release
42 releases
= releases
[1:]
44 self
.render("downloads-older.html", releases
=releases
)
47 class DownloadsDevelopmentHandler(BaseHandler
):
49 releases
= self
.releases
.get_unstable()
51 self
.render("downloads-development.html", releases
=releases
)
54 class DownloadHandler(BaseHandler
):
56 self
.render("downloads.html", release
=self
.releases
.get_latest())
59 class DownloadAllHandler(BaseHandler
):
61 self
.render("downloads-all.html",
62 releases
=self
.releases
.get_stable())
65 class DownloadDevelopmentHandler(BaseHandler
):
67 self
.render("downloads-development.html",
68 releases
=self
.releases
.get_unstable())
71 class DownloadFileHandler(BaseHandler
):
72 def head(self
, filename
):
73 self
.set_header("Pragma", "no-cache")
76 mirrors
= self
.mirrors
.get_all()
77 mirrors
= mirrors
.get_with_file(filename
)
78 mirrors
= mirrors
.get_with_state("UP")
81 raise tornado
.web
.HTTPError(404, "File not found: %s" % filename
)
83 # Find mirrors located near to the user.
84 # If we have not found any, we use all.
85 mirrors_nearby
= mirrors
.get_for_location(self
.request
.remote_ip
)
87 mirrors
= mirrors_nearby
89 mirror
= mirrors
.get_random()
91 self
.redirect(mirror
.url
+ filename
[len(mirror
.prefix
):])
94 def get(self
, filename
):
95 mirror
= self
.head(filename
)
97 # Record the download.
98 country_code
= self
.geoip
.get_country(self
.request
.remote_ip
)
99 self
.mirrors
.db
.execute("INSERT INTO log_download(filename, mirror, country_code) VALUES(%s, %s, %s)",
100 filename
, mirror
.id, country_code
)
103 class DownloadCompatHandler(BaseHandler
):
104 def get(self
, path
, url
):
107 for filename
in self
.mirrors
.get_all_files():
108 if filename
.endswith("/%s" % url
):
113 raise tornado
.web
.HTTPError(404)
115 self
.redirect("/%s" % _filename
)
117 class DownloadSplashHandler(BaseHandler
):
119 self
.render("download-splash.html")