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