summaryrefslogtreecommitdiff
path: root/data.py
blob: 4b48e196bcfe1e39081dddae16518f0021b1bcd1 (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
from xml.etree.ElementTree import ElementTree

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

class Data():
    """Abstract class for storing network 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