From f2c944ff0d7dd373842c4de82bb97da8e96715dc Mon Sep 17 00:00:00 2001 From: Janosh Riebesell Date: Thu, 22 Apr 2021 11:05:44 +0200 Subject: [PATCH 1/3] replace deprecated dns.resolver.query with dns.resolver.resolve --- pymongo/srv_resolver.py | 4 ++-- test/test_client.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pymongo/srv_resolver.py b/pymongo/srv_resolver.py index cf9ccffc43..61f9e513cc 100644 --- a/pymongo/srv_resolver.py +++ b/pymongo/srv_resolver.py @@ -48,7 +48,7 @@ def __init__(self, fqdn, connect_timeout=None): def get_options(self): try: - results = resolver.query(self.__fqdn, 'TXT', + results = resolver.resolve(self.__fqdn, 'TXT', lifetime=self.__connect_timeout) except (resolver.NoAnswer, resolver.NXDOMAIN): # No TXT records @@ -63,7 +63,7 @@ def get_options(self): def _resolve_uri(self, encapsulate_errors): try: - results = resolver.query('_mongodb._tcp.' + self.__fqdn, 'SRV', + results = resolver.resolve('_mongodb._tcp.' + self.__fqdn, 'SRV', lifetime=self.__connect_timeout) except Exception as exc: if not encapsulate_errors: diff --git a/test/test_client.py b/test/test_client.py index 2544bcef4c..d36495a011 100644 --- a/test/test_client.py +++ b/test/test_client.py @@ -393,10 +393,10 @@ def test_uri_option_precedence(self): def test_connection_timeout_ms_propagates_to_DNS_resolver(self): # Patch the resolver. from pymongo.srv_resolver import resolver - patched_resolver = FunctionCallRecorder(resolver.query) - pymongo.srv_resolver.resolver.query = patched_resolver + patched_resolver = FunctionCallRecorder(resolver.resolve) + pymongo.srv_resolver.resolver.resolve = patched_resolver def reset_resolver(): - pymongo.srv_resolver.resolver.query = resolver.query + pymongo.srv_resolver.resolver.resolve = resolver.resolve self.addCleanup(reset_resolver) # Setup. From a16675296702bd557f5fed0d4f6e675f1c312bb1 Mon Sep 17 00:00:00 2001 From: Janosh Riebesell Date: Thu, 22 Apr 2021 20:26:05 +0200 Subject: [PATCH 2/3] fall back on query in dns.resolver.resolve import for dns v1 compat --- pymongo/srv_resolver.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pymongo/srv_resolver.py b/pymongo/srv_resolver.py index 61f9e513cc..0218adff5b 100644 --- a/pymongo/srv_resolver.py +++ b/pymongo/srv_resolver.py @@ -16,6 +16,13 @@ try: from dns import resolver + + try: + # dnspython >= 2 + from dns.resolver import resolve as _resolve + except ImportError: + # dnspython 1.X + from dns.resolver import query as _resolve _HAVE_DNSPYTHON = True except ImportError: _HAVE_DNSPYTHON = False @@ -48,7 +55,7 @@ def __init__(self, fqdn, connect_timeout=None): def get_options(self): try: - results = resolver.resolve(self.__fqdn, 'TXT', + results = _resolve(self.__fqdn, 'TXT', lifetime=self.__connect_timeout) except (resolver.NoAnswer, resolver.NXDOMAIN): # No TXT records @@ -63,7 +70,7 @@ def get_options(self): def _resolve_uri(self, encapsulate_errors): try: - results = resolver.resolve('_mongodb._tcp.' + self.__fqdn, 'SRV', + results = _resolve('_mongodb._tcp.' + self.__fqdn, 'SRV', lifetime=self.__connect_timeout) except Exception as exc: if not encapsulate_errors: From 01cf1a7fd906ca0444e14aa446dbaa807d854d1a Mon Sep 17 00:00:00 2001 From: Janosh Riebesell Date: Fri, 23 Apr 2021 08:29:20 +0200 Subject: [PATCH 3/3] fix indentation + test_connection_timeout_ms_propagates_to_DNS_resolver --- pymongo/srv_resolver.py | 4 ++-- test/test_client.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pymongo/srv_resolver.py b/pymongo/srv_resolver.py index 0218adff5b..45a4f66611 100644 --- a/pymongo/srv_resolver.py +++ b/pymongo/srv_resolver.py @@ -56,7 +56,7 @@ def __init__(self, fqdn, connect_timeout=None): def get_options(self): try: results = _resolve(self.__fqdn, 'TXT', - lifetime=self.__connect_timeout) + lifetime=self.__connect_timeout) except (resolver.NoAnswer, resolver.NXDOMAIN): # No TXT records return None @@ -71,7 +71,7 @@ def get_options(self): def _resolve_uri(self, encapsulate_errors): try: results = _resolve('_mongodb._tcp.' + self.__fqdn, 'SRV', - lifetime=self.__connect_timeout) + lifetime=self.__connect_timeout) except Exception as exc: if not encapsulate_errors: # Raise the original error. diff --git a/test/test_client.py b/test/test_client.py index d36495a011..e62516bd58 100644 --- a/test/test_client.py +++ b/test/test_client.py @@ -392,11 +392,11 @@ def test_uri_option_precedence(self): _HAVE_DNSPYTHON, "DNS-related tests need dnspython to be installed") def test_connection_timeout_ms_propagates_to_DNS_resolver(self): # Patch the resolver. - from pymongo.srv_resolver import resolver - patched_resolver = FunctionCallRecorder(resolver.resolve) - pymongo.srv_resolver.resolver.resolve = patched_resolver + from pymongo.srv_resolver import _resolve + patched_resolver = FunctionCallRecorder(_resolve) + pymongo.srv_resolver._resolve = patched_resolver def reset_resolver(): - pymongo.srv_resolver.resolver.resolve = resolver.resolve + pymongo.srv_resolver._resolve = _resolve self.addCleanup(reset_resolver) # Setup.