diff --git a/tests/integration/test_urllib3.py b/tests/integration/test_urllib3.py index 2884d35..51618c7 100644 --- a/tests/integration/test_urllib3.py +++ b/tests/integration/test_urllib3.py @@ -8,7 +8,6 @@ import vcr from vcr.patch import force_reset from assertions import assert_cassette_empty, assert_is_json urllib3 = pytest.importorskip("urllib3") -cpool = pytest.importorskip("urllib3.connectionpool") @pytest.fixture(scope='module') @@ -143,6 +142,7 @@ def test_https_with_cert_validation_disabled(tmpdir, httpbin_secure, pool_mgr): def test_urllib3_force_reset(): + cpool = urllib3.connectionpool http_original = cpool.HTTPConnection https_original = cpool.HTTPSConnection verified_https_original = cpool.VerifiedHTTPSConnection diff --git a/vcr/patch.py b/vcr/patch.py index 434e45c..9de12a3 100644 --- a/vcr/patch.py +++ b/vcr/patch.py @@ -362,8 +362,22 @@ class ConnectionRemover(object): def reset_patchers(): yield mock.patch.object(httplib, 'HTTPConnection', _HTTPConnection) yield mock.patch.object(httplib, 'HTTPSConnection', _HTTPSConnection) + try: - import requests.packages.urllib3.connectionpool as cpool + import requests + if requests.__build__ < 0x021603: + # Avoid double unmock if requests 2.16.3 + # First, this is pointless, requests.packages.urllib3 *IS* urllib3 (see packages.py) + # Second, this is unmocking twice the same classes with different namespaces + # and is creating weird issues and bugs: + # > AssertionError: assert + # > is + # This assert should work!!! + # Note that this also means that now, requests.packages is never imported + # if requests 2.16.3 or greater is used with VCRPy. + import requests.packages.urllib3.connectionpool as cpool + else: + raise ImportError("Skip requests not vendored anymore") except ImportError: # pragma: no cover pass else: