Skip to content

Commit 722fc77

Browse files
Merge pull request #9055 from jorisvandenbossche/periodconverter
TST: start tests for PeriodConverter
2 parents 5bb5025 + 29cb1f7 commit 722fc77

File tree

2 files changed

+57
-3
lines changed

2 files changed

+57
-3
lines changed

pandas/tseries/converter.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class PeriodConverter(dates.DateConverter):
109109
def convert(values, units, axis):
110110
if not hasattr(axis, 'freq'):
111111
raise TypeError('Axis must have `freq` set to convert to Periods')
112-
valid_types = (str, datetime, Period, pydt.date, pydt.time)
112+
valid_types = (compat.string_types, datetime, Period, pydt.date, pydt.time)
113113
if (isinstance(values, valid_types) or com.is_integer(values) or
114114
com.is_float(values)):
115115
return get_datevalue(values, axis.freq)
@@ -127,7 +127,7 @@ def convert(values, units, axis):
127127
def get_datevalue(date, freq):
128128
if isinstance(date, Period):
129129
return date.asfreq(freq).ordinal
130-
elif isinstance(date, (str, datetime, pydt.date, pydt.time)):
130+
elif isinstance(date, (compat.string_types, datetime, pydt.date, pydt.time)):
131131
return Period(date, freq).ordinal
132132
elif (com.is_integer(date) or com.is_float(date) or
133133
(isinstance(date, (np.ndarray, Index)) and (date.size == 1))):

pandas/tseries/tests/test_converter.py

+55-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import numpy as np
88
from numpy.testing import assert_almost_equal as np_assert_almost_equal
9-
from pandas import Timestamp
9+
from pandas import Timestamp, Period
1010
from pandas.compat import u
1111
import pandas.util.testing as tm
1212
from pandas.tseries.offsets import Second, Milli, Micro
@@ -103,6 +103,60 @@ def _assert_less(ts1, ts2):
103103
_assert_less(ts, ts + Micro(50))
104104

105105

106+
class TestPeriodConverter(tm.TestCase):
107+
108+
def setUp(self):
109+
self.pc = converter.PeriodConverter()
110+
111+
class Axis(object):
112+
pass
113+
114+
self.axis = Axis()
115+
self.axis.freq = 'D'
116+
117+
def test_convert_accepts_unicode(self):
118+
r1 = self.pc.convert("2012-1-1", None, self.axis)
119+
r2 = self.pc.convert(u("2012-1-1"), None, self.axis)
120+
self.assert_equal(r1, r2, "PeriodConverter.convert should accept unicode")
121+
122+
def test_conversion(self):
123+
rs = self.pc.convert(['2012-1-1'], None, self.axis)[0]
124+
xp = Period('2012-1-1').ordinal
125+
self.assertEqual(rs, xp)
126+
127+
rs = self.pc.convert('2012-1-1', None, self.axis)
128+
self.assertEqual(rs, xp)
129+
130+
rs = self.pc.convert([date(2012, 1, 1)], None, self.axis)[0]
131+
self.assertEqual(rs, xp)
132+
133+
rs = self.pc.convert(date(2012, 1, 1), None, self.axis)
134+
self.assertEqual(rs, xp)
135+
136+
rs = self.pc.convert([Timestamp('2012-1-1')], None, self.axis)[0]
137+
self.assertEqual(rs, xp)
138+
139+
rs = self.pc.convert(Timestamp('2012-1-1'), None, self.axis)
140+
self.assertEqual(rs, xp)
141+
142+
# FIXME
143+
# rs = self.pc.convert(np.datetime64('2012-01-01'), None, self.axis)
144+
# self.assertEqual(rs, xp)
145+
#
146+
# rs = self.pc.convert(np.datetime64('2012-01-01 00:00:00+00:00'), None, self.axis)
147+
# self.assertEqual(rs, xp)
148+
#
149+
# rs = self.pc.convert(np.array([np.datetime64('2012-01-01 00:00:00+00:00'),
150+
# np.datetime64('2012-01-02 00:00:00+00:00')]), None, self.axis)
151+
# self.assertEqual(rs[0], xp)
152+
153+
def test_integer_passthrough(self):
154+
# GH9012
155+
rs = self.pc.convert([0, 1], None, self.axis)
156+
xp = [0, 1]
157+
self.assertEqual(rs, xp)
158+
159+
106160
if __name__ == '__main__':
107161
import nose
108162
nose.runmodule(argv=[__file__, '-vvs', '-x', '--pdb', '--pdb-failure'],

0 commit comments

Comments
 (0)