Switch to auto increment field in peers with configurable managemement
[flowspy] / peers / models.py
1 # -*- coding: utf-8 -*- vim:fileencoding=utf-8:
2 # vim: tabstop=4:shiftwidth=4:softtabstop=4:expandtab
3
4 # Copyright © 2011-2014 Greek Research and Technology Network (GRNET S.A.)
5 # Copyright © 2011-2014 Leonidas Poulopoulos (@leopoul)
6
7 # Permission to use, copy, modify, and/or distribute this software for any
8 # purpose with or without fee is hereby granted, provided that the above
9 # copyright notice and this permission notice appear in all copies.
10
11 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
12 # TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
13 # FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
14 # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
15 # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
16 # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
17 # SOFTWARE.
18
19 from django.db import models
20 from utils.whois import *
21 from django.contrib.auth.models import User
22 from django.conf import settings
23
24 class PeerRange(models.Model):
25     network = models.CharField(max_length=128)
26     def __unicode__(self):
27         return self.network
28     class Meta:
29         db_table = u'peer_range'
30         ordering = ['network']
31         managed = settings.PEER_RANGE_MANAGED_TABLE
32
33 class TechcEmail(models.Model):
34     email = models.CharField(max_length=352, db_column="email")
35     def __unicode__(self):
36         return self.email
37     class Meta:
38         db_table="techc_email"
39         managed = settings.PEER_TECHC_MANAGED_TABLE
40
41 class Peer(models.Model):
42     peer_id = models.AutoField(primary_key=True)
43     peer_name = models.CharField(max_length=128)
44     peer_as = models.IntegerField()
45     peer_tag = models.CharField(max_length=64)
46     domain_name = models.CharField(max_length=128, null=True, blank=True)
47     networks = models.ManyToManyField(PeerRange, null=True, blank=True)
48     techc_emails = models.ManyToManyField(TechcEmail, null=True, blank=True)
49
50     def __unicode__(self):
51         return self.peer_name
52     class Meta:
53         db_table = u'peer'
54         ordering = ['peer_name']
55         managed = settings.PEER_MANAGED_TABLE
56
57         
58     def fill_networks(self):
59         network_range = []
60         networks_list = []
61         peer_as = "AS%s" %self.peer_as
62         network_range = whois(peer_as)
63         if network_range:
64             for network_item in network_range:
65                 range, created = PeerRange.objects.get_or_create(network=network_item.compressed)
66                 networks_list.append(range)
67             self.networks = networks_list
68             self.save()
69
70