Allow for exceptions from tell()

This commit is contained in:
Cory Benfield
2016-03-07 08:31:23 +00:00
parent 4f378b0e1a
commit e034dd1140
2 changed files with 20 additions and 2 deletions
+6 -1
View File
@@ -83,7 +83,12 @@ def super_len(o):
)
if hasattr(o, 'tell'):
current_position = o.tell()
try:
current_position = o.tell()
except (OSError, IOError):
# This can happen in some weird situations, such as when the file
# is actually a special file descriptor like stdin.
current_position = 0
return max(0, total_length - current_position)
+14 -1
View File
@@ -15,7 +15,6 @@ from .compat import StringIO, cStringIO
class TestSuperLen:
@pytest.mark.parametrize(
'stream, value', (
(StringIO.StringIO, 'Test'),
@@ -33,6 +32,20 @@ class TestSuperLen:
s.write('foobarbogus')
assert super_len(s) == 0
@pytest.mark.parametrize('error', [IOError, OSError])
def test_super_len_handles_files_raising_weird_errors_in_tell(self, error):
"""
If tell() raises errors, assume the cursor is at position zero.
"""
class BoomFile(object):
def __len__(self):
return 5
def tell(self):
raise error()
assert super_len(BoomFile()) == 5
class TestGetEnvironProxies:
"""Ensures that IP addresses are correctly matches with ranges