From 849895f9f94b70d55f3b69db07f23ba93468bca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Benencia?= Date: Thu, 2 Aug 2012 20:10:03 -0300 Subject: Change ipcalc to ipaddr --- core.py | 4 ++-- model.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pywhoisd.py | 4 ++-- xml.py | 4 ++-- 4 files changed, 77 insertions(+), 6 deletions(-) diff --git a/core.py b/core.py index a68d1e5..1ac7e4f 100644 --- a/core.py +++ b/core.py @@ -1,5 +1,5 @@ import socketserver -import ipcalc +import ipaddr class Daemon(): def __init__(data): @@ -26,7 +26,7 @@ class Daemon(): # Iterate over all IP block elements for network in self.data.get_networks(): for block in network.ip_blocks: - if ip in ipcalc.Network(block): + if ipaddr.IPAddress(ip) in ipaddr.IPNetwork(block): result['name'] = network.name for key in network.data: result[key] = network.data[key] diff --git a/model.py b/model.py index fbba248..13bcfa8 100644 --- a/model.py +++ b/model.py @@ -1,3 +1,5 @@ +from xml.etree import ElementTree + class Network(): """A simple network definition""" @@ -76,3 +78,72 @@ class Data(): self.load_data() return self.persons + +class DataXML(model.Data): + """Reads network information from a XML file""" + + 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""" + + root = ElementTree(file=self.data_file).getroot() + + for elem in root: + 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 diff --git a/pywhoisd.py b/pywhoisd.py index 4e78564..6572cac 100755 --- a/pywhoisd.py +++ b/pywhoisd.py @@ -2,7 +2,7 @@ import configparser import core -import xml +import model class PyWhoisD(): """Main class. It reads the configuration options and starts the server""" @@ -18,7 +18,7 @@ class PyWhoisD(): def config_data(self): """Config data sources. - Only XML is supported. + At the moment only XML is supported. """ mode = self.config['Storage']['mode'] diff --git a/xml.py b/xml.py index e01a338..f8fb0f2 100644 --- a/xml.py +++ b/xml.py @@ -1,4 +1,4 @@ -from xml.etree.ElementTree import ElementTree +from xml.etree import ElementTree import model class DataXML(model.Data): @@ -20,7 +20,7 @@ class DataXML(model.Data): elif elem.tag == 'domain': self.add_domain(elem) elif elem.tag == 'network': - self.add_network(elem): + self.add_network(elem) else: pass # raise TagNotFoundError -- cgit v1.2.3