Skip to content

Commit 5e7020f

Browse files
committed
CI: update tests for dateutil >= 2.7.0
closes #18332
1 parent df2e361 commit 5e7020f

File tree

5 files changed

+26
-55
lines changed

5 files changed

+26
-55
lines changed

ci/requirements-3.6_NUMPY_DEV.build.sh

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ PRE_WHEELS="https://7933911d6844c6c53a7d-47bd50c35cd79bd838daf386af554a83.ssl.cf
1212
pip install --pre --upgrade --timeout=60 -f $PRE_WHEELS numpy scipy
1313

1414
# install dateutil from master
15-
# pip install -U git+git://github.com/dateutil/dateutil.git
16-
pip install dateutil
15+
pip install -U git+git://github.com/dateutil/dateutil.git
1716

1817
# cython via pip
1918
pip install cython

pandas/conftest.py

-10
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import pytest
22

3-
from distutils.version import LooseVersion
43
import numpy
54
import pandas
6-
import dateutil
75
import pandas.util._test_decorators as td
86

97

@@ -68,14 +66,6 @@ def ip():
6866
return InteractiveShell()
6967

7068

71-
is_dateutil_le_261 = pytest.mark.skipif(
72-
LooseVersion(dateutil.__version__) > LooseVersion('2.6.1'),
73-
reason="dateutil api change version")
74-
is_dateutil_gt_261 = pytest.mark.skipif(
75-
LooseVersion(dateutil.__version__) <= LooseVersion('2.6.1'),
76-
reason="dateutil stable version")
77-
78-
7969
@pytest.fixture(params=[None, 'gzip', 'bz2', 'zip',
8070
pytest.param('xz', marks=td.skip_if_no_lzma)])
8171
def compression(request):

pandas/tests/indexes/datetimes/test_tools.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from distutils.version import LooseVersion
1313

1414
import pandas as pd
15-
from pandas.conftest import is_dateutil_le_261, is_dateutil_gt_261
1615
from pandas._libs import tslib
1716
from pandas._libs.tslibs import parsing
1817
from pandas.core.tools import datetimes as tools
@@ -1058,7 +1057,7 @@ def test_dayfirst(self, cache):
10581057
class TestGuessDatetimeFormat(object):
10591058

10601059
@td.skip_if_not_us_locale
1061-
@is_dateutil_le_261
1060+
@td.skip_if_dateutil_le_261
10621061
def test_guess_datetime_format_for_array(self):
10631062
expected_format = '%Y-%m-%d %H:%M:%S.%f'
10641063
dt_string = datetime(2011, 12, 30, 0, 0, 0).strftime(expected_format)
@@ -1079,7 +1078,7 @@ def test_guess_datetime_format_for_array(self):
10791078
assert format_for_string_of_nans is None
10801079

10811080
@td.skip_if_not_us_locale
1082-
@is_dateutil_gt_261
1081+
@td.skip_if_dateutil_gt_261
10831082
def test_guess_datetime_format_for_array_gt_261(self):
10841083
expected_format = '%Y-%m-%d %H:%M:%S.%f'
10851084
dt_string = datetime(2011, 12, 30, 0, 0, 0).strftime(expected_format)

pandas/tests/tslibs/test_parsing.py

+16-40
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from dateutil.parser import parse
99

1010
import pandas.util._test_decorators as td
11-
from pandas.conftest import is_dateutil_le_261, is_dateutil_gt_261
1211
from pandas import compat
1312
from pandas.util import testing as tm
1413
from pandas._libs.tslibs import parsing
@@ -96,7 +95,7 @@ def test_parsers_monthfreq(self):
9695
class TestGuessDatetimeFormat(object):
9796

