예제 #1
0
def test_retain_tz(tmpdir, create, todos):
    create("ar.ics", "SUMMARY:blah.ar\nDUE;VALUE=DATE-TIME;TZID=HST:20160102T000000\n")
    create("de.ics", "SUMMARY:blah.de\nDUE;VALUE=DATE-TIME;TZID=CET:20160102T000000\n")

    todos = list(todos())

    assert len(todos) == 2
    assert todos[0].due == datetime(2016, 1, 2, 0, 0, tzinfo=tzoffset(None, -36000))
    assert todos[1].due == datetime(2016, 1, 2, 0, 0, tzinfo=tzoffset(None, 3600))
예제 #2
0
    def test_strictdatetime(self):
        class MySchema(EmbeddedSchema):
            a = fields.StrictDateTimeField()
            b = fields.StrictDateTimeField(load_as_tz_aware=False)
            c = fields.StrictDateTimeField(load_as_tz_aware=True)

        # Test _deserialize
        s = MySchema(strict=True)

        for date in (
                datetime(2016, 8, 6),
                datetime(2016, 8, 6, tzinfo=tzutc()),
                "2016-08-06T00:00:00Z",
                "2016-08-06T00:00:00",
        ):
            data, _ = s.load({'a': date, 'b': date, 'c': date})
            assert data['a'] == datetime(2016, 8, 6)
            assert data['b'] == datetime(2016, 8, 6)
            assert data['c'] == datetime(2016, 8, 6, tzinfo=tzutc())

        for date in (
                "2016-08-06T00:00:00+02:00",
                datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200)),
        ):
            data, _ = s.load({'a': date, 'b': date, 'c': date})
            assert data['a'] == datetime(2016, 8, 5, 22, 0)
            assert data['b'] == datetime(2016, 8, 5, 22, 0)
            assert data['c'] == datetime(2016,
                                         8,
                                         6,
                                         tzinfo=tzoffset(None, 7200))

        with pytest.raises(ValidationError):
            s.load({'a': "dummy"})

        # Test _deserialize_from_mongo
        MyDataProxy = data_proxy_factory('My', MySchema())
        d = MyDataProxy()

        for date in (
                datetime(2016, 8, 6),
                datetime(2016, 8, 6, tzinfo=tzutc()),
        ):
            d.from_mongo({'a': date, 'b': date, 'c': date})
            assert d.get('a') == datetime(2016, 8, 6)
            assert d.get('b') == datetime(2016, 8, 6)
            assert d.get('c') == datetime(2016, 8, 6, tzinfo=tzutc())

        for date in (datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200)), ):
            d.from_mongo({'a': date, 'b': date, 'c': date})
            assert d.get('a') == datetime(2016, 8, 5, 22, 0)
            assert d.get('b') == datetime(2016, 8, 5, 22, 0)
            assert d.get('c') == datetime(2016,
                                          8,
                                          6,
                                          tzinfo=tzoffset(None, 7200))
 def test_parsing_different_timezone_offsets(self):
     # GH 17697
     data = ["2015-11-18 15:30:00+05:30", "2015-11-18 15:30:00+06:30"]
     data = np.array(data, dtype=object)
     result, result_tz = tslib.array_to_datetime(data)
     expected = np.array([datetime(2015, 11, 18, 15, 30,
                                   tzinfo=tzoffset(None, 19800)),
                          datetime(2015, 11, 18, 15, 30,
                                   tzinfo=tzoffset(None, 23400))],
                         dtype=object)
     tm.assert_numpy_array_equal(result, expected)
     assert result_tz is None
 def test_parsing_different_timezone_offsets(self):
     # GH 17697
     data = ["2015-11-18 15:30:00+05:30", "2015-11-18 15:30:00+06:30"]
     data = np.array(data, dtype=object)
     result, result_tz = tslib.array_to_datetime(data)
     expected = np.array([
         datetime(2015, 11, 18, 15, 30, tzinfo=tzoffset(None, 19800)),
         datetime(2015, 11, 18, 15, 30, tzinfo=tzoffset(None, 23400))
     ],
                         dtype=object)
     tm.assert_numpy_array_equal(result, expected)
     assert result_tz is None
