Skip to content

Commit a9798e1

Browse files
author
y-p
committed
Merge pull request #6151 from y-p/PR_network
BLD/TST: catch more spurious errors in @network decorator
2 parents ebeedff + 8b0d250 commit a9798e1

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

pandas/io/tests/test_data.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -396,10 +396,9 @@ def test_read_famafrench(self):
396396
class TestFred(tm.TestCase):
397397
@network
398398
def test_fred(self):
399-
"""
400-
Throws an exception when DataReader can't get a 200 response from
401-
FRED.
402-
"""
399+
400+
# Throws an exception when DataReader can't get a 200 response from
401+
# FRED.
403402

404403
start = datetime(2010, 1, 1)
405404
end = datetime(2013, 1, 27)

pandas/util/testing.py

+19-3
Original file line numberDiff line numberDiff line change
@@ -968,8 +968,17 @@ def dec(f):
968968
return wrapper
969969

970970

971-
_network_error_classes = IOError, httplib.HTTPException
971+
_network_errno_vals = (
972+
101, # Network is unreachable
973+
110, # Connection timed out
974+
104, # Connection reset Error
975+
54, # Connection reset by peer
976+
)
972977

978+
_network_error_classes = (IOError, httplib.HTTPException)
979+
980+
if sys.version_info[:2] >= (3,3):
981+
_network_error_classes += (TimeoutError,)
973982

974983
def can_connect(url, error_classes=_network_error_classes):
975984
"""Try to connect to the given url. True if succeeds, False if IOError
@@ -998,7 +1007,9 @@ def can_connect(url, error_classes=_network_error_classes):
9981007
@optional_args
9991008
def network(t, url="http://www.google.com",
10001009
raise_on_error=_RAISE_NETWORK_ERROR_DEFAULT,
1001-
check_before_test=False, error_classes=_network_error_classes):
1010+
check_before_test=False,
1011+
error_classes=_network_error_classes,
1012+
skip_errnos=_network_errno_vals):
10021013
"""
10031014
Label a test as requiring network connection and, if an error is
10041015
encountered, only raise if it does not find a network connection.
@@ -1084,7 +1095,12 @@ def wrapper(*args, **kwargs):
10841095
raise SkipTest
10851096
try:
10861097
return t(*args, **kwargs)
1087-
except error_classes as e:
1098+
except Exception as e:
1099+
errno = getattr(e,'errno',None)
1100+
1101+
if not isinstance(e, error_classes) and not errno in skip_errnos:
1102+
raise
1103+
10881104
if raise_on_error or can_connect(url, error_classes):
10891105
raise
10901106
else:

0 commit comments

Comments
 (0)