diff options
author | Nicolás Reynolds <fauno@kiwwwi.com.ar> | 2011-03-06 11:05:57 -0300 |
---|---|---|
committer | Nicolás Reynolds <fauno@kiwwwi.com.ar> | 2011-03-06 11:05:57 -0300 |
commit | 3aa14c9fbec24f5049e12a8dbb5ce059d2c8f5f3 (patch) | |
tree | 28755cf0ae66b145d752358c1f722c2d095e877a /mirrors/admin.py | |
parent | c738e2c8f687f3417b90c951254121cce491843a (diff) | |
parent | 65e965c8f76677904f5d98965e13bf89726247d4 (diff) |
Merge branch 'master' of git://projects.archlinux.org/archweb
Conflicts:
media/archweb.css
public/views.py
urls.py
Diffstat (limited to 'mirrors/admin.py')
-rw-r--r-- | mirrors/admin.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/mirrors/admin.py b/mirrors/admin.py index 6990cca2..b9c2876a 100644 --- a/mirrors/admin.py +++ b/mirrors/admin.py @@ -1,4 +1,5 @@ import re +from urlparse import urlparse, urlunsplit from django import forms from django.contrib import admin @@ -9,15 +10,26 @@ 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"]) + if not url_parts.scheme: + raise forms.ValidationError("No URL scheme (protocol) provided.") + if not url_parts.netloc: + raise forms.ValidationError("No URL host provided.") + if url_parts.params or url_parts.query or url_parts.fragment: + raise forms.ValidationError( + "URL parameters, query, and fragment elements are not supported.") # ensure we always save the URL with a trailing slash - url = self.cleaned_data["url"].strip() - if url[-1] == '/': - return url - return url + '/' + path = url_parts.path + if not path.endswith('/'): + path += '/' + url = urlunsplit((url_parts.scheme, url_parts.netloc, path, '', '')) + return url class MirrorUrlInlineAdmin(admin.TabularInline): model = MirrorUrl form = MirrorUrlForm + readonly_fields = ('protocol', 'has_ipv4', 'has_ipv6') extra = 3 # ripped off from django.forms.fields, adding netmask ability |