From: kimbo Date: Thu, 26 Dec 2019 21:54:31 +0000 (-0700) Subject: make sure Resolver.nameservers is a list or str X-Git-Tag: v2.0.0rc1~343^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bbf0cfd239ffa6deeb67a4787bd292e9a972af74;p=thirdparty%2Fdnspython.git make sure Resolver.nameservers is a list or str validate if assignment of Resolver.nameservers is a list, a str (in which case it will be converted to a list), or None --- diff --git a/dns/resolver.py b/dns/resolver.py index c49598fe..2ed0ebca 100644 --- a/dns/resolver.py +++ b/dns/resolver.py @@ -1079,6 +1079,27 @@ class Resolver(object): self.flags = flags + @property + def nameservers(self): + return self._nameservers + + @nameservers.setter + def nameservers(self, nameservers): + """ + :param nameservers: can be a ``str``, ``list``, or None. + If it's a ``str``, it will converted to a list. + :raise ValueError: if `nameservers` is anything other than \ + ``str``, ``list``, or None. + """ + if isinstance(nameservers, str): + self._nameservers = [nameservers] + elif isinstance(nameservers, list): + self._nameservers = nameservers + elif nameservers is None: + self._nameservers = None + else: + raise ValueError('nameservers must be either a str, a list, or None' + ' (not a {})'.format(type(nameservers))) #: The default resolver. default_resolver = None diff --git a/dns/resolver.pyi b/dns/resolver.pyi index 06742fe5..c68d04ae 100644 --- a/dns/resolver.pyi +++ b/dns/resolver.pyi @@ -33,7 +33,7 @@ def zone_for_name(name, rdclass : int = rdataclass.IN, tcp=False, resolver : Opt ... class Resolver: - def __init__(self, configure): + def __init__(self, filename : Optional[str] = '/etc/resolv.conf', configure : Optional[bool] = True): self.nameservers : List[str] def query(self, qname : str, rdtype : Union[int,str] = rdatatype.A, rdclass : Union[int,str] = rdataclass.IN, tcp : bool = False, source : Optional[str] = None, raise_on_no_answer=True, source_port : int = 0): diff --git a/tests/test_resolver.py b/tests/test_resolver.py index 1f788396..ccfb04e9 100644 --- a/tests/test_resolver.py +++ b/tests/test_resolver.py @@ -404,5 +404,28 @@ class NXDOMAINExceptionTestCase(unittest.TestCase): self.assertTrue(e2.canonical_name == dns.name.from_text(cname2)) +class ResolverNameserverValidTypeTestCase(unittest.TestCase): + def test_set_nameserver_to_string(self): + resolver = dns.resolver.Resolver() + resolver.nameservers = '1.2.3.4' + self.assertEqual(resolver.nameservers, ['1.2.3.4']) + + def test_set_nameserver_to_list(self): + resolver = dns.resolver.Resolver() + resolver.nameservers = ['1.2.3.4'] + self.assertEqual(resolver.nameservers, ['1.2.3.4']) + + def test_set_nameserver_to_None(self): + resolver = dns.resolver.Resolver() + resolver.nameservers = None + self.assertEqual(resolver.nameservers, None) + + def test_set_nameserver_invalid_type(self): + resolver = dns.resolver.Resolver() + invalid_nameservers = [1234, (1, 2, 3, 4), {'invalid': 'nameserver'}] + for invalid_nameserver in invalid_nameservers: + with self.assertRaises(ValueError): + resolver.nameservers = invalid_nameserver + if __name__ == '__main__': unittest.main()