summaryrefslogtreecommitdiff
path: root/mirrors/admin.py
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@kiwwwi.com.ar>2011-03-06 11:05:57 -0300
committerNicolás Reynolds <fauno@kiwwwi.com.ar>2011-03-06 11:05:57 -0300
commit3aa14c9fbec24f5049e12a8dbb5ce059d2c8f5f3 (patch)
tree28755cf0ae66b145d752358c1f722c2d095e877a /mirrors/admin.py
parentc738e2c8f687f3417b90c951254121cce491843a (diff)
parent65e965c8f76677904f5d98965e13bf89726247d4 (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.py20
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