summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2013-05-22 03:22:11 +0200
committerDan McGee <dan@archlinux.org>2013-05-22 03:24:55 +0200
commit64a92174c056a4cca1e6b7e287ca9993bcd2be1a (patch)
treed0f7ae446cf2acfff3db6cca698486909bdffcbb
parent13bc975d3022ea8e72769ad38de224b9869f5aab (diff)
downloadarchweb-64a92174c056a4cca1e6b7e287ca9993bcd2be1a.tar.gz
archweb-64a92174c056a4cca1e6b7e287ca9993bcd2be1a.tar.xz
Begin removal of FTP mirror support
FTP is a terrible protocol these days compared to HTTP. IPv6 support is spotty at best, it is much slower for the connect/begin transfer cycle, and overall just doesn't provide anything HTTP does better. Start killing bits that we've added to treat FTP as a first-class protocol and regulate it to the back seat. The expectation here is once this commit goes live to the production site, the FTP mirror URLs themselves will get removed completely from the database, and the FTP protocol object itself will get deleted. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--mirrors/admin.py1
-rw-r--r--mirrors/fixtures/mirrorprotocols.json9
-rw-r--r--mirrors/models.py2
-rw-r--r--mirrors/urls_mirrorlist.py4
-rw-r--r--mirrors/views.py29
-rw-r--r--templates/mirrors/mirrorlist_generate.html2
6 files changed, 10 insertions, 37 deletions
diff --git a/mirrors/admin.py b/mirrors/admin.py
index 9c88207..d0f2f47 100644
--- a/mirrors/admin.py
+++ b/mirrors/admin.py
@@ -10,6 +10,7 @@ from .models import (Mirror, MirrorProtocol, MirrorUrl, MirrorRsync,
class MirrorUrlForm(forms.ModelForm):
class Meta:
model = MirrorUrl
+
def clean_url(self):
# is this a valid-looking URL?
url_parts = urlparse(self.cleaned_data["url"])
diff --git a/mirrors/fixtures/mirrorprotocols.json b/mirrors/fixtures/mirrorprotocols.json
index 8822ef8..1a07510 100644
--- a/mirrors/fixtures/mirrorprotocols.json
+++ b/mirrors/fixtures/mirrorprotocols.json
@@ -9,15 +9,6 @@
}
},
{
- "pk": 2,
- "model": "mirrors.mirrorprotocol",
- "fields": {
- "is_download": true,
- "default": false,
- "protocol": "ftp"
- }
- },
- {
"pk": 3,
"model": "mirrors.mirrorprotocol",
"fields": {
diff --git a/mirrors/models.py b/mirrors/models.py
index d8ac795..91793e0 100644
--- a/mirrors/models.py
+++ b/mirrors/models.py
@@ -47,7 +47,7 @@ class Mirror(models.Model):
class MirrorProtocol(models.Model):
protocol = models.CharField(max_length=10, unique=True)
is_download = models.BooleanField(default=True,
- help_text="Is protocol useful for end-users, e.g. FTP/HTTP")
+ help_text="Is protocol useful for end-users, e.g. HTTP")
default = models.BooleanField(default=True,
help_text="Included by default when building mirror list?")
created = models.DateTimeField(editable=False)
diff --git a/mirrors/urls_mirrorlist.py b/mirrors/urls_mirrorlist.py
index 1444eca..bba54ec 100644
--- a/mirrors/urls_mirrorlist.py
+++ b/mirrors/urls_mirrorlist.py
@@ -1,9 +1,11 @@
from django.conf.urls import patterns
+
urlpatterns = patterns('mirrors.views',
(r'^$', 'generate_mirrorlist', {}, 'mirrorlist'),
(r'^all/$', 'find_mirrors', {'countries': ['all']}),
- (r'^all/(?P<protocol>[A-z]+)/$', 'find_mirrors_simple')
+ (r'^all/(?P<protocol>[A-z]+)/$', 'find_mirrors_simple',
+ {}, 'mirrorlist_simple')
)
# vim: set ts=4 sw=4 et:
diff --git a/mirrors/views.py b/mirrors/views.py
index d1dd9da..22eb57b 100644
--- a/mirrors/views.py
+++ b/mirrors/views.py
@@ -8,7 +8,7 @@ from django.forms.widgets import CheckboxSelectMultiple
from django.core.serializers.json import DjangoJSONEncoder
from django.db.models import Q
from django.http import Http404, HttpResponse
-from django.shortcuts import get_object_or_404, render
+from django.shortcuts import get_object_or_404, redirect, render
from django.utils.timezone import now
from django.views.decorators.csrf import csrf_exempt
from django_countries.countries import COUNTRIES
@@ -78,18 +78,6 @@ def generate_mirrorlist(request):
{'mirrorlist_form': form})
-def default_protocol_filter(original_urls):
- key_func = attrgetter('country')
- sorted_urls = sorted(original_urls, key=key_func)
- urls = []
- for _, group in groupby(sorted_urls, key=key_func):
- cntry_urls = list(group)
- if any(url.protocol.default for url in cntry_urls):
- cntry_urls = [url for url in cntry_urls if url.protocol.default]
- urls.extend(cntry_urls)
- return urls
-
-
def status_filter(original_urls):
status_info = get_mirror_statuses()
scores = {u.id: u.score for u in status_info['urls']}
@@ -105,7 +93,7 @@ def status_filter(original_urls):
def find_mirrors(request, countries=None, protocols=None, use_status=False,
- ipv4_supported=True, ipv6_supported=True, smart_protocol=False):
+ ipv4_supported=True, ipv6_supported=True):
if not protocols:
protocols = MirrorProtocol.objects.filter(is_download=True)
elif hasattr(protocols, 'model') and protocols.model == MirrorProtocol:
@@ -126,17 +114,12 @@ def find_mirrors(request, countries=None, protocols=None, use_status=False,
ip_version |= Q(has_ipv6=True)
qset = qset.filter(ip_version)
- if smart_protocol:
- urls = default_protocol_filter(qset)
- else:
- urls = qset
-
if not use_status:
sort_key = attrgetter('country.name', 'mirror.name', 'url')
- urls = sorted(urls, key=sort_key)
+ urls = sorted(qset, key=sort_key)
template = 'mirrors/mirrorlist.txt'
else:
- urls = status_filter(urls)
+ urls = status_filter(qset)
template = 'mirrors/mirrorlist_status.txt'
context = {
@@ -147,9 +130,7 @@ def find_mirrors(request, countries=None, protocols=None, use_status=False,
def find_mirrors_simple(request, protocol):
if protocol == 'smart':
- # generate a 'smart' mirrorlist, one that only includes FTP mirrors if
- # no HTTP mirror is available in that country.
- return find_mirrors(request, smart_protocol=True)
+ return redirect('mirrorlist_simple', 'http', permanent=True)
proto = get_object_or_404(MirrorProtocol, protocol=protocol)
return find_mirrors(request, protocols=[proto])
diff --git a/templates/mirrors/mirrorlist_generate.html b/templates/mirrors/mirrorlist_generate.html
index f072730..59b0d35 100644
--- a/templates/mirrors/mirrorlist_generate.html
+++ b/templates/mirrors/mirrorlist_generate.html
@@ -21,10 +21,8 @@
<ul>
<li><a href="all/">All mirrors</a></li>
- <li><a href="all/ftp/">All mirrors, FTP only</a></li>
<li><a href="all/http/">All mirrors, HTTP only</a></li>
<li><a href="all/https/">All mirrors, HTTPS only</a></li>
- <li><a href="all/smart/">All mirrors, Smart protocols</a>: this link only includes FTP mirrors if an HTTP mirror is not available in a given country.</li>
</ul>
<h3>Customized by country mirrorlist</h3>