2011-02-27 10:31:06 -08:00
|
|
|
from urlparse import urlparse, urlunsplit
|
2010-09-06 10:01:46 -07:00
|
|
|
|
|
|
|
from django import forms
|
|
|
|
from django.contrib import admin
|
|
|
|
|
2013-03-06 17:53:11 -08:00
|
|
|
from .models import (Mirror, MirrorProtocol, MirrorUrl, MirrorRsync,
|
|
|
|
CheckLocation)
|
|
|
|
|
2010-09-06 10:01:46 -07:00
|
|
|
|
|
|
|
class MirrorUrlForm(forms.ModelForm):
|
|
|
|
class Meta:
|
|
|
|
model = MirrorUrl
|
2013-11-06 18:56:15 -08:00
|
|
|
fields = ('url', 'country', 'active')
|
2013-05-21 18:22:11 -07:00
|
|
|
|
2010-09-06 10:01:46 -07:00
|
|
|
def clean_url(self):
|
2011-02-27 10:31:06 -08:00
|
|
|
# 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.")
|
2010-09-06 10:01:46 -07:00
|
|
|
# ensure we always save the URL with a trailing slash
|
2011-02-27 10:31:06 -08:00
|
|
|
path = url_parts.path
|
|
|
|
if not path.endswith('/'):
|
|
|
|
path += '/'
|
|
|
|
url = urlunsplit((url_parts.scheme, url_parts.netloc, path, '', ''))
|
|
|
|
return url
|
2010-09-06 10:01:46 -07:00
|
|
|
|
2013-03-06 17:53:11 -08:00
|
|
|
|
2010-09-06 10:01:46 -07:00
|
|
|
class MirrorUrlInlineAdmin(admin.TabularInline):
|
|
|
|
model = MirrorUrl
|
|
|
|
form = MirrorUrlForm
|
2011-02-27 10:44:30 -08:00
|
|
|
readonly_fields = ('protocol', 'has_ipv4', 'has_ipv6')
|
2010-09-06 10:01:46 -07:00
|
|
|
extra = 3
|
|
|
|
|
2013-03-06 17:53:11 -08:00
|
|
|
|
2010-09-06 10:01:46 -07:00
|
|
|
class MirrorRsyncForm(forms.ModelForm):
|
|
|
|
class Meta:
|
|
|
|
model = MirrorRsync
|
2013-11-06 18:56:15 -08:00
|
|
|
fields = ('ip',)
|
2010-09-06 10:01:46 -07:00
|
|
|
|
2013-03-06 17:53:11 -08:00
|
|
|
|
2010-09-06 10:01:46 -07:00
|
|
|
class MirrorRsyncInlineAdmin(admin.TabularInline):
|
|
|
|
model = MirrorRsync
|
|
|
|
form = MirrorRsyncForm
|
|
|
|
extra = 2
|
|
|
|
|
2013-03-06 17:53:11 -08:00
|
|
|
|
2010-09-06 10:01:46 -07:00
|
|
|
class MirrorAdminForm(forms.ModelForm):
|
|
|
|
class Meta:
|
|
|
|
model = Mirror
|
2013-11-06 18:56:15 -08:00
|
|
|
fields = ('name', 'tier', 'upstream', 'admin_email', 'alternate_email',
|
|
|
|
'public', 'active', 'isos', 'rsync_user', 'rsync_password',
|
2013-12-14 09:15:42 -08:00
|
|
|
'bug', 'notes')
|
2013-11-06 18:56:15 -08:00
|
|
|
|
2012-02-13 10:34:35 -08:00
|
|
|
upstream = forms.ModelChoiceField(
|
|
|
|
queryset=Mirror.objects.filter(tier__gte=0, tier__lte=1),
|
|
|
|
required=False)
|
2010-09-06 10:01:46 -07:00
|
|
|
|
2013-03-06 17:53:11 -08:00
|
|
|
|
2010-09-06 10:01:46 -07:00
|
|
|
class MirrorAdmin(admin.ModelAdmin):
|
|
|
|
form = MirrorAdminForm
|
2013-01-13 23:00:11 -08:00
|
|
|
list_display = ('name', 'tier', 'active', 'public',
|
2012-05-18 18:42:05 -07:00
|
|
|
'isos', 'admin_email', 'alternate_email')
|
2013-01-13 23:00:11 -08:00
|
|
|
list_filter = ('tier', 'active', 'public')
|
2012-05-18 18:42:05 -07:00
|
|
|
search_fields = ('name', 'admin_email', 'alternate_email')
|
2013-12-14 09:15:42 -08:00
|
|
|
readonly_fields = ('created',)
|
2010-09-06 10:01:46 -07:00
|
|
|
inlines = [
|
|
|
|
MirrorUrlInlineAdmin,
|
|
|
|
MirrorRsyncInlineAdmin,
|
|
|
|
]
|
|
|
|
|
2013-03-06 17:53:11 -08:00
|
|
|
|
2010-09-30 12:20:45 -07:00
|
|
|
class MirrorProtocolAdmin(admin.ModelAdmin):
|
2012-02-13 10:34:35 -08:00
|
|
|
list_display = ('protocol', 'is_download', 'default')
|
|
|
|
list_filter = ('is_download', 'default')
|
2010-09-30 12:20:45 -07:00
|
|
|
|
2013-03-06 17:53:11 -08:00
|
|
|
|
|
|
|
class CheckLocationAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ('hostname', 'source_ip', 'country', 'created')
|
|
|
|
search_fields = ('hostname', 'source_ip')
|
|
|
|
|
|
|
|
|
2010-09-06 10:01:46 -07:00
|
|
|
admin.site.register(Mirror, MirrorAdmin)
|
2010-09-30 12:20:45 -07:00
|
|
|
admin.site.register(MirrorProtocol, MirrorProtocolAdmin)
|
2013-03-06 17:53:11 -08:00
|
|
|
admin.site.register(CheckLocation, CheckLocationAdmin)
|
2010-09-06 10:01:46 -07:00
|
|
|
|
|
|
|
# vim: set ts=4 sw=4 et:
|