1
0

test_yaml_timestamp_constructor.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. yaml = pytest.importorskip('yaml')
  4. import copy
  5. import datetime
  6. import dateutil.tz.tz
  7. import ioex.datetimeex
  8. import pytz
  9. @pytest.mark.parametrize(('loader'), [yaml.Loader, yaml.SafeLoader])
  10. @pytest.mark.parametrize(('yaml_string', 'expected_timestamp'), [
  11. ['2016-07-14 13:50:04', datetime.datetime(2016, 7, 14, 13, 50, 4, 0)],
  12. ['2016-07-14 13:50:04Z', pytz.utc.localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0))],
  13. ['2016-07-14 13:50:04Z', datetime.datetime(2016, 7, 14, 13, 50, 4, 0, tzinfo = dateutil.tz.tz.tzutc())],
  14. ['2016-01-14 13:50:04+01:00', pytz.timezone('Europe/Vienna').localize(datetime.datetime(2016, 1, 14, 13, 50, 4, 0))],
  15. ['2016-07-14 13:50:04+02:00', pytz.timezone('Europe/Vienna').localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0))],
  16. ['2016-07-14 13:50:04+02:00', datetime.datetime(2016, 7, 14, 13, 50, 4, 0, tzinfo = dateutil.tz.tz.tzoffset('Vienna', 2 * 60 * 60))],
  17. ['2016-07-14 13:50:04-07:00', pytz.timezone('US/Pacific').localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0))],
  18. ])
  19. def test_from_yaml(yaml_string, expected_timestamp, loader):
  20. loader_copy = copy.deepcopy(loader)
  21. ioex.datetimeex.add_yaml_timestamp_constructor(loader_copy)
  22. loaded_timestamp = yaml.load(yaml_string, Loader = loader_copy)
  23. assert loaded_timestamp == expected_timestamp
  24. assert loaded_timestamp.utcoffset() == expected_timestamp.utcoffset()
  25. @pytest.mark.parametrize(('yaml_string', 'tag', 'expected_timestamp'), [
  26. ['!without_timezone 2016-07-14 13:50:04', '!without_timezone', datetime.datetime(2016, 7, 14, 13, 50, 4, 0)],
  27. ['!datetime 2016-07-14 13:50:04Z', '!datetime', pytz.utc.localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0))],
  28. ])
  29. def test_from_yaml_tag(yaml_string, tag, expected_timestamp):
  30. loader = copy.deepcopy(yaml.SafeLoader)
  31. ioex.datetimeex.add_yaml_timestamp_constructor(loader, tag = tag)
  32. assert yaml.load(yaml_string, Loader = loader) == expected_timestamp