From a9ff644c8991d07cea5bfd4e7b7dbf222ef28bd2 Mon Sep 17 00:00:00 2001 From: y-p Date: Sun, 30 Sep 2012 12:05:04 +0200 Subject: [PATCH 1/9] TST: io.parsers._read should accept unicode urls _read() is finicky about it's parameters, so tested indirectly via read_csv --- pandas/io/tests/test_parsers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pandas/io/tests/test_parsers.py b/pandas/io/tests/test_parsers.py index 8df1270679364..3c724fce28015 100644 --- a/pandas/io/tests/test_parsers.py +++ b/pandas/io/tests/test_parsers.py @@ -108,7 +108,12 @@ def test_empty_string(self): def test_read_csv(self): - pass + if not py3compat.PY3: + fname=u"file://"+unicode(self.csv1) + try: + df1 = read_csv(fname, index_col=0, parse_dates=True) + except IOError: + assert(False), "read_csv should accept unicode objects as urls" def test_dialect(self): data = """\ From f981264cdf96de12df82178ddb6dec7ed5bc97bb Mon Sep 17 00:00:00 2001 From: y-p Date: Sun, 30 Sep 2012 11:18:43 +0200 Subject: [PATCH 2/9] BUG: _read should accept any basestring --- pandas/io/parsers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/io/parsers.py b/pandas/io/parsers.py index f01d769824734..88bad2a54f05c 100644 --- a/pandas/io/parsers.py +++ b/pandas/io/parsers.py @@ -156,7 +156,7 @@ def _read(cls, filepath_or_buffer, kwds): if skipfooter is not None: kwds['skip_footer'] = skipfooter - if isinstance(filepath_or_buffer, str) and _is_url(filepath_or_buffer): + if isinstance(filepath_or_buffer, basestring) and _is_url(filepath_or_buffer): from urllib2 import urlopen filepath_or_buffer = urlopen(filepath_or_buffer) if py3compat.PY3: # pragma: no cover From 1aab9cc612d44209bd08cfb27833e7febd150108 Mon Sep 17 00:00:00 2001 From: y-p Date: Sun, 30 Sep 2012 12:12:19 +0200 Subject: [PATCH 3/9] TST: tseries.converter.time2num should accept basestring,not str --- pandas/tseries/tests/test_converter.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 pandas/tseries/tests/test_converter.py diff --git a/pandas/tseries/tests/test_converter.py b/pandas/tseries/tests/test_converter.py new file mode 100644 index 0000000000000..552b38bd1ebc0 --- /dev/null +++ b/pandas/tseries/tests/test_converter.py @@ -0,0 +1,18 @@ +from datetime import datetime, time, timedelta +import sys +import os +import unittest + +import nose + +import numpy as np + +from pandas.tseries import converter + +def test_timtetonum_accepts_unicode(): + assert(converter.time2num("00:01")==converter.time2num(u"00:01")) + +if __name__ == '__main__': + import nose + nose.runmodule(argv=[__file__,'-vvs','-x','--pdb', '--pdb-failure'], + exit=False) From 7fc6b95205099009e8f88768312299292601d90d Mon Sep 17 00:00:00 2001 From: y-p Date: Sun, 30 Sep 2012 12:13:06 +0200 Subject: [PATCH 4/9] BUG: fix tseries.converter.time2num to accept basestring --- pandas/tseries/converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tseries/converter.py b/pandas/tseries/converter.py index fa046776285b9..9590a24643c1d 100644 --- a/pandas/tseries/converter.py +++ b/pandas/tseries/converter.py @@ -33,7 +33,7 @@ def _to_ordinalf(tm): return tot_sec def time2num(d): - if isinstance(d, str): + if isinstance(d, basestring): parsed = tools.to_datetime(d) if not isinstance(parsed, datetime): raise ValueError('Could not parse time %s' % d) From 57be5d43c39877d47f1a9bf8fd964fb81d26416e Mon Sep 17 00:00:00 2001 From: y-p Date: Sun, 30 Sep 2012 12:33:39 +0200 Subject: [PATCH 5/9] TST: tseries.converter.DateTimeConverter.convert() should accept basestring --- pandas/tseries/tests/test_converter.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pandas/tseries/tests/test_converter.py b/pandas/tseries/tests/test_converter.py index 552b38bd1ebc0..ec019b2fd6f73 100644 --- a/pandas/tseries/tests/test_converter.py +++ b/pandas/tseries/tests/test_converter.py @@ -7,11 +7,21 @@ import numpy as np -from pandas.tseries import converter +import pandas.tseries.converter as converter def test_timtetonum_accepts_unicode(): assert(converter.time2num("00:01")==converter.time2num(u"00:01")) +class TestDateTimeConverter(unittest.TestCase): + + def setUp(self): + self.dtc = converter.DatetimeConverter() + + def test_convert_accepts_unicode(self): + r1 = self.dtc.convert("12:22",None,None) + r2 = self.dtc.convert(u"12:22",None,None) + assert(r1==r2), "DatetimeConverter.convert should accept unicode" + if __name__ == '__main__': import nose nose.runmodule(argv=[__file__,'-vvs','-x','--pdb', '--pdb-failure'], From 4c91c622b45eb321c8c0dcc794bb043f87098660 Mon Sep 17 00:00:00 2001 From: y-p Date: Sun, 30 Sep 2012 12:33:50 +0200 Subject: [PATCH 6/9] BUG: tseries.converter.DateTimeConverter.convert() should accept basestring --- pandas/tseries/converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tseries/converter.py b/pandas/tseries/converter.py index 9590a24643c1d..fd869549d67f6 100644 --- a/pandas/tseries/converter.py +++ b/pandas/tseries/converter.py @@ -150,7 +150,7 @@ def try_parse(values): return dates.date2num(values) elif (com.is_integer(values) or com.is_float(values)): return values - elif isinstance(values, str): + elif isinstance(values, basestring): return try_parse(values) elif isinstance(values, (list, tuple, np.ndarray)): if not isinstance(values, np.ndarray): From a46d9ce8e7fbf60d50317d450e904c64befc5143 Mon Sep 17 00:00:00 2001 From: y-p Date: Sun, 30 Sep 2012 12:35:43 +0200 Subject: [PATCH 7/9] use basestring rather then (unicode,str) in isinstance --- pandas/core/frame.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 66524e571497c..a8a7cca2fa788 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -1366,7 +1366,7 @@ def info(self, verbose=True, buf=None): counts = self.count() assert(len(cols) == len(counts)) for col, count in counts.iteritems(): - if not isinstance(col, (unicode, str)): + if not isinstance(col, basestring): col = str(col) lines.append(_put_str(col, space) + '%d non-null values' % count) From 792b005b92c6c61849697be9cfa8f32b8186c99e Mon Sep 17 00:00:00 2001 From: y-p Date: Sun, 30 Sep 2012 12:38:00 +0200 Subject: [PATCH 8/9] use basestring rather then (str, unicode) in isinstance --- pandas/tseries/tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tseries/tools.py b/pandas/tseries/tools.py index 36bfca3ec2a7c..36a9f32bd04c4 100644 --- a/pandas/tseries/tools.py +++ b/pandas/tseries/tools.py @@ -36,7 +36,7 @@ def _infer(a, b): def _maybe_get_tz(tz): - if isinstance(tz, (str, unicode)): + if isinstance(tz, basestring): import pytz tz = pytz.timezone(tz) if com.is_integer(tz): From 05dbb8f295362acc82af8b927a901ad67de2873c Mon Sep 17 00:00:00 2001 From: y-p Date: Sun, 30 Sep 2012 13:24:12 +0200 Subject: [PATCH 9/9] BUG: allow unicode column_format in to_latex this is an internal method, and the kwd args is not used anywhere, still... --- pandas/core/format.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/format.py b/pandas/core/format.py index 0597a1ef0eb95..dca1976be838f 100644 --- a/pandas/core/format.py +++ b/pandas/core/format.py @@ -298,7 +298,7 @@ def to_latex(self, force_unicode=False, column_format=None): if column_format is None: column_format = '|l|%s|' % '|'.join('c' for _ in strcols) else: - assert isinstance(column_format, str) + assert isinstance(column_format, basestring) self.buf.write('\\begin{tabular}{%s}\n' % column_format) self.buf.write('\\hline\n')