Switch to auto increment field in peers with configurable managemement
[flowspy] / peers / models.py
index 1178509..627dfc9 100644 (file)
@@ -1,54 +1,70 @@
+# -*- coding: utf-8 -*- vim:fileencoding=utf-8:
+# vim: tabstop=4:shiftwidth=4:softtabstop=4:expandtab
+
+# Copyright © 2011-2014 Greek Research and Technology Network (GRNET S.A.)
+# Copyright © 2011-2014 Leonidas Poulopoulos (@leopoul)
+# 
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
+# TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+# SOFTWARE.
+
 from django.db import models
 from utils.whois import *
 from django.contrib.auth.models import User
+from django.conf import settings
 
-# Create your models here.
 class PeerRange(models.Model):
     network = models.CharField(max_length=128)
     def __unicode__(self):
         return self.network
     class Meta:
         db_table = u'peer_range'
+        ordering = ['network']
+        managed = settings.PEER_RANGE_MANAGED_TABLE
+
+class TechcEmail(models.Model):
+    email = models.CharField(max_length=352, db_column="email")
+    def __unicode__(self):
+        return self.email
+    class Meta:
+        db_table="techc_email"
+        managed = settings.PEER_TECHC_MANAGED_TABLE
 
-# Create your models here.
 class Peer(models.Model):
-    peer_id = models.IntegerField(primary_key=True)
+    peer_id = models.AutoField(primary_key=True)
     peer_name = models.CharField(max_length=128)
     peer_as = models.IntegerField()
     peer_tag = models.CharField(max_length=64)
     domain_name = models.CharField(max_length=128, null=True, blank=True)
     networks = models.ManyToManyField(PeerRange, null=True, blank=True)
+    techc_emails = models.ManyToManyField(TechcEmail, null=True, blank=True)
 
     def __unicode__(self):
         return self.peer_name
     class Meta:
         db_table = u'peer'
+        ordering = ['peer_name']
+        managed = settings.PEER_MANAGED_TABLE
+
         
     def fill_networks(self):
         network_range = []
+        networks_list = []
         peer_as = "AS%s" %self.peer_as
         network_range = whois(peer_as)
         if network_range:
             for network_item in network_range:
                 range, created = PeerRange.objects.get_or_create(network=network_item.compressed)
-                if not range.network in self.networks.all():
-                    self.networks.add(range)
+                networks_list.append(range)
+            self.networks = networks_list
             self.save()
 
-    def techc(self):
-        try:
-            techcmails = PeerTechc.objects.get(peer_id=self).emails
-        except:
-            techcmails = None
-        return techcmails
-
-class PeerTechc(models.Model):
-    peer_id = models.OneToOneField(Peer, primary_key=True,
-            db_column="peer_id", parent_link=True)
-    emails = models.CharField(max_length=352, db_column="emails")
 
-    def __unicode__(self):
-        return "%s %s" %(self.peer_id.peer_name, self.emails)
-
-    class Meta:
-        db_table="v_tech_c_peers"