From 6b5875748264b2fbd740185cf26b4be0bafd0f37 Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Mon, 2 Jan 2017 06:19:38 -0800 Subject: [PATCH] to_e164() was returning binary instead of text. Doco update for e164 --- ChangeLog | 5 +++++ dns/e164.py | 55 +++++++++++++++++++++++++++------------------- tests/test_name.py | 2 +- 3 files changed, 38 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87d1da98..223607d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-01-02 Bob Halley + + * dns/e164.py: to_e164() was returning binary instead of text, + another Py2/Py3 merge bug. + 2017-01-01 Bob Halley * dns/rdatatype.py: CNAME is now a singleton, as the reasons diff --git a/dns/e164.py b/dns/e164.py index 99300730..2618b4f3 100644 --- a/dns/e164.py +++ b/dns/e164.py @@ -1,4 +1,4 @@ -# Copyright (C) 2006, 2007, 2009, 2011 Nominum, Inc. +# Copyright (C) 2006-2017 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, @@ -13,31 +13,29 @@ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -"""DNS E.164 helpers - -@var public_enum_domain: The DNS public ENUM domain, e164.arpa. -@type public_enum_domain: dns.name.Name object -""" - +"""DNS E.164 helpers.""" import dns.exception import dns.name import dns.resolver -from ._compat import string_types +from ._compat import string_types, maybe_decode +#: The public E.164 domain. public_enum_domain = dns.name.from_text('e164.arpa.') def from_e164(text, origin=public_enum_domain): """Convert an E.164 number in textual form into a Name object whose value is the ENUM domain name for that number. - @param text: an E.164 number in textual form. - @type text: str - @param origin: The domain in which the number should be constructed. - The default is e164.arpa. - @type origin: dns.name.Name object or None - @rtype: dns.name.Name object + + *text*, a ``text``, is an E.164 number in textual form. + + *origin*, a ``dns.name.Name``, the domain in which the number + should be constructed. The default is ``e164.arpa.``. + + Returns a ``dns.name.Name``. """ + parts = [d for d in text if d.isdigit()] parts.reverse() return dns.name.from_text('.'.join(parts), origin=origin) @@ -45,14 +43,17 @@ def from_e164(text, origin=public_enum_domain): def to_e164(name, origin=public_enum_domain, want_plus_prefix=True): """Convert an ENUM domain name into an E.164 number. - @param name: the ENUM domain name. - @type name: dns.name.Name object. - @param origin: A domain containing the ENUM domain name. The - name is relativized to this domain before being converted to text. - @type origin: dns.name.Name object or None - @param want_plus_prefix: if True, add a '+' to the beginning of the - returned number. - @rtype: str + + *name* is a ``dns.name.Name``, the ENUM domain name. + + *origin* is a ``dns.anme.Name``, a domain containing the ENUM + domain name. The name is relativized to this domain before being + converted to text. If ``None``, no relativization is done. + + *want_plus_prefix* is a ``bool``. If True, add a '+' to the beginning of + the returned number. + + Returns a ``text``. """ if origin is not None: name = name.relativize(origin) @@ -63,14 +64,22 @@ def to_e164(name, origin=public_enum_domain, want_plus_prefix=True): text = b''.join(dlabels) if want_plus_prefix: text = b'+' + text - return text + return maybe_decode(text) def query(number, domains, resolver=None): """Look for NAPTR RRs for the specified number in the specified domains. e.g. lookup('16505551212', ['e164.dnspython.org.', 'e164.arpa.']) + + *number*, a ``text`` is the number to look for. + + *domains* is an iterable containing ``dns.name.Name`` values. + + *resolver*, a ``dns.resolver.Resolver``, is the resolver to use. If + ``None``, the default resolver is used. """ + if resolver is None: resolver = dns.resolver.get_default_resolver() e_nx = dns.resolver.NXDOMAIN() diff --git a/tests/test_name.py b/tests/test_name.py index f2a87736..fecbaafe 100644 --- a/tests/test_name.py +++ b/tests/test_name.py @@ -782,7 +782,7 @@ class NameTestCase(unittest.TestCase): def testEnumToE164(self): n = dns.name.from_text('2.1.2.1.5.5.5.0.5.6.1.e164.arpa.') - e = b'+16505551212' + e = '+16505551212' text = dns.e164.to_e164(n) self.assertEqual(text, e) -- 2.47.3