summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate Prewitt <Nate.Prewitt@gmail.com>2016-09-12 14:50:21 -0600
committerNate Prewitt <Nate.Prewitt@gmail.com>2016-09-12 14:50:31 -0600
commit4dd7633d2ea613849fad1f8395e6a9d08742e17c (patch)
treeae7f6f346f1771d13d56f3126401050a76f2a474
parentc74bd70c3a97e30f0560bee9b7fa1bfc767ebf0b (diff)
downloadurllib3-4dd7633d2ea613849fad1f8395e6a9d08742e17c.tar.gz
changing conditional order to prefer isclosed over closed
isclosed is inherited from httplib/http.client's HTTPResponse while closed only occurs on io objects (Python 3). The file pointer can be empty and closed will still evaluate to False when isclosed is True.
-rw-r--r--test/test_response.py20
-rw-r--r--urllib3/response.py4
2 files changed, 19 insertions, 5 deletions
diff --git a/test/test_response.py b/test/test_response.py
index 5c66f69d..10aa410e 100644
--- a/test/test_response.py
+++ b/test/test_response.py
@@ -1,4 +1,5 @@
import unittest
+import socket
from io import BytesIO, BufferedReader
@@ -8,7 +9,7 @@ from urllib3.exceptions import (
)
from urllib3.packages.six.moves import http_client as httplib
from urllib3.util.retry import Retry
-
+from urllib3.util.response import is_fp_closed
from base64 import b64decode
@@ -159,8 +160,6 @@ class TestResponse(unittest.TestCase):
self.assertTrue(resp.closed)
def test_io(self):
- import socket
-
fp = BytesIO(b'foo')
resp = HTTPResponse(fp, preload_content=False)
@@ -190,6 +189,21 @@ class TestResponse(unittest.TestCase):
self.assertEqual(resp3.closed, True)
self.assertRaises(IOError, resp3.fileno)
+ def test_io_closed_consistently(self):
+ hlr = httplib.HTTPResponse(socket.socket())
+ hlr.fp = BytesIO(b'foo')
+ hlr.chunked = 0
+ hlr.length = 3
+ resp = HTTPResponse(hlr, preload_content=False)
+
+ self.assertEqual(resp.closed, False)
+ self.assertEqual(resp._fp.isclosed(), False)
+ self.assertEqual(is_fp_closed(resp._fp), False)
+ resp.read()
+ self.assertEqual(resp.closed, True)
+ self.assertEqual(resp._fp.isclosed(), True)
+ self.assertEqual(is_fp_closed(resp._fp), True)
+
def test_io_bufferedreader(self):
fp = BytesIO(b'foo')
resp = HTTPResponse(fp, preload_content=False)
diff --git a/urllib3/response.py b/urllib3/response.py
index be2accda..42d33319 100644
--- a/urllib3/response.py
+++ b/urllib3/response.py
@@ -482,10 +482,10 @@ class HTTPResponse(io.IOBase):
def closed(self):
if self._fp is None:
return True
+ elif hasattr(self._fp, 'isclosed'):
+ return self._fp.isclosed()
elif hasattr(self._fp, 'closed'):
return self._fp.closed
- elif hasattr(self._fp, 'isclosed'): # Python 2
- return self._fp.isclosed()
else:
return True