Skip to content

Commit 0d5dc5a

Browse files
committed
COMPAT: test with latest dateutil via pip
COMPAT: dateutil 2.5.0 bug fix causes some tests to fail, skip for now xref #12611
1 parent 4f5099b commit 0d5dc5a

11 files changed

+41
-32
lines changed

ci/install_travis.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ else
130130
echo "pip installs"
131131
REQ="ci/requirements-${TRAVIS_PYTHON_VERSION}${JOB_TAG}.pip"
132132
if [ -e ${REQ} ]; then
133-
pip install -r $REQ
133+
pip install --upgrade -r $REQ
134134
fi
135135

136136
# remove any installed pandas package

ci/requirements-2.7.build

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
dateutil=2.1
1+
python-dateutil=2.4.1
22
pytz=2013b
33
numpy=1.9.3
44
cython=0.19.1

ci/requirements-2.7.pip

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
blosc
22
httplib2
3-
google-api-python-client == 1.2
4-
python-gflags == 2.0
5-
oauth2client == 1.5.0
3+
google-api-python-client==1.2
4+
python-gflags==2.0
5+
oauth2client==1.5.0
66
pathlib
77
py

ci/requirements-2.7.run

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
dateutil=2.1
1+
python-dateutil=2.4.1
22
pytz=2013b
33
numpy=1.9.3
44
xlwt=0.7.5

ci/requirements-3.5_OSX.build

-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
1-
python-dateutil
2-
pytz
31
numpy
42
cython

ci/requirements-3.5_OSX.pip

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
python-dateutil>=2.5.0

ci/requirements-3.5_OSX.run

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
python-dateutil
21
pytz
32
numpy
43
openpyxl

pandas/compat/__init__.py

+4
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,10 @@ def raise_with_traceback(exc, traceback=Ellipsis):
325325
def parse_date(timestr, *args, **kwargs):
326326
timestr = bytes(timestr)
327327
return _date_parser.parse(timestr, *args, **kwargs)
328+
elif PY2 and LooseVersion(dateutil.__version__) == '2.0':
329+
# dateutil brokenness
330+
raise Exception('dateutil 2.0 incompatible with Python 2.x, you must '
331+
'install version 1.5 or 2.1+!')
328332
else:
329333
parse_date = _date_parser.parse
330334

pandas/io/tests/test_parsers.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import re
1111
import nose
1212
import platform
13+
from distutils.version import LooseVersion
1314

1415
from multiprocessing.pool import ThreadPool
1516

@@ -1048,12 +1049,20 @@ def test_parse_dates_string(self):
10481049
'C': [2, 4, 5]}, idx)
10491050
tm.assert_frame_equal(rs, xp)
10501051

1051-
def test_yy_format(self):
1052+
def test_yy_format_with_yearfirst(self):
10521053
data = """date,time,B,C
10531054
090131,0010,1,2
10541055
090228,1020,3,4
10551056
090331,0830,5,6
10561057
"""
1058+
1059+
# https://github.com/dateutil/dateutil/issues/217
1060+
import dateutil
1061+
if dateutil.__version__ >= LooseVersion('2.5.0'):
1062+
raise nose.SkipTest("testing yearfirst=True not-support"
1063+
"on datetutil < 2.5.0 this works but"
1064+
"is wrong")
1065+
10571066
rs = self.read_csv(StringIO(data), index_col=0,
10581067
parse_dates=[['date', 'time']])
10591068
idx = DatetimeIndex([datetime(2009, 1, 31, 0, 10, 0),

pandas/tseries/tests/test_tslib.py

+20-9
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,11 @@ def test_does_not_convert_mixed_integer(self):
474474
good_date_string))
475475

476476
def test_parsers(self):
477+
478+
# https://github.com/dateutil/dateutil/issues/217
479+
import dateutil
480+
yearfirst = dateutil.__version__ >= LooseVersion('2.5.0')
481+
477482
cases = {'2011-01-01': datetime.datetime(2011, 1, 1),
478483
'2Q2005': datetime.datetime(2005, 4, 1),
479484
'2Q05': datetime.datetime(2005, 4, 1),
@@ -527,20 +532,26 @@ def test_parsers(self):
527532
}
528533

529534
for date_str, expected in compat.iteritems(cases):
530-
result1, _, _ = tools.parse_time_string(date_str)
531-
result2 = to_datetime(date_str)
532-
result3 = to_datetime([date_str])
533-
result4 = to_datetime(np.array([date_str], dtype=object))
534-
result5 = Timestamp(date_str)
535-
result6 = DatetimeIndex([date_str])[0]
536-
result7 = date_range(date_str, freq='S', periods=1)
535+
result1, _, _ = tools.parse_time_string(date_str,
536+
yearfirst=yearfirst)
537+
result2 = to_datetime(date_str, yearfirst=yearfirst)
538+
result3 = to_datetime([date_str], yearfirst=yearfirst)
539+
result4 = to_datetime(np.array([date_str], dtype=object),
540+
yearfirst=yearfirst)
541+
result6 = DatetimeIndex([date_str], yearfirst=yearfirst)[0]
537542
self.assertEqual(result1, expected)
538543
self.assertEqual(result2, expected)
539544
self.assertEqual(result3, expected)
540545
self.assertEqual(result4, expected)
541-
self.assertEqual(result5, expected)
542546
self.assertEqual(result6, expected)
543-
self.assertEqual(result7, expected)
547+
548+
# these really need to have yearfist, but we don't support
549+
if not yearfirst:
550+
result5 = Timestamp(date_str)
551+
self.assertEqual(result5, expected)
552+
result7 = date_range(date_str, freq='S', periods=1,
553+
yearfirst=yearfirst)
554+
self.assertEqual(result7, expected)
544555

545556
# NaT
546557
result1, _, _ = tools.parse_time_string('NaT')

pandas/tseries/tools.py

-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from datetime import datetime, timedelta, time
2-
import sys
3-
42
import numpy as np
53

64
import pandas.lib as lib
@@ -10,17 +8,6 @@
108
import pandas.compat as compat
119
from pandas.util.decorators import deprecate_kwarg
1210

13-
try:
14-
import dateutil
15-
# raise exception if dateutil 2.0 install on 2.x platform
16-
if (sys.version_info[0] == 2 and
17-
dateutil.__version__ == '2.0'): # pragma: no cover
18-
raise Exception('dateutil 2.0 incompatible with Python 2.x, you must '
19-
'install version 1.5 or 2.1+!')
20-
except ImportError: # pragma: no cover
21-
print('Please install python-dateutil via easy_install or some method!')
22-
raise # otherwise a 2nd import won't show the message
23-
2411
_DATEUTIL_LEXER_SPLIT = None
2512
try:
2613
# Since these are private methods from dateutil, it is safely imported

0 commit comments

Comments
 (0)