summaryrefslogtreecommitdiff
path: root/model.py
blob: 5894e0519d40df4a12f21692a7acca6e998e4269 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from xml.etree.ElementTree import ElementTree

class Network():
    """A simple network definition"""
    
    def __init__(self, name):
        self.name = name
        self.domain = []
        self.ip_blocks = []
        self.data = {}

class Domain():
    """A simple domain definition"""

    def __init__(self, name, domain):
        self.name = name
        self.domain = domain
        self.admins = []

    def add_admin(self, admin):
        """Add an administrator for this network"""

        self.admins.append(admin)

class Person():
    """A simple person definition"""

    def __init__(self, name, surname, email):
        self.name = name
        self.surname = surname
        self.email = email

class Data():
    """Abstract class for storing anf getting information"""
    
    def __init__(self, config):
        self.networks = []
        self.config = config

    def parse_config(self):
        """Abstract method"""
        
        pass
    
    def load_data(self):
        """Abstract method"""
        
        pass

    def get_networks(self):
        """Return all networks. Common method for all kind of storages."""
        
        if self.networks == None:
            self.load_data()

        return self.networks

class DataXML(Data):
    """Reads network information from a XML file"""
    
    def parse_config():
        """Reads and sets up XML config file fields"""
        
        self.data_file = self.config['Storage']['xml_file']
        
    def load_data(self):
        """Parse XML for getting network information""" # Ugly implementation. Beautify.
        root = ElementTree(file=self.data_file).getroot()
        for elem in root:
            network = WhoisNetwork(elem.attrib['name'])
            for e in elem:
                if e.tag == 'ip_block':
                    network.ip_blocks.append(e.text)
                else:
                    network.data[e.tag] = e.text
                    
            self.networks.append(network)
nihil fit ex nihilo