From 89ab9104cf1609437dd4b31c43f246e34e55ec02 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 15 Jul 2017 01:36:07 +0200 Subject: [PATCH] Unify PY2/3 detection dns._compat module contains constants PY2 and PY3 which should be used for detection of python version, to have only one method and avoid duplications --- dns/_compat.py | 8 ++++++-- dns/query.py | 4 ++-- dns/rdtypes/ANY/NSEC3.py | 5 ++--- dns/reversename.py | 5 +++-- dns/wiredata.py | 10 ++++------ dns/zone.py | 9 +++------ tests/test_resolver.py | 15 +++++++-------- 7 files changed, 27 insertions(+), 29 deletions(-) diff --git a/dns/_compat.py b/dns/_compat.py index 5c9f15e4..ca0931c2 100644 --- a/dns/_compat.py +++ b/dns/_compat.py @@ -2,7 +2,11 @@ import sys import decimal from decimal import Context -if sys.version_info > (3,): +PY3 = sys.version_info[0] == 3 +PY2 = sys.version_info[0] == 2 + + +if PY3: long = int xrange = range else: @@ -10,7 +14,7 @@ else: xrange = xrange # pylint: disable=xrange-builtin # unicode / binary types -if sys.version_info > (3,): +if PY3: text_type = str binary_type = bytes string_types = (str,) diff --git a/dns/query.py b/dns/query.py index f1f656ea..3a0aca2a 100644 --- a/dns/query.py +++ b/dns/query.py @@ -31,9 +31,9 @@ import dns.message import dns.rcode import dns.rdataclass import dns.rdatatype -from ._compat import long, string_types +from ._compat import long, string_types, PY3 -if sys.version_info > (3,): +if PY3: select_error = OSError else: select_error = select.error diff --git a/dns/rdtypes/ANY/NSEC3.py b/dns/rdtypes/ANY/NSEC3.py index 93d26918..b4578ef8 100644 --- a/dns/rdtypes/ANY/NSEC3.py +++ b/dns/rdtypes/ANY/NSEC3.py @@ -17,15 +17,14 @@ import base64 import binascii import string import struct -import sys import dns.exception import dns.rdata import dns.rdatatype -from dns._compat import xrange, text_type +from dns._compat import xrange, text_type, PY3 # pylint: disable=deprecated-string-function -if sys.version_info > (3,): +if PY3: b32_hex_to_normal = bytes.maketrans(b'0123456789ABCDEFGHIJKLMNOPQRSTUV', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567') b32_normal_to_hex = bytes.maketrans(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', diff --git a/dns/reversename.py b/dns/reversename.py index e2ec77df..447a263e 100644 --- a/dns/reversename.py +++ b/dns/reversename.py @@ -16,12 +16,13 @@ """DNS Reverse Map Names.""" import binascii -import sys import dns.name import dns.ipv6 import dns.ipv4 +from dns._compat import PY3 + ipv4_reverse_domain = dns.name.from_text('in-addr.arpa.') ipv6_reverse_domain = dns.name.from_text('ip6.arpa.') @@ -41,7 +42,7 @@ def from_address(text): try: v6 = dns.ipv6.inet_aton(text) if dns.ipv6.is_mapped(v6): - if sys.version_info >= (3,): + if PY3: parts = ['%d' % byte for byte in v6[12:]] else: parts = ['%d' % ord(byte) for byte in v6[12:]] diff --git a/dns/wiredata.py b/dns/wiredata.py index 6a058c64..b50fbb95 100644 --- a/dns/wiredata.py +++ b/dns/wiredata.py @@ -15,10 +15,8 @@ """DNS Wire Data Helper""" -import sys - import dns.exception -from ._compat import binary_type, string_types +from ._compat import binary_type, string_types, PY2 # Figure out what constant python passes for an unspecified slice bound. # It's supposed to be sys.maxint, yet on 64-bit windows sys.maxint is 2^31 - 1 @@ -32,7 +30,7 @@ class _SliceUnspecifiedBound(binary_type): def __getitem__(self, key): return key.stop - if sys.version_info < (3,): + if PY2: def __getslice__(self, i, j): # pylint: disable=getslice-method return self.__getitem__(slice(i, j)) @@ -51,7 +49,7 @@ class WireData(binary_type): start = key.start stop = key.stop - if sys.version_info < (3,): + if PY2: if stop == _unspecified_bound: # handle the case where the right bound is unspecified stop = len(self) @@ -76,7 +74,7 @@ class WireData(binary_type): except IndexError: raise dns.exception.FormError - if sys.version_info < (3,): + if PY2: def __getslice__(self, i, j): # pylint: disable=getslice-method return self.__getitem__(slice(i, j)) diff --git a/dns/zone.py b/dns/zone.py index 468618f6..657c2098 100644 --- a/dns/zone.py +++ b/dns/zone.py @@ -32,10 +32,7 @@ import dns.rrset import dns.tokenizer import dns.ttl import dns.grange -from ._compat import string_types, text_type - - -_py3 = sys.version_info > (3,) +from ._compat import string_types, text_type, PY3 class BadZone(dns.exception.DNSException): @@ -157,7 +154,7 @@ class Zone(object): return self.nodes.__iter__() def iterkeys(self): - if _py3: + if PY3: return self.nodes.keys() else: return self.nodes.iterkeys() # pylint: disable=dict-iter-method @@ -166,7 +163,7 @@ class Zone(object): return self.nodes.keys() def itervalues(self): - if _py3: + if PY3: return self.nodes.values() else: return self.nodes.itervalues() # pylint: disable=dict-iter-method diff --git a/tests/test_resolver.py b/tests/test_resolver.py index 81021fa2..183d2a18 100644 --- a/tests/test_resolver.py +++ b/tests/test_resolver.py @@ -28,7 +28,7 @@ import dns.name import dns.rdataclass import dns.rdatatype import dns.resolver -from dns._compat import xrange +from dns._compat import xrange, PY3 # Some tests require the internet to be available to run, so let's # skip those if it's not there. @@ -280,12 +280,11 @@ class NXDOMAINExceptionTestCase(unittest.TestCase): def test_nxdomain_compatible(self): n1 = dns.name.Name(('a', 'b', '')) n2 = dns.name.Name(('a', 'b', 's', '')) - py3 = (sys.version_info[0] > 2) try: raise dns.resolver.NXDOMAIN except dns.exception.DNSException as e: - if not py3: + if not PY3: # pylint: disable=exception-message-attribute self.assertTrue((e.message == e.__doc__)) self.assertTrue((e.args == (e.__doc__,))) @@ -297,7 +296,7 @@ class NXDOMAINExceptionTestCase(unittest.TestCase): try: raise dns.resolver.NXDOMAIN("errmsg") except dns.exception.DNSException as e: - if not py3: + if not PY3: # pylint: disable=exception-message-attribute self.assertTrue((e.message == "errmsg")) self.assertTrue((e.args == ("errmsg",))) @@ -309,7 +308,7 @@ class NXDOMAINExceptionTestCase(unittest.TestCase): try: raise dns.resolver.NXDOMAIN("errmsg", -1) except dns.exception.DNSException as e: - if not py3: + if not PY3: # pylint: disable=exception-message-attribute self.assertTrue((e.message == "")) self.assertTrue((e.args == ("errmsg", -1))) @@ -337,7 +336,7 @@ class NXDOMAINExceptionTestCase(unittest.TestCase): raise dns.resolver.NXDOMAIN(qnames=[n1]) except dns.exception.DNSException as e: MSG = "The DNS query name does not exist: a.b." - if not py3: + if not PY3: # pylint: disable=exception-message-attribute self.assertTrue((e.message == MSG), e.message) self.assertTrue((e.args == (MSG,)), repr(e.args)) @@ -354,7 +353,7 @@ class NXDOMAINExceptionTestCase(unittest.TestCase): e0 = dns.resolver.NXDOMAIN("errmsg") e = e0 + e MSG = "None of DNS query names exist: a.b.s., a.b." - if not py3: + if not PY3: # pylint: disable=exception-message-attribute self.assertTrue((e.message == MSG), e.message) self.assertTrue((e.args == (MSG,)), repr(e.args)) @@ -374,7 +373,7 @@ class NXDOMAINExceptionTestCase(unittest.TestCase): raise dns.resolver.NXDOMAIN(qnames=[n1], responses={n1: 'r1.1'}) except Exception as e: MSG = "The DNS query name does not exist: a.b." - if not py3: + if not PY3: # pylint: disable=exception-message-attribute self.assertTrue((e.message == MSG), e.message) self.assertTrue((e.args == (MSG,)), repr(e.args)) -- 2.47.3