test_rendering.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # -*- coding: utf-8 -*-
  2. from distutils.version import LooseVersion
  3. import pprint
  4. import dateutil
  5. import pytest
  6. import pytz # noqa # a test below uses pytz but only inside a `eval` call
  7. from pandas import Timestamp
  8. class TestTimestampRendering(object):
  9. # dateutil zone change (only matters for repr)
  10. if LooseVersion(dateutil.__version__) >= LooseVersion('2.6.0'):
  11. timezones = ['UTC', 'Asia/Tokyo', 'US/Eastern',
  12. 'dateutil/US/Pacific']
  13. else:
  14. timezones = ['UTC', 'Asia/Tokyo', 'US/Eastern',
  15. 'dateutil/America/Los_Angeles']
  16. @pytest.mark.parametrize('tz', timezones)
  17. @pytest.mark.parametrize('freq', ['D', 'M', 'S', 'N'])
  18. @pytest.mark.parametrize('date', ['2014-03-07', '2014-01-01 09:00',
  19. '2014-01-01 00:00:00.000000001'])
  20. def test_repr(self, date, freq, tz):
  21. # avoid to match with timezone name
  22. freq_repr = "'{0}'".format(freq)
  23. if tz.startswith('dateutil'):
  24. tz_repr = tz.replace('dateutil', '')
  25. else:
  26. tz_repr = tz
  27. date_only = Timestamp(date)
  28. assert date in repr(date_only)
  29. assert tz_repr not in repr(date_only)
  30. assert freq_repr not in repr(date_only)
  31. assert date_only == eval(repr(date_only))
  32. date_tz = Timestamp(date, tz=tz)
  33. assert date in repr(date_tz)
  34. assert tz_repr in repr(date_tz)
  35. assert freq_repr not in repr(date_tz)
  36. assert date_tz == eval(repr(date_tz))
  37. date_freq = Timestamp(date, freq=freq)
  38. assert date in repr(date_freq)
  39. assert tz_repr not in repr(date_freq)
  40. assert freq_repr in repr(date_freq)
  41. assert date_freq == eval(repr(date_freq))
  42. date_tz_freq = Timestamp(date, tz=tz, freq=freq)
  43. assert date in repr(date_tz_freq)
  44. assert tz_repr in repr(date_tz_freq)
  45. assert freq_repr in repr(date_tz_freq)
  46. assert date_tz_freq == eval(repr(date_tz_freq))
  47. def test_repr_utcoffset(self):
  48. # This can cause the tz field to be populated, but it's redundant to
  49. # include this information in the date-string.
  50. date_with_utc_offset = Timestamp('2014-03-13 00:00:00-0400', tz=None)
  51. assert '2014-03-13 00:00:00-0400' in repr(date_with_utc_offset)
  52. assert 'tzoffset' not in repr(date_with_utc_offset)
  53. assert 'pytz.FixedOffset(-240)' in repr(date_with_utc_offset)
  54. expr = repr(date_with_utc_offset).replace("'pytz.FixedOffset(-240)'",
  55. 'pytz.FixedOffset(-240)')
  56. assert date_with_utc_offset == eval(expr)
  57. def test_timestamp_repr_pre1900(self):
  58. # pre-1900
  59. stamp = Timestamp('1850-01-01', tz='US/Eastern')
  60. repr(stamp)
  61. iso8601 = '1850-01-01 01:23:45.012345'
  62. stamp = Timestamp(iso8601, tz='US/Eastern')
  63. result = repr(stamp)
  64. assert iso8601 in result
  65. def test_pprint(self):
  66. # GH#12622
  67. nested_obj = {'foo': 1,
  68. 'bar': [{'w': {'a': Timestamp('2011-01-01')}}] * 10}
  69. result = pprint.pformat(nested_obj, width=50)
  70. expected = r"""{'bar': [{'w': {'a': Timestamp('2011-01-01 00:00:00')}},
  71. {'w': {'a': Timestamp('2011-01-01 00:00:00')}},
  72. {'w': {'a': Timestamp('2011-01-01 00:00:00')}},
  73. {'w': {'a': Timestamp('2011-01-01 00:00:00')}},
  74. {'w': {'a': Timestamp('2011-01-01 00:00:00')}},
  75. {'w': {'a': Timestamp('2011-01-01 00:00:00')}},
  76. {'w': {'a': Timestamp('2011-01-01 00:00:00')}},
  77. {'w': {'a': Timestamp('2011-01-01 00:00:00')}},
  78. {'w': {'a': Timestamp('2011-01-01 00:00:00')}},
  79. {'w': {'a': Timestamp('2011-01-01 00:00:00')}}],
  80. 'foo': 1}"""
  81. assert result == expected