예제 #5
0
    def test_strictdatetime(self):

        class MySchema(EmbeddedSchema):
            a = fields.StrictDateTimeField()
            b = fields.StrictDateTimeField(load_as_tz_aware=False)
            c = fields.StrictDateTimeField(load_as_tz_aware=True)

        # Test _deserialize
        s = MySchema(strict=True)

        for date in (
            datetime(2016, 8, 6),
            datetime(2016, 8, 6, tzinfo=tzutc()),
            "2016-08-06T00:00:00Z",
            "2016-08-06T00:00:00",
        ):
            data, _ = s.load({'a': date, 'b': date, 'c': date})
            assert data['a'] == datetime(2016, 8, 6)
            assert data['b'] == datetime(2016, 8, 6)
            assert data['c'] == datetime(2016, 8, 6, tzinfo=tzutc())

        for date in (
            "2016-08-06T00:00:00+02:00",
            datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200)),
        ):
            data, _ = s.load({'a': date, 'b': date, 'c': date})
            assert data['a'] == datetime(2016, 8, 5, 22, 0)
            assert data['b'] == datetime(2016, 8, 5, 22, 0)
            assert data['c'] == datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200))

        with pytest.raises(ValidationError):
            s.load({'a': "dummy"})

        # Test _deserialize_from_mongo
        MyDataProxy = data_proxy_factory('My', MySchema())
        d = MyDataProxy()

        for date in (
            datetime(2016, 8, 6),
            datetime(2016, 8, 6, tzinfo=tzutc()),
        ):
            d.from_mongo({'a': date, 'b': date, 'c': date})
            assert d.get('a') == datetime(2016, 8, 6)
            assert d.get('b') == datetime(2016, 8, 6)
            assert d.get('c') == datetime(2016, 8, 6, tzinfo=tzutc())

        for date in (
            datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200)),
        ):
            d.from_mongo({'a': date, 'b': date, 'c': date})
            assert d.get('a') == datetime(2016, 8, 5, 22, 0)
            assert d.get('b') == datetime(2016, 8, 5, 22, 0)
            assert d.get('c') == datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200))
예제 #6
0
def test_illegal_start_suppression(create, default_database, todos):
    create(
        'test.ics', 'SUMMARY:Start doing stuff\n'
        'DUE;VALUE=DATE-TIME;TZID=CET:20170331T120000\n'
        'DTSTART;VALUE=DATE-TIME;TZID=CET:20170331T140000\n')
    todo = next(todos())
    assert todo.start is None
    assert todo.due == datetime(2017, 3, 31, 12, tzinfo=tzoffset(None, 7200))
예제 #7
0
def test_transform_datetime() -> None:
    now = datetime(2020, 1, 2, 3, 4, 5)
    fmt = "2020-01-02T03:04:05+00:00"
    assert transform_datetime(now) == fmt
    assert transform_datetime(now.replace(tzinfo=tz.tzutc())) == fmt

    offset = timedelta(hours=8)
    assert (transform_datetime(
        now.replace(tzinfo=tz.tzoffset("PST", offset)) + offset) == fmt)
예제 #8
0
def test_retain_tz(tmpdir, create, default_database):
    create(
        'ar.ics',
        'SUMMARY:blah.ar\n'
        'DUE;VALUE=DATE-TIME;TZID=HST:20160102T000000\n'
    )
    create(
        'de.ics',
        'SUMMARY:blah.de\n'
        'DUE;VALUE=DATE-TIME;TZID=CET:20160102T000000\n'
    )

    db = Database([tmpdir.join('default')], tmpdir.join('cache.sqlite'))
    todos = list(db.todos())

    assert len(todos) == 2
    assert todos[0].due == datetime(
        2016, 1, 2, 0, 0, tzinfo=tzoffset(None, -36000)
    )
    assert todos[1].due == datetime(
        2016, 1, 2, 0, 0, tzinfo=tzoffset(None, 3600)
    )
예제 #9
0
    def _mkoffset(hmtuple, fmt):
        h, m = hmtuple
        m_td = (-1 if h < 0 else 1) * m

        tzo = tz.tzoffset(None, timedelta(hours=h, minutes=m_td))
        return tzo, fmt.format(h, m)
예제 #10
0
###
# Acceptance of bytes
@pytest.mark.parametrize('isostr,dt', [
    (b'2014', datetime(2014, 1, 1)),
    (b'20140204', datetime(2014, 2, 4)),
    (b'2014-02-04', datetime(2014, 2, 4)),
    (b'2014-02-04T12', datetime(2014, 2, 4, 12)),
    (b'2014-02-04T12:30', datetime(2014, 2, 4, 12, 30)),
    (b'2014-02-04T12:30:15', datetime(2014, 2, 4, 12, 30, 15)),
    (b'2014-02-04T12:30:15.224', datetime(2014, 2, 4, 12, 30, 15, 224000)),
    (b'20140204T123015.224', datetime(2014, 2, 4, 12, 30, 15, 224000)),
    (b'2014-02-04T12:30:15.224Z', datetime(2014, 2, 4, 12, 30, 15, 224000,
                                           tz.tzutc())),
    (b'2014-02-04T12:30:15.224+05:00',
        datetime(2014, 2, 4, 12, 30, 15, 224000,
                 tzinfo=tz.tzoffset(None, timedelta(hours=5))))])
