diff --git a/requests_mock/compat.py b/requests_mock/compat.py new file mode 100644 index 0000000..b6e624f --- /dev/null +++ b/requests_mock/compat.py @@ -0,0 +1,46 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import requests + + +def _versiontuple(v): + return tuple(map(int, (v.split(".")))) + + +_requests_version = _versiontuple(requests.__version__) + + +if _requests_version < (2, 3): + + # NOTE(jamielennox): There is a problem with requests < 2.3.0 such that it + # needs a httplib message for use with cookie extraction. It has been fixed + # but it is needed until we can rely on a recent enough requests version. + + class _FakeHTTPMessage(object): + + def getheaders(self, name): + return None + + class _FakeHTTPResponse(object): + + def __init__(self): + self.msg = _FakeHTTPMessage() + + def isclosed(self): + # Don't let urllib try to close me + return False + + _fake_http_response = _FakeHTTPResponse() + +else: + _fake_http_response = None diff --git a/requests_mock/response.py b/requests_mock/response.py index 7c7836d..4b707ed 100644 --- a/requests_mock/response.py +++ b/requests_mock/response.py @@ -16,6 +16,8 @@ from requests.adapters import HTTPAdapter from requests.packages.urllib3.response import HTTPResponse import six +from requests_mock import compat + _BODY_ARGS = frozenset(['raw', 'body', 'content', 'text', 'json']) _HTTP_ARGS = frozenset(['status_code', 'reason', 'headers']) @@ -87,7 +89,8 @@ def create_response(request, **kwargs): reason=kwargs.get('reason'), body=body or six.BytesIO(six.b('')), decode_content=False, - preload_content=False) + preload_content=False, + original_response=compat._fake_http_response) response = _http_adapter.build_response(request, raw) response.connection = _FakeConnection() diff --git a/requirements.txt b/requirements.txt index c79b909..289b82a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -requests>=2.3 +requests>=1.1 six