diff options
Diffstat (limited to 'xml.py')
-rw-r--r-- | xml.py | 69 |
1 files changed, 59 insertions, 10 deletions
@@ -4,20 +4,69 @@ import model class DataXML(model.Data): """Reads network information from a XML file""" - def parse_config(): + def parse_config(self): """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. + """Parse XML for getting network information""" + root = ElementTree(file=self.data_file).getroot() + for elem in root: - network = model.Network(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) + if elem.tag == 'person': + self.add_person(elem) + elif elem.tag == 'domain': + self.add_domain(elem) + elif elem.tag == 'network': + self.add_network(elem): + else: + pass # raise TagNotFoundError + + + def add_person(self, elem): + """Adds a new person""" + + person = model.Person() + for e in elem: + if e.tag == 'name': + person.name = e.text + elif e.tag == 'surname': + person.surname = e.text + elif e.tag == 'email': + person.email = e.text + else: + person.data[e.tag] = e.text + + self.persons[elem.attrib['id']] = person + + def add_domain(self, elem): + """Adds a new domain""" + + domain = model.Domain() + for e in elem: + if e.tag == 'name': + domain.name == e.text + else: + domain.data[e.tag] = e.text + + self.domains[elem.attrib['id']] = domain + + def add_network(self, elem): + """Adds a new network""" + + network = model.Network() + for e in elem: + if e.tag == 'name': + network.name = e.text + elif e.tag == 'domain': + network.domains.append(e.text) + elif e.tag == 'ip_block': + network.ip_blocks.append(e.text) + elif e.tag == 'admin': + network.admins.append(e.text) + else: + network.data[e.tag] = e.text + + self.networks[elem.attrib['id']] = network |