mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 09:13:23 +00:00
httplib2 support
This commit is contained in:
committed by
Kevin McCarthy
parent
6bb67567f9
commit
46a2c25f6a
@@ -1,6 +1,6 @@
|
||||
'''Stubs for patching HTTP and HTTPS requests'''
|
||||
|
||||
from httplib import HTTPConnection, HTTPSConnection, HTTPMessage
|
||||
from httplib import HTTPConnection, HTTPSConnection, HTTPMessage, HTTPResponse
|
||||
from cStringIO import StringIO
|
||||
|
||||
from vcr.request import Request
|
||||
@@ -31,7 +31,7 @@ def parse_headers(header_list):
|
||||
return msg
|
||||
|
||||
|
||||
class VCRHTTPResponse(object):
|
||||
class VCRHTTPResponse(HTTPResponse):
|
||||
"""
|
||||
Stub reponse class that gets returned instead of a HTTPResponse
|
||||
"""
|
||||
@@ -175,6 +175,28 @@ class VCRConnection:
|
||||
def set_debuglevel(self, *args, **kwargs):
|
||||
self.real_connection.set_debuglevel(*args, **kwargs)
|
||||
|
||||
def connect(self):
|
||||
"""
|
||||
httplib2 uses this. Connects to the server I'm assuming.
|
||||
|
||||
Only pass to the baseclass if we don't have a recorded response
|
||||
and are not write-protected.
|
||||
"""
|
||||
|
||||
if hasattr(self, '_vcr_request') and \
|
||||
self._vcr_request in self.cassette and \
|
||||
self.cassette.record_mode != "all" and \
|
||||
self.cassette.rewound:
|
||||
# We already have a response we are going to play, don't
|
||||
# actually connect
|
||||
return
|
||||
|
||||
if self.cassette.write_protected:
|
||||
# Cassette is write-protected, don't actually connect
|
||||
return
|
||||
|
||||
return self.real_connection.connect(self)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
# need to temporarily reset here because the real connection
|
||||
# inherits from the thing that we are mocking out. Take out
|
||||
|
||||
51
vcr/stubs/httplib2_stubs.py
Normal file
51
vcr/stubs/httplib2_stubs.py
Normal file
@@ -0,0 +1,51 @@
|
||||
'''Stubs for httplib2'''
|
||||
|
||||
from httplib2 import HTTPConnectionWithTimeout, HTTPSConnectionWithTimeout
|
||||
from ..stubs import VCRHTTPConnection, VCRHTTPSConnection
|
||||
|
||||
|
||||
class VCRHTTPConnectionWithTimeout(VCRHTTPConnection,
|
||||
HTTPConnectionWithTimeout):
|
||||
_baseclass = HTTPConnectionWithTimeout
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
'''I overrode the init because I need to clean kwargs before calling
|
||||
HTTPConnection.__init__.'''
|
||||
|
||||
# Delete the keyword arguments that HTTPConnection would not recognize
|
||||
safe_keys = set(('host', 'port', 'strict', 'timeout', 'source_address'))
|
||||
unknown_keys = set(kwargs.keys()) - safe_keys
|
||||
safe_kwargs = kwargs.copy()
|
||||
for kw in unknown_keys:
|
||||
del safe_kwargs[kw]
|
||||
|
||||
self.proxy_info = kwargs.pop('proxy_info', None)
|
||||
VCRHTTPConnection.__init__(self, *args, **safe_kwargs)
|
||||
|
||||
|
||||
class VCRHTTPSConnectionWithTimeout(VCRHTTPSConnection,
|
||||
HTTPSConnectionWithTimeout):
|
||||
_baseclass = HTTPSConnectionWithTimeout
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
# Delete the keyword arguments that HTTPSConnection would not recognize
|
||||
safe_keys = set(('host', 'port', 'key_file', 'cert_file', 'strict',
|
||||
'timeout', 'source_address'))
|
||||
unknown_keys = set(kwargs.keys()) - safe_keys
|
||||
safe_kwargs = kwargs.copy()
|
||||
for kw in unknown_keys:
|
||||
del safe_kwargs[kw]
|
||||
self.proxy_info = kwargs.pop('proxy_info', None)
|
||||
if not 'ca_certs' in kwargs or kwargs['ca_certs'] is None:
|
||||
try:
|
||||
import httplib2
|
||||
self.ca_certs = httplib2.CA_CERTS
|
||||
except ImportError:
|
||||
self.ca_certs = None
|
||||
else:
|
||||
self.ca_certs = kwargs['ca_certs']
|
||||
|
||||
self.disable_ssl_certificate_validation = kwargs.pop(
|
||||
'disable_ssl_certificate_validation', None)
|
||||
VCRHTTPSConnection.__init__(self, *args, **safe_kwargs)
|
||||
Reference in New Issue
Block a user