]>
Commit | Line | Data |
---|---|---|
940227cb MT |
1 | #!/usr/bin/python |
2 | ||
54af860e | 3 | import logging |
940227cb | 4 | import random |
940227cb MT |
5 | import tornado.web |
6 | ||
54af860e MT |
7 | import backend |
8 | ||
940227cb MT |
9 | from handlers_base import * |
10 | ||
11 | class DownloadsIndexHandler(BaseHandler): | |
12 | def get(self): | |
7771acea MT |
13 | releases = self.releases.get_all() |
14 | ||
15 | self.render("downloads-index.html", releases=releases) | |
940227cb MT |
16 | |
17 | ||
18 | class DownloadsReleaseHandler(BaseHandler): | |
19 | def get(self, release): | |
20 | release = self.releases.get_by_id(release) | |
21 | if not release: | |
22 | raise tornado.web.HTTPError(404) | |
23 | ||
7771acea | 24 | self.render("downloads-item.html", release=release, latest=False) |
940227cb MT |
25 | |
26 | ||
27 | class DownloadsLatestHandler(BaseHandler): | |
28 | def get(self): | |
29 | release = self.releases.get_latest() | |
30 | if not release: | |
31 | raise tornado.web.HTTPError(404) | |
32 | ||
7771acea | 33 | self.render("downloads-item.html", release=release, latest=True) |
940227cb MT |
34 | |
35 | ||
36 | class DownloadsOlderHandler(BaseHandler): | |
37 | def get(self): | |
38 | releases = self.releases.get_stable() | |
39 | ||
40 | # Drop the latest release | |
41 | if releases: | |
42 | releases = releases[1:] | |
43 | ||
44 | self.render("downloads-older.html", releases=releases) | |
45 | ||
46 | ||
47 | class DownloadsDevelopmentHandler(BaseHandler): | |
48 | def get(self): | |
49 | releases = self.releases.get_unstable() | |
50 | ||
51 | self.render("downloads-development.html", releases=releases) | |
52 | ||
53 | ||
54 | class DownloadHandler(BaseHandler): | |
55 | def get(self): | |
56 | self.render("downloads.html", release=self.releases.get_latest()) | |
57 | ||
58 | ||
59 | class DownloadAllHandler(BaseHandler): | |
60 | def get(self): | |
61 | self.render("downloads-all.html", | |
62 | releases=self.releases.get_stable()) | |
63 | ||
64 | ||
65 | class DownloadDevelopmentHandler(BaseHandler): | |
66 | def get(self): | |
67 | self.render("downloads-development.html", | |
68 | releases=self.releases.get_unstable()) | |
69 | ||
70 | ||
71 | class DownloadFileHandler(BaseHandler): | |
122c9026 | 72 | def head(self, filename): |
54af860e | 73 | self.set_header("Pragma", "no-cache") |
54af860e | 74 | |
0673d1b0 MT |
75 | # Get all mirrors... |
76 | mirrors = self.mirrors.get_all() | |
77 | mirrors = mirrors.get_with_file(filename) | |
78 | mirrors = mirrors.get_with_state("UP") | |
54af860e MT |
79 | |
80 | if not mirrors: | |
81 | raise tornado.web.HTTPError(404, "File not found: %s" % filename) | |
940227cb | 82 | |
0673d1b0 MT |
83 | # Find mirrors located near to the user. |
84 | # If we have not found any, we use all. | |
554f410f MT |
85 | mirrors_nearby = mirrors.get_for_location(self.request.remote_ip) |
86 | if mirrors_nearby: | |
87 | mirrors = mirrors_nearby | |
0673d1b0 MT |
88 | |
89 | mirror = mirrors.get_random() | |
940227cb | 90 | |
54af860e | 91 | self.redirect(mirror.url + filename[len(mirror.prefix):]) |
d933f34e | 92 | return mirror |
54af860e | 93 | |
122c9026 | 94 | def get(self, filename): |
d933f34e | 95 | mirror = self.head(filename) |
122c9026 | 96 | |
d933f34e | 97 | # Record the download. |
370923aa | 98 | country_code = self.geoip.get_country(self.request.remote_ip) |
54af860e MT |
99 | self.mirrors.db.execute("INSERT INTO log_download(filename, mirror, country_code) VALUES(%s, %s, %s)", |
100 | filename, mirror.id, country_code) | |
edd297c4 MT |
101 | |
102 | ||
103 | class DownloadCompatHandler(BaseHandler): | |
104 | def get(self, path, url): | |
105 | _filename = None | |
106 | ||
107 | for filename in self.mirrors.get_all_files(): | |
108 | if filename.endswith("/%s" % url): | |
109 | _filename = filename | |
110 | break | |
111 | ||
112 | if not _filename: | |
113 | raise tornado.web.HTTPError(404) | |
114 | ||
115 | self.redirect("/%s" % _filename) | |
116 | ||
60024cc8 MT |
117 | class DownloadSplashHandler(BaseHandler): |
118 | def get(self): | |
119 | self.render("download-splash.html") |