def test_bytes(isostr, dt):
    assert isoparse(isostr) == dt


###
# Invalid ISO strings
@pytest.mark.parametrize('isostr,exception', [
    ('201', ValueError),                        # ISO string too short
    ('2012-0425', ValueError),                  # Inconsistent date separators
    ('201204-25', ValueError),                  # Inconsistent date separators
    ('20120425T0120:00', ValueError),           # Inconsistent time separators
    ('20120425T012500-334', ValueError),        # Wrong microsecond separator
    ('2001-1', ValueError),                     # YYYY-M not valid
    ('2012-04-9', ValueError),                  # YYYY-MM-D not valid
    ('201204', ValueError),                     # YYYYMM not valid
예제 #11
0
    def _mkoffset(hmtuple, fmt):
        h, m = hmtuple
        m_td = (-1 if h < 0 else 1) * m

        tzo = tz.tzoffset(None, timedelta(hours=h, minutes=m_td))
        return tzo, fmt.format(h, m)
예제 #12
0
###
# Acceptance of bytes
@pytest.mark.parametrize('isostr,dt', [
    (b'2014', datetime(2014, 1, 1)),
    (b'20140204', datetime(2014, 2, 4)),
    (b'2014-02-04', datetime(2014, 2, 4)),
    (b'2014-02-04T12', datetime(2014, 2, 4, 12)),
    (b'2014-02-04T12:30', datetime(2014, 2, 4, 12, 30)),
    (b'2014-02-04T12:30:15', datetime(2014, 2, 4, 12, 30, 15)),
    (b'2014-02-04T12:30:15.224', datetime(2014, 2, 4, 12, 30, 15, 224000)),
    (b'20140204T123015.224', datetime(2014, 2, 4, 12, 30, 15, 224000)),
    (b'2014-02-04T12:30:15.224Z', datetime(2014, 2, 4, 12, 30, 15, 224000,
                                           tz.tzutc())),
    (b'2014-02-04T12:30:15.224+05:00',
        datetime(2014, 2, 4, 12, 30, 15, 224000,
                 tzinfo=tz.tzoffset(None, timedelta(hours=5))))])
def test_bytes(isostr, dt):
    assert isoparse(isostr) == dt


###
# Invalid ISO strings
@pytest.mark.parametrize('isostr,exception', [
    ('201', ValueError),                        # ISO string too short
    ('2012-0425', ValueError),                  # Inconsistent date separators
    ('201204-25', ValueError),                  # Inconsistent date separators
    ('20120425T0120:00', ValueError),           # Inconsistent time separators
    ('20120425T012500-334', ValueError),        # Wrong microsecond separator
    ('2001-1', ValueError),                     # YYYY-M not valid
    ('2012-04-9', ValueError),                  # YYYY-MM-D not valid
    ('201204', ValueError),                     # YYYYMM not valid
from datetime import datetime, timedelta

import cabin.utils.time as time_utils
from dateutil import tz
from dateutil.tz.tz import tzoffset

NZDT = tzoffset("NZDT", timedelta(hours=13).seconds)


def test_timestamp_nzdt():
    dt = datetime(2009, 2, 14, 12, 31, 30, tzinfo=NZDT)
    assert time_utils.timestamp(dt) == 1234567890


def test_timestamp_utc():
    dt = datetime(2009, 2, 13, 23, 31, 31, 11000, tzinfo=tz.UTC)
    assert time_utils.timestamp(dt) == 1234567891


def test_start_of_day_nzdt():
    dt = datetime(2009, 2, 13, 1, 1, 1, 11000, tzinfo=NZDT)
    assert time_utils.start_of_day(dt) == datetime(2009, 2, 13, tzinfo=NZDT)


def test_start_of_day_no_tz():
    dt = datetime(2009, 2, 13, 1, 1, 31, 11000)
    assert time_utils.start_of_day(dt) == datetime(2009, 2, 13)


def test_to_utc_and_back():
    dt_local = datetime(2009, 2, 14, 12, 31, 30, tzinfo=NZDT)
예제 #14
0
 def test_parse(self):
     time_zone = pytz.utc
     now = datetime.datetime.now(time_zone)
     with freeze_time(now):
         self.assertEqual(now, dateparser.parse('now', time_zone))
         self.assertEqual(now, dateparser.parse('NOW', time_zone))
         self.assertEqual(now, dateparser.parse('Now', time_zone))
         self.assertEqual(now, dateparser.parse('today', time_zone))
         self.assertEqual(now, dateparser.parse('TODAY', time_zone))
         self.assertEqual(now, dateparser.parse('Today', time_zone))
         self.assertEqual(now - datetime.timedelta(1),
                          dateparser.parse('yesterday', time_zone))
         self.assertEqual(now - datetime.timedelta(1),
                          dateparser.parse('YESTERDAY', time_zone))
         self.assertEqual(now - datetime.timedelta(1),
                          dateparser.parse('Yesterday', time_zone))
         self.assertEqual(now - datetime.timedelta(seconds=1),
                          dateparser.parse('1 sec ago', time_zone))
         self.assertEqual(now - datetime.timedelta(seconds=1),
                          dateparser.parse('1 second ago', time_zone))
         self.assertEqual(now - datetime.timedelta(seconds=2),
                          dateparser.parse('2 seconds ago', time_zone))
         self.assertEqual(now - datetime.timedelta(minutes=1),
                          dateparser.parse('1 min ago', time_zone))
         self.assertEqual(now - datetime.timedelta(minutes=1),
                          dateparser.parse('1 minute ago', time_zone))
         self.assertEqual(now - datetime.timedelta(minutes=2),
                          dateparser.parse('2 minutes ago', time_zone))
         self.assertEqual(now - datetime.timedelta(hours=1),
                          dateparser.parse('1 hour ago', time_zone))
         self.assertEqual(now - datetime.timedelta(hours=2),
                          dateparser.parse('2 hours ago', time_zone))
         self.assertEqual(now - datetime.timedelta(days=1),
                          dateparser.parse('1 day ago', time_zone))
         self.assertEqual(now - datetime.timedelta(days=2),
                          dateparser.parse('2 days ago', time_zone))
         self.assertEqual(now - datetime.timedelta(weeks=1),
                          dateparser.parse('1 week ago', time_zone))
         self.assertEqual(now - datetime.timedelta(weeks=2),
                          dateparser.parse('2 weeks ago', time_zone))
         self.assertEqual(now - datetime.timedelta(weeks=3),
                          dateparser.parse('3 WEEKS AGO', time_zone))
         self.assertEqual(datetime.datetime(2017, 10, 5, tzinfo=time_zone),
                          dateparser.parse('2017-10-05', time_zone))
         self.assertEqual(
             datetime.datetime(2017, 10, 5, 16, 36, tzinfo=time_zone),
             dateparser.parse('2017-10-05 16:36', time_zone))
         self.assertEqual(
             datetime.datetime(2017, 10, 6, 16, 37, 59, tzinfo=tzlocal()),
             dateparser.parse('Fri Oct  6 16:37:59 CDT 2017', time_zone))
         self.assertEqual(
             datetime.datetime(2003,
                               9,
                               25,
                               10,
                               49,
                               41,
                               tzinfo=tz.tzoffset(
                                   None, datetime.timedelta(hours=-3))),
             dateparser.parse('Thu, 25 Sep 2003 10:49:41 -0300', time_zone))
         self.assertIsNone(
             dateparser.parse('1 day ago 1 hour ago', time_zone))
         self.assertIsNone(dateparser.parse('1 day', time_zone))
         self.assertIsNone(dateparser.parse('day ago', time_zone))
         self.assertIsNone(dateparser.parse('day', time_zone))
         self.assertIsNone(dateparser.parse('ago', time_zone))
         self.assertIsNone(dateparser.parse('foo', time_zone))
         self.assertIsNone(dateparser.parse('', time_zone))
예제 #15
0
    def test_strictdatetime(self):
        class MySchema(EmbeddedSchema):
            a = fields.StrictDateTimeField()
            b = fields.StrictDateTimeField(load_as_tz_aware=False)
            c = fields.StrictDateTimeField(load_as_tz_aware=True)

        # Test _deserialize
        s = MySchema(strict=True)

        for date in (
                dt.datetime(2016, 8, 6),
                dt.datetime(2016, 8, 6, tzinfo=tzutc()),
                "2016-08-06T00:00:00Z",
                "2016-08-06T00:00:00",
        ):
            data, _ = s.load({'a': date, 'b': date, 'c': date})
            assert data['a'] == dt.datetime(2016, 8, 6)
            assert data['b'] == dt.datetime(2016, 8, 6)
            assert data['c'] == dt.datetime(2016, 8, 6, tzinfo=tzutc())

        for date in (
                "2016-08-06T00:00:00+02:00",
                dt.datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200)),
        ):
            data, _ = s.load({'a': date, 'b': date, 'c': date})
            assert data['a'] == dt.datetime(2016, 8, 5, 22, 0)
            assert data['b'] == dt.datetime(2016, 8, 5, 22, 0)
            assert data['c'] == dt.datetime(2016,
                                            8,
                                            6,
                                            tzinfo=tzoffset(None, 7200))

        with pytest.raises(ValidationError):
            s.load({'a': "dummy"})

        # Test _deserialize_from_mongo
        MyDataProxy = data_proxy_factory('My', MySchema())
        d = MyDataProxy()

        for date in (
                dt.datetime(2016, 8, 6),
                dt.datetime(2016, 8, 6, tzinfo=tzutc()),
        ):
            d.from_mongo({'a': date, 'b': date, 'c': date})
            assert d.get('a') == dt.datetime(2016, 8, 6)
            assert d.get('b') == dt.datetime(2016, 8, 6)
            assert d.get('c') == dt.datetime(2016, 8, 6, tzinfo=tzutc())

        for date in (dt.datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200)), ):
            d.from_mongo({'a': date, 'b': date, 'c': date})
            assert d.get('a') == dt.datetime(2016, 8, 5, 22, 0)
            assert d.get('b') == dt.datetime(2016, 8, 5, 22, 0)
            assert d.get('c') == dt.datetime(2016,
                                             8,
                                             6,
                                             tzinfo=tzoffset(None, 7200))

        # Test StrictDateTimeField rounds to milliseconds
        s = MySchema()
        data, _ = s.load({'a': dt.datetime(2016, 8, 6, 12, 30, 30, 123456)})
        assert data['a'].microsecond == 123000
        data, _ = s.load({'a': dt.datetime(2016, 8, 6, 12, 59, 59, 999876)})
        assert data['a'].hour == 13
        assert data['a'].minute == 0
        assert data['a'].second == 0
        assert data['a'].microsecond == 0
