7dba848eaf
South actually makes this relatively painless if you get everything right, so might as well start getting these out of the legacy main application to eventually eliminate models being separate from their views. Signed-off-by: Dan McGee <dan@archlinux.org>
62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
import re
|
|
|
|
from django import forms
|
|
from django.contrib import admin
|
|
|
|
from .models import Mirror, MirrorProtocol, MirrorUrl, MirrorRsync
|
|
|
|
class MirrorUrlForm(forms.ModelForm):
|
|
class Meta:
|
|
model = MirrorUrl
|
|
def clean_url(self):
|
|
# ensure we always save the URL with a trailing slash
|
|
url = self.cleaned_data["url"].strip()
|
|
if url[-1] == '/':
|
|
return url
|
|
return url + '/'
|
|
|
|
class MirrorUrlInlineAdmin(admin.TabularInline):
|
|
model = MirrorUrl
|
|
form = MirrorUrlForm
|
|
extra = 3
|
|
|
|
# ripped off from django.forms.fields, adding netmask ability
|
|
ipv4nm_re = re.compile(r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}(/(\d|[1-2]\d|3[0-2])){0,1}$')
|
|
class IPAddressNetmaskField(forms.fields.RegexField):
|
|
default_error_messages = {
|
|
'invalid': u'Enter a valid IPv4 address, possibly including netmask.',
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(IPAddressNetmaskField, self).__init__(ipv4nm_re, *args, **kwargs)
|
|
|
|
class MirrorRsyncForm(forms.ModelForm):
|
|
class Meta:
|
|
model = MirrorRsync
|
|
ip = IPAddressNetmaskField(label='IP')
|
|
|
|
class MirrorRsyncInlineAdmin(admin.TabularInline):
|
|
model = MirrorRsync
|
|
form = MirrorRsyncForm
|
|
extra = 2
|
|
|
|
class MirrorAdminForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Mirror
|
|
upstream = forms.ModelChoiceField(queryset=Mirror.objects.filter(tier__gte=0, tier__lte=1), required=False)
|
|
|
|
class MirrorAdmin(admin.ModelAdmin):
|
|
form = MirrorAdminForm
|
|
list_display = ('name', 'tier', 'country', 'active', 'public', 'isos', 'admin_email', 'supported_protocols')
|
|
list_filter = ('tier', 'country', 'active', 'public')
|
|
search_fields = ('name',)
|
|
inlines = [
|
|
MirrorUrlInlineAdmin,
|
|
MirrorRsyncInlineAdmin,
|
|
]
|
|
|
|
admin.site.register(Mirror, MirrorAdmin)
|
|
admin.site.register(MirrorProtocol)
|
|
|
|
# vim: set ts=4 sw=4 et:
|