Refactor mirror model
Break the original model down into a few different components that should give us a lot more flexibility. Mirror is now the top level entity with one-to-many relationships to both URLs and rsync IP addresses. This should allow the DB model to serve all of our currently unsynced needs. Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
23f25e52fc
commit
7ee38a871a
@ -1,5 +1,6 @@
|
||||
from django.contrib import admin
|
||||
from archweb_dev.main.models import (AltForum, Arch, Donor, Mirror,
|
||||
from archweb_dev.main.models import (AltForum, Arch, Donor,
|
||||
Mirror, MirrorProtocol, MirrorUrl, MirrorRsync,
|
||||
Package, Press, Repo, UserProfile)
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
@ -14,11 +15,23 @@ class DonorAdmin(admin.ModelAdmin):
|
||||
ordering = ['name']
|
||||
search_fields = ('name',)
|
||||
|
||||
class MirrorUrlInlineAdmin(admin.TabularInline):
|
||||
model = MirrorUrl
|
||||
extra = 3
|
||||
|
||||
class MirrorRsyncInlineAdmin(admin.TabularInline):
|
||||
model = MirrorRsync
|
||||
extra = 2
|
||||
|
||||
class MirrorAdmin(admin.ModelAdmin):
|
||||
list_display = ('domain', 'country')
|
||||
list_filter = ('country',)
|
||||
ordering = ['domain']
|
||||
search_fields = ('domain',)
|
||||
list_display = ('name', 'country', 'active', 'public', 'isos', 'notes')
|
||||
list_filter = ('country', 'active', 'public')
|
||||
ordering = ['country', 'name']
|
||||
search_fields = ('name',)
|
||||
inlines = [
|
||||
MirrorUrlInlineAdmin,
|
||||
MirrorRsyncInlineAdmin,
|
||||
]
|
||||
|
||||
class PackageAdmin(admin.ModelAdmin):
|
||||
list_display = ('pkgname', '_reponame', '_archname', '_maintainername')
|
||||
@ -42,8 +55,13 @@ class UserProfileAdmin(UserAdmin):
|
||||
admin.site.register(User, UserProfileAdmin)
|
||||
admin.site.register(AltForum, AltForumAdmin)
|
||||
admin.site.register(Donor, DonorAdmin)
|
||||
|
||||
admin.site.register(Mirror, MirrorAdmin)
|
||||
admin.site.register(MirrorProtocol)
|
||||
|
||||
admin.site.register(Package, PackageAdmin)
|
||||
admin.site.register(Press, PressAdmin)
|
||||
admin.site.register(Arch)
|
||||
admin.site.register(Repo)
|
||||
|
||||
# vim: set ts=4 sw=4 et:
|
||||
|
@ -51,16 +51,40 @@ def flagged(self):
|
||||
### General Model Classes ###
|
||||
#############################
|
||||
class Mirror(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
domain = models.CharField(max_length=255)
|
||||
name = models.CharField(max_length=255)
|
||||
country = models.CharField(max_length=255)
|
||||
url = models.CharField(max_length=255)
|
||||
protocol_list = models.CharField(max_length=255, null=True, blank=True)
|
||||
admin_email = models.CharField(max_length=255, null=True, blank=True)
|
||||
def __str__(self):
|
||||
return self.domain
|
||||
admin_email = models.EmailField(max_length=255, blank=True)
|
||||
notes = models.CharField(max_length=255, blank=True)
|
||||
public = models.BooleanField(default=True)
|
||||
active = models.BooleanField(default=True)
|
||||
isos = models.BooleanField(default=True)
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
class MirrorProtocol(models.Model):
|
||||
protocol = models.CharField(max_length=10, unique=True)
|
||||
def __unicode__(self):
|
||||
return self.protocol
|
||||
class Meta:
|
||||
db_table = 'mirrors'
|
||||
verbose_name = 'Mirror Protocol'
|
||||
|
||||
class MirrorUrl(models.Model):
|
||||
url = models.CharField(max_length=255)
|
||||
protocol = models.ForeignKey(MirrorProtocol, related_name="urls")
|
||||
mirror = models.ForeignKey(Mirror, related_name="urls")
|
||||
def __unicode__(self):
|
||||
return self.url
|
||||
class Meta:
|
||||
verbose_name = 'Mirror URL'
|
||||
|
||||
class MirrorRsync(models.Model):
|
||||
hostname = models.CharField(max_length=255)
|
||||
ip = models.IPAddressField()
|
||||
mirror = models.ForeignKey(Mirror, related_name="rsync_ips")
|
||||
def __unicode__(self):
|
||||
return "%s (%s)" % (self.ip, self.hostname)
|
||||
class Meta:
|
||||
verbose_name = 'Mirror Rsync IP'
|
||||
|
||||
class Press(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
Loading…
Reference in New Issue
Block a user