예제 #16
0
    def test_strictdatetime(self):

        class MySchema(EmbeddedSchema):
            a = fields.StrictDateTimeField()
            b = fields.StrictDateTimeField(load_as_tz_aware=False)
            c = fields.StrictDateTimeField(load_as_tz_aware=True)

        # Test _deserialize
        s = MySchema(strict=True)

        for date in (
            dt.datetime(2016, 8, 6),
            dt.datetime(2016, 8, 6, tzinfo=tzutc()),
            "2016-08-06T00:00:00Z",
            "2016-08-06T00:00:00",
        ):
            data, _ = s.load({'a': date, 'b': date, 'c': date})
            assert data['a'] == dt.datetime(2016, 8, 6)
            assert data['b'] == dt.datetime(2016, 8, 6)
            assert data['c'] == dt.datetime(2016, 8, 6, tzinfo=tzutc())

        for date in (
            "2016-08-06T00:00:00+02:00",
            dt.datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200)),
        ):
            data, _ = s.load({'a': date, 'b': date, 'c': date})
            assert data['a'] == dt.datetime(2016, 8, 5, 22, 0)
            assert data['b'] == dt.datetime(2016, 8, 5, 22, 0)
            assert data['c'] == dt.datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200))

        with pytest.raises(ValidationError):
            s.load({'a': "dummy"})

        # Test _deserialize_from_mongo
        MyDataProxy = data_proxy_factory('My', MySchema())
        d = MyDataProxy()

        for date in (
            dt.datetime(2016, 8, 6),
            dt.datetime(2016, 8, 6, tzinfo=tzutc()),
        ):
            d.from_mongo({'a': date, 'b': date, 'c': date})
            assert d.get('a') == dt.datetime(2016, 8, 6)
            assert d.get('b') == dt.datetime(2016, 8, 6)
            assert d.get('c') == dt.datetime(2016, 8, 6, tzinfo=tzutc())

        for date in (
            dt.datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200)),
        ):
            d.from_mongo({'a': date, 'b': date, 'c': date})
            assert d.get('a') == dt.datetime(2016, 8, 5, 22, 0)
            assert d.get('b') == dt.datetime(2016, 8, 5, 22, 0)
            assert d.get('c') == dt.datetime(2016, 8, 6, tzinfo=tzoffset(None, 7200))

        # Test StrictDateTimeField rounds to milliseconds
        s = MySchema()
        data, _ = s.load({'a': dt.datetime(2016, 8, 6, 12, 30, 30, 123456)})
        assert data['a'].microsecond == 123000
        data, _ = s.load({'a': dt.datetime(2016, 8, 6, 12, 59, 59, 999876)})
        assert data['a'].hour == 13
        assert data['a'].minute == 0
        assert data['a'].second == 0
        assert data['a'].microsecond == 0