diff --git a/requests/models.py b/requests/models.py index 11434ef4..74385674 100644 --- a/requests/models.py +++ b/requests/models.py @@ -870,4 +870,6 @@ class Response(object): if not self._content_consumed: self.raw.close() - return self.raw.release_conn() + release_conn = getattr(self.raw, 'release_conn', None) + if release_conn is not None: + release_conn() diff --git a/tests/test_requests.py b/tests/test_requests.py index dcf14eec..6292f9d7 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1393,6 +1393,15 @@ class TestRequests: with pytest.raises(ValueError): r.json() + def test_response_without_release_conn(self): + """Test `close` call for non-urllib3-like raw objects. + Should work when `release_conn` attr doesn't exist on `response.raw`. + """ + resp = requests.Response() + resp.raw = StringIO.StringIO('test') + assert not resp.raw.closed + resp.close() + assert resp.raw.closed class TestCaseInsensitiveDict: