]>
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_sname(release
)
23 release
= self
.releases
.get_by_id(release
)
26 raise tornado
.web
.HTTPError(404)
28 self
.render("downloads-item.html", release
=release
, latest
=False)
31 class DownloadsLatestHandler(BaseHandler
):
33 release
= self
.releases
.get_latest()
35 raise tornado
.web
.HTTPError(404)
37 self
.render("downloads-item.html", release
=release
, latest
=True)
40 class DownloadsOlderHandler(BaseHandler
):
42 releases
= self
.releases
.get_stable()
44 # Drop the latest release
46 releases
= releases
[1:]
48 self
.render("downloads-older.html", releases
=releases
)
51 class DownloadsDevelopmentHandler(BaseHandler
):
53 releases
= self
.releases
.get_unstable()
55 self
.render("downloads-development.html", releases
=releases
)
58 class DownloadAllHandler(BaseHandler
):
60 self
.render("downloads-all.html",
61 releases
=self
.releases
.get_stable())
64 class DownloadDevelopmentHandler(BaseHandler
):
66 self
.render("downloads-development.html",
67 releases
=self
.releases
.get_unstable())
70 class DownloadFileHandler(BaseHandler
):
72 self
.set_header("Pragma", "no-cache")
74 def head(self
, filename
):
75 self
.redirect_to_mirror(filename
)
77 def get(self
, filename
):
78 self
.redirect_to_mirror(filename
, log_download
=True)
80 def find_mirror(self
, filename
):
81 exists
= self
.mirrors
.file_exists(filename
)
83 raise tornado
.web
.HTTPError(404, "File not found: %s" % filename
)
85 # Find mirrors located near to the user.
86 # If we have not found any, we use a random one.
87 remote_location
= self
.get_remote_location()
90 mirrors
= self
.mirrors
.get_for_location(remote_location
, filename
=filename
)
93 return random
.choice(mirrors
)
95 return self
.mirrors
.get_random(filename
=filename
)
97 def redirect_to_mirror(self
, filename
, log_download
=False):
98 # Find a random mirror.
99 mirror
= self
.find_mirror(filename
)
101 # Construct the redirection URL.
102 download_url
= mirror
.build_url(filename
)
104 # Redirect the request.
105 self
.redirect(download_url
)
110 remote_location
= self
.get_remote_location()
112 country_code
= remote_location
.country
116 self
.db
.execute("INSERT INTO log_download(filename, mirror, country_code) \
117 VALUES(%s, %s, %s)", filename
, mirror
.id, country_code
)
120 class DownloadCompatHandler(BaseHandler
):
121 def get(self
, path
, url
):
122 for filename
in self
.mirrors
.get_all_files():
123 if not filename
.endswith("/%s" % url
):
126 self
.redirect("/%s" % filename
)
129 raise tornado
.web
.HTTPError(404)
132 class DownloadSplashHandler(BaseHandler
):
134 self
.render("download-splash.html")