From f793c413ade9635522e536ed50e32a6c62117b35 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 31 Mar 2011 23:54:22 -0500 Subject: Make mirror name and URLs unique So we don't create duplicates without knowing it in our database, like we did earlier today. Signed-off-by: Dan McGee --- mirrors/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mirrors/models.py') diff --git a/mirrors/models.py b/mirrors/models.py index 401821a8..dce17b5e 100644 --- a/mirrors/models.py +++ b/mirrors/models.py @@ -12,7 +12,7 @@ TIER_CHOICES = ( ) class Mirror(models.Model): - name = models.CharField(max_length=255) + name = models.CharField(max_length=255, unique=True) tier = models.SmallIntegerField(default=2, choices=TIER_CHOICES) upstream = models.ForeignKey('self', null=True) country = models.CharField(max_length=255, db_index=True) @@ -54,7 +54,7 @@ class MirrorProtocol(models.Model): ordering = ('protocol',) class MirrorUrl(models.Model): - url = models.CharField(max_length=255) + url = models.CharField(max_length=255, unique=True) protocol = models.ForeignKey(MirrorProtocol, related_name="urls", editable=False) mirror = models.ForeignKey(Mirror, related_name="urls") -- cgit v1.2.3-2-g168b From 6fe08cd68901e698f4a0741e177354a45c753b46 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 29 Mar 2011 17:39:59 -0500 Subject: Utilize Django 1.3 'on_delete' feature on several foreign keys The most important one here is PROTECT to keep people from making bone-headed plays and deleting an Arch or Repo and every package along with it. We can use this in a few other places, as well as some carefully placed SET_NULL indicators. Note that nothing here pushes deletion responsibilities down to the database, although that will probably happen in a future commit. Signed-off-by: Dan McGee --- mirrors/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mirrors/models.py') diff --git a/mirrors/models.py b/mirrors/models.py index dce17b5e..80808e2e 100644 --- a/mirrors/models.py +++ b/mirrors/models.py @@ -14,7 +14,7 @@ TIER_CHOICES = ( class Mirror(models.Model): name = models.CharField(max_length=255, unique=True) tier = models.SmallIntegerField(default=2, choices=TIER_CHOICES) - upstream = models.ForeignKey('self', null=True) + upstream = models.ForeignKey('self', null=True, on_delete=models.SET_NULL) country = models.CharField(max_length=255, db_index=True) admin_email = models.EmailField(max_length=255, blank=True) public = models.BooleanField(default=True) @@ -56,7 +56,7 @@ class MirrorProtocol(models.Model): class MirrorUrl(models.Model): url = models.CharField(max_length=255, unique=True) protocol = models.ForeignKey(MirrorProtocol, related_name="urls", - editable=False) + editable=False, on_delete=models.PROTECT) mirror = models.ForeignKey(Mirror, related_name="urls") has_ipv4 = models.BooleanField("IPv4 capable", default=True, editable=False) -- cgit v1.2.3-2-g168b From 78a553e558217640c0efa233ac7a7037be3f34b5 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 12 Apr 2011 18:36:20 -0500 Subject: Add optional country override for individual mirror URLs This allows a named top-level mirror to have geographically distributed URLs, e.g. kernel.org and the geo-DNS setup. Signed-off-by: Dan McGee --- mirrors/models.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'mirrors/models.py') diff --git a/mirrors/models.py b/mirrors/models.py index 80808e2e..bcde210c 100644 --- a/mirrors/models.py +++ b/mirrors/models.py @@ -58,6 +58,8 @@ class MirrorUrl(models.Model): protocol = models.ForeignKey(MirrorProtocol, related_name="urls", editable=False, on_delete=models.PROTECT) mirror = models.ForeignKey(Mirror, related_name="urls") + country = models.CharField(max_length=255, blank=True, null=True, + db_index=True) has_ipv4 = models.BooleanField("IPv4 capable", default=True, editable=False) has_ipv6 = models.BooleanField("IPv6 capable", default=False, @@ -73,6 +75,10 @@ class MirrorUrl(models.Model): def hostname(self): return urlparse(self.url).hostname + @property + def real_country(self): + return self.country or self.mirror.country + def clean(self): try: # Auto-map the protocol field by looking at the URL -- cgit v1.2.3-2-g168b