summaryrefslogtreecommitdiff
path: root/xml.py
diff options
context:
space:
mode:
authorRaúl Benencia <rbenencia@linti.unlp.edu.ar>2012-08-02 18:06:23 -0300
committerRaúl Benencia <rbenencia@linti.unlp.edu.ar>2012-08-02 18:06:23 -0300
commit4d30bf280dbdb68ad72e01e911bf039b48ccb869 (patch)
treee885129fdfecb1327fb50e13ac24d3cca208cbb5 /xml.py
parent10e9272d170f5c634e8ca8f7415fb4ad1454bfe6 (diff)
Completed XML parsing
Diffstat (limited to 'xml.py')
-rw-r--r--xml.py69
1 files changed, 59 insertions, 10 deletions
diff --git a/xml.py b/xml.py
index c49e01a..e01a338 100644
--- a/xml.py
+++ b/xml.py
@@ -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
nihil fit ex nihilo