1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-08 16:53:23 +00:00

Substantial refactoring

This refactoring includes some PEP-8 compliance changes, as well as some more
complete testing to ensure that we're in fact serving everything out of
cassettes when we thing we are.

Incidentally, it also includes fixes for #3 and #4
This commit is contained in:
Dan Lecocq
2013-08-02 16:15:26 -07:00
committed by Kevin McCarthy
parent 3742e2fdc0
commit b488ca67fe
16 changed files with 652 additions and 401 deletions

View File

@@ -1,75 +1,75 @@
'''Utilities for patching in cassettes'''
import httplib
from contextlib import contextmanager
from .stubs import VCRHTTPConnection, VCRHTTPSConnection
# Save some of the original types for the purposes of unpatching
_HTTPConnection = httplib.HTTPConnection
_HTTPSConnection = httplib.HTTPSConnection
try:
import requests.packages.urllib3.connectionpool
_VerifiedHTTPSConnection = requests.packages.urllib3.connectionpool.VerifiedHTTPSConnection
_HTTPConnection = requests.packages.urllib3.connectionpool.HTTPConnection
except ImportError:
# Try to save the original types for requests
import requests.packages.urllib3.connectionpool as cpool
_VerifiedHTTPSConnection = cpool.VerifiedHTTPSConnection
_HTTPConnection = cpool.HTTPConnection
except ImportError: # pragma: no cover
pass
try:
# Try to save the original types for urllib3
import urllib3
_VerifiedHTTPSConnection = urllib3.connectionpool.VerifiedHTTPSConnection
except ImportError:
_VerifiedHTTPSConnection = urllib3.connectionpool.VerifiedHTTPSConnection
except ImportError: # pragma: no cover
pass
def install(cassette_path):
def install(cassette):
'''Install a cassette in lieu of actuall fetching'''
httplib.HTTPConnection = httplib.HTTP._connection_class = VCRHTTPConnection
httplib.HTTPSConnection = httplib.HTTPS._connection_class = VCRHTTPSConnection
httplib.HTTPConnection._vcr_cassette_path = cassette_path
httplib.HTTPSConnection._vcr_cassette_path = cassette_path
httplib.HTTPSConnection = httplib.HTTPS._connection_class = (
VCRHTTPSConnection)
httplib.HTTPConnection.cassette = cassette
httplib.HTTPSConnection.cassette = cassette
#patch requests
# patch requests
try:
import requests.packages.urllib3.connectionpool
from .requests_stubs import VCRVerifiedHTTPSConnection
requests.packages.urllib3.connectionpool.VerifiedHTTPSConnection = VCRVerifiedHTTPSConnection
requests.packages.urllib3.connectionpool.VerifiedHTTPSConnection._vcr_cassette_path = cassette_path
requests.packages.urllib3.connectionpool.HTTPConnection = VCRHTTPConnection
requests.packages.urllib3.connectionpool.HTTPConnection._vcr_cassette_path = cassette_path
except ImportError:
import requests.packages.urllib3.connectionpool as cpool
from .stubs.requests_stubs import VCRVerifiedHTTPSConnection
cpool.VerifiedHTTPSConnection = VCRVerifiedHTTPSConnection
cpool.VerifiedHTTPSConnection.cassette = cassette
cpool.HTTPConnection = VCRHTTPConnection
cpool.HTTPConnection.cassette = cassette
except ImportError: # pragma: no cover
pass
#patch urllib3
# patch urllib3
try:
import urllib3.connectionpool
from .urllib3_stubs import VCRVerifiedHTTPSConnection
urllib3.connectionpool.VerifiedHTTPSConnection = VCRVerifiedHTTPSConnection
urllib3.connectionpool.VerifiedHTTPSConnection._vcr_cassette_path = cassette_path
urllib3.connectionpool.HTTPConnection = VCRHTTPConnection
urllib3.connectionpool.HTTPConnection._vcr_cassette_path = cassette_path
except ImportError:
import urllib3.connectionpool as cpool
from .stubs.urllib3_stubs import VCRVerifiedHTTPSConnection
cpool.VerifiedHTTPSConnection = VCRVerifiedHTTPSConnection
cpool.VerifiedHTTPSConnection.cassette = cassette
cpool.HTTPConnection = VCRHTTPConnection
cpool.HTTPConnection.cassette = cassette
except ImportError: # pragma: no cover
pass
def reset():
'''Unto all the patching'''
httplib.HTTPConnection = httplib.HTTP._connection_class = _HTTPConnection
httplib.HTTPSConnection = httplib.HTTPS._connection_class = \
_HTTPSConnection
try:
import requests.packages.urllib3.connectionpool
requests.packages.urllib3.connectionpool.VerifiedHTTPSConnection = _VerifiedHTTPSConnection
requests.packages.urllib3.connectionpool.HTTPConnection = _HTTPConnection
except ImportError:
import requests.packages.urllib3.connectionpool as cpool
cpool.VerifiedHTTPSConnection = _VerifiedHTTPSConnection
cpool.HTTPConnection = _HTTPConnection
except ImportError: # pragma: no cover
pass
try:
import urllib3.connectionpool
urllib3.connectionpool.VerifiedHTTPSConnection = _VerifiedHTTPSConnection
urllib3.connectionpool.HTTPConnection = _HTTPConnection
except ImportError:
import urllib3.connectionpool as cpool
cpool.VerifiedHTTPSConnection = _VerifiedHTTPSConnection
cpool.HTTPConnection = _HTTPConnection
except ImportError: # pragma: no cover
pass
@contextmanager
def use_cassette(cassette_path):
install(cassette_path)
yield
reset()