diff options
| -rw-r--r-- | core.py | 4 | ||||
| -rw-r--r-- | model.py | 71 | ||||
| -rwxr-xr-x | pywhoisd.py | 4 | ||||
| -rw-r--r-- | xml.py | 4 | 
4 files changed, 77 insertions, 6 deletions
| @@ -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] @@ -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'] @@ -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 | 
