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)