diff --git a/libcloud/compute/base.py b/libcloud/compute/base.py index 4cfcf46f7d..b3be0ad880 100644 --- a/libcloud/compute/base.py +++ b/libcloud/compute/base.py @@ -25,8 +25,9 @@ import os import socket import binascii +import platform -from libcloud.utils.py3 import b +from libcloud.utils.py3 import b, PY2 import libcloud.compute.ssh from libcloud.pricing import get_size_price @@ -1294,10 +1295,19 @@ def is_supported(address): """ Return True for supported address. """ - if force_ipv4 and not is_valid_ip_address(address=address, - family=socket.AF_INET): - return False - return True + if PY2 and os.name == 'nt' and platform.python_implementation() == 'CPython': + # Addressing non-backported fix, reported/patched: https://bugs.python.org/issue7171 + if force_ipv4: + try: + socket.inet_aton(address) + except socket.error: + return False + return True + else: + raise NotImplementedError('IPv6 address validation unsupported on Windows CPython 2') + + return is_valid_ip_address(address=address, + family=socket.AF_INET if force_ipv4 else socket.AF_INET6) def filter_addresses(addresses): """ diff --git a/libcloud/utils/py3.py b/libcloud/utils/py3.py index 7ae9cd6431..2e95a1f85d 100644 --- a/libcloud/utils/py3.py +++ b/libcloud/utils/py3.py @@ -36,11 +36,9 @@ PY2_pre_279 = PY2 and sys.version_info < (2, 7, 9) PY3_pre_32 = PY3 and sys.version_info < (3, 2) -PY2 = False PY25 = False PY26 = False PY27 = False -PY3 = False PY32 = False if sys.version_info >= (2, 0) and sys.version_info < (3, 0):