]>
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 DownloadHandler(BaseHandler
):
60 self
.render("downloads.html", release
=self
.releases
.get_latest())
63 class DownloadAllHandler(BaseHandler
):
65 self
.render("downloads-all.html",
66 releases
=self
.releases
.get_stable())
69 class DownloadDevelopmentHandler(BaseHandler
):
71 self
.render("downloads-development.html",
72 releases
=self
.releases
.get_unstable())
75 class DownloadFileHandler(BaseHandler
):
77 self
.set_header("Pragma", "no-cache")
79 def head(self
, filename
):
80 self
.redirect_to_mirror(filename
)
82 def get(self
, filename
):
83 self
.redirect_to_mirror(filename
, log_download
=True)
85 def find_mirror(self
, filename
):
87 mirrors
= self
.mirrors
.get_all()
88 mirrors
= mirrors
.get_with_file(filename
)
89 mirrors
= mirrors
.get_with_state("UP")
92 raise tornado
.web
.HTTPError(404, "File not found: %s" % filename
)
94 # Find mirrors located near to the user.
95 # If we have not found any, we use all.
96 remote_location
= self
.get_remote_location()
99 mirrors_nearby
= mirrors
.get_for_location(remote_location
)
102 mirrors
= mirrors_nearby
104 return mirrors
.get_random()
106 def redirect_to_mirror(self
, filename
, log_download
=False):
107 # Find a random mirror.
108 mirror
= self
.find_mirror(filename
)
110 # Construct the redirection URL.
111 download_url
= mirror
.build_url(filename
)
113 # Redirect the request.
114 self
.redirect(download_url
)
119 remote_location
= self
.get_remote_location()
121 country_code
= remote_location
.country
125 self
.db
.execute("INSERT INTO log_download(filename, mirror, country_code) \
126 VALUES(%s, %s, %s)", filename
, mirror
.id, country_code
)
129 class DownloadCompatHandler(BaseHandler
):
130 def get(self
, path
, url
):
133 for filename
in self
.mirrors
.get_all_files():
134 if filename
.endswith("/%s" % url
):
139 raise tornado
.web
.HTTPError(404)
141 self
.redirect("/%s" % _filename
)
144 class DownloadSplashHandler(BaseHandler
):
146 self
.render("download-splash.html")