Skip to content

Commit e598a7b

Browse files
committed
add min version check for dnspython
1 parent 2b33176 commit e598a7b

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

pymongo/asynchronous/srv_resolver.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717

1818
import ipaddress
1919
import random
20+
from importlib.metadata import version
2021
from typing import TYPE_CHECKING, Any, Optional, Union
2122

22-
from pymongo.common import CONNECT_TIMEOUT
23+
from pymongo.common import CONNECT_TIMEOUT, check_for_min_version
2324
from pymongo.errors import ConfigurationError
2425

2526
if TYPE_CHECKING:
@@ -32,6 +33,15 @@ def _have_dnspython() -> bool:
3233
try:
3334
import dns # noqa: F401
3435

36+
dns_version = version("dnspython")
37+
required_version, is_valid = check_for_min_version(dns_version, "dnspython")
38+
if not is_valid:
39+
raise RuntimeError(
40+
f"pymongo requires dnspython>={required_version}, "
41+
f"found version {dns_version}. "
42+
"Install a compatible version with pip"
43+
)
44+
3545
return True
3646
except ImportError:
3747
return False
@@ -80,6 +90,8 @@ def __init__(
8090
srv_service_name: str,
8191
srv_max_hosts: int = 0,
8292
):
93+
# Ensure the version of dnspython is compatible.
94+
_have_dnspython()
8395
self.__fqdn = fqdn
8496
self.__srv = srv_service_name
8597
self.__connect_timeout = connect_timeout or CONNECT_TIMEOUT

pymongo/synchronous/srv_resolver.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717

1818
import ipaddress
1919
import random
20+
from importlib.metadata import version
2021
from typing import TYPE_CHECKING, Any, Optional, Union
2122

22-
from pymongo.common import CONNECT_TIMEOUT
23+
from pymongo.common import CONNECT_TIMEOUT, check_for_min_version
2324
from pymongo.errors import ConfigurationError
2425

2526
if TYPE_CHECKING:
@@ -32,6 +33,15 @@ def _have_dnspython() -> bool:
3233
try:
3334
import dns # noqa: F401
3435

36+
dns_version = version("dnspython")
37+
required_version, is_valid = check_for_min_version(dns_version, "dnspython")
38+
if not is_valid:
39+
raise RuntimeError(
40+
f"pymongo requires dnspython>={required_version}, "
41+
f"found version {dns_version}. "
42+
"Install a compatible version with pip"
43+
)
44+
3545
return True
3646
except ImportError:
3747
return False
@@ -80,6 +90,8 @@ def __init__(
8090
srv_service_name: str,
8191
srv_max_hosts: int = 0,
8292
):
93+
# Ensure the version of dnspython is compatible.
94+
_have_dnspython()
8395
self.__fqdn = fqdn
8496
self.__srv = srv_service_name
8597
self.__connect_timeout = connect_timeout or CONNECT_TIMEOUT

0 commit comments

Comments
 (0)