9897
@td.skip_if_not_us_locale
99-
@is_dateutil_le_261
98+
@td.skip_if_dateutil_le_261
10099
@pytest.mark.parametrize(
101100
"string, format",
102101
[
@@ -113,7 +112,7 @@ def test_guess_datetime_format_with_parseable_formats(
113112
assert result == format
114113

115114
@td.skip_if_not_us_locale
116-
@is_dateutil_gt_261
115+
@td.skip_if_dateutil_gt_261
117116
@pytest.mark.parametrize(
118117
"string",
119118
['20111230', '2011-12-30', '30-12-2011',
@@ -124,7 +123,7 @@ def test_guess_datetime_format_with_parseable_formats_gt_261(
124123
result = parsing._guess_datetime_format(string)
125124
assert result is None
126125

127-
@is_dateutil_le_261
126+
@td.skip_if_dateutil_le_261
128127
@pytest.mark.parametrize(
129128
"dayfirst, expected",
130129
[
@@ -136,17 +135,22 @@ def test_guess_datetime_format_with_dayfirst(self, dayfirst, expected):
136135
ambiguous_string, dayfirst=dayfirst)
137136
assert result == expected
138137

139-
@is_dateutil_gt_261
140-
@pytest.mark.parametrize(
141-
"dayfirst", [True, False])
142-
def test_guess_datetime_format_with_dayfirst_gt_261(self, dayfirst):
138+
@td.skip_if_dateutil_gt_261
139+
def test_guess_datetime_format_with_dayfirst_gt_261(self):
143140
ambiguous_string = '01/01/2011'
144141
result = parsing._guess_datetime_format(
145-
ambiguous_string, dayfirst=dayfirst)
146-
assert result is None
142+
ambiguous_string, dayfirst=True)
143+
assert result == '%d/%m/%Y'
144+
145+
@td.skip_if_dateutil_gt_261
146+
def test_guess_datetime_format_no_dayfirst_gt_261(self):
147+
ambiguous_string = '01/01/2011'
148+
result = parsing._guess_datetime_format(
149+
ambiguous_string, dayfirst=False)
150+
assert result == '%m/%d/%Y'
147151

148152
@td.skip_if_has_locale
149-
@is_dateutil_le_261
153+
@td.skip_if_dateutil_le_261
150154
@pytest.mark.parametrize(
151155
"string, format",
152156
[
@@ -158,19 +162,6 @@ def test_guess_datetime_format_with_locale_specific_formats(
158162
result = parsing._guess_datetime_format(string)
159163
assert result == format
160164

161-
@td.skip_if_has_locale
162-
@is_dateutil_gt_261
163-
@pytest.mark.parametrize(
164-
"string",
165-
[
166-
'30/Dec/2011',
167-
'30/December/2011',
168-
'30/Dec/2011 00:00:00'])
169-
def test_guess_datetime_format_with_locale_specific_formats_gt_261(
170-
self, string):
171-
result = parsing._guess_datetime_format(string)
172-
assert result is None
173-
174165
def test_guess_datetime_format_invalid_inputs(self):
175166
# A datetime string must include a year, month and a day for it
176167
# to be guessable, in addition to being a string that looks like
@@ -189,7 +180,7 @@ def test_guess_datetime_format_invalid_inputs(self):
189180
for invalid_dt in invalid_dts:
190181
assert parsing._guess_datetime_format(invalid_dt) is None
191182

192-
@is_dateutil_le_261
183+
@td.skip_if_dateutil_le_261
193184
@pytest.mark.parametrize(
194185
"string, format",
195186
[
@@ -204,21 +195,6 @@ def test_guess_datetime_format_nopadding(self, string, format):
204195
result = parsing._guess_datetime_format(string)
205196
assert result == format
206197

207-
@is_dateutil_gt_261
208-
@pytest.mark.parametrize(
209-
"string",
210-
[
211-
'2011-1-1',
212-
'30-1-2011',
213-
'1/1/2011',
214-
'2011-1-1 00:00:00',
215-
'2011-1-1 0:0:0',
216-
'2011-1-3T00:00:0'])
217-
def test_guess_datetime_format_nopadding_gt_261(self, string):
218-
# GH 11142
219-
result = parsing._guess_datetime_format(string)
220-
assert result is None
221-
222198

223199
class TestArrayToDatetime(object):
224200
def test_try_parse_dates(self):

pandas/util/_test_decorators.py

+7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def test_foo():
2727
import pytest
2828
import locale
2929
from distutils.version import LooseVersion
30+
import dateutil
3031

3132
from pandas.compat import (is_platform_windows, is_platform_32bit, PY3,
3233
import_lzma)
@@ -187,3 +188,9 @@ def decorated_func(func):
187188
"installed->{installed}".format(
188189
enabled=_USE_NUMEXPR,
189190
installed=_NUMEXPR_INSTALLED))
191+
skip_if_dateutil_le_261 = pytest.mark.skipif(
192+
LooseVersion(dateutil.__version__) > LooseVersion('2.6.1'),
193+
reason="dateutil api change version")
194+
skip_if_dateutil_gt_261 = pytest.mark.skipif(
195+
LooseVersion(dateutil.__version__) <= LooseVersion('2.6.1'),
196+
reason="dateutil stable version")

0 commit comments

Comments
 (0)