Path: blob/master/ invest-robot-contest_TinkoffBotTwitch-main/venv/lib/python3.8/site-packages/iso8601/test_iso8601.py
7813 views
# coding=UTF-81from __future__ import absolute_import23import copy4import datetime5import pickle67import hypothesis8import hypothesis.extra.pytz9import hypothesis.strategies10import pytest1112from . import iso8601131415def test_iso8601_regex() -> None:16assert iso8601.ISO8601_REGEX.match("2006-10-11T00:14:33Z")171819def test_fixedoffset_eq() -> None:20# See https://bitbucket.org/micktwomey/pyiso8601/issues/1921datetime.tzinfo() == iso8601.FixedOffset(2, 0, "+2:00")222324def test_parse_no_timezone_different_default() -> None:25tz = iso8601.FixedOffset(2, 0, "test offset")26d = iso8601.parse_date("2007-01-01T08:00:00", default_timezone=tz)27assert d == datetime.datetime(2007, 1, 1, 8, 0, 0, 0, tz)28assert d.tzinfo == tz293031def test_parse_utc_different_default() -> None:32"""Z should mean 'UTC', not 'default'."""33tz = iso8601.FixedOffset(2, 0, "test offset")34d = iso8601.parse_date("2007-01-01T08:00:00Z", default_timezone=tz)35assert d == datetime.datetime(2007, 1, 1, 8, 0, 0, 0, iso8601.UTC)363738@pytest.mark.parametrize(39"invalid_date, error_string",40[41("2013-10-", "Unable to parse date string"),42("2013-", "Unable to parse date string"),43("", "Unable to parse date string"),44("wibble", "Unable to parse date string"),45("23", "Unable to parse date string"),46("131015T142533Z", "Unable to parse date string"),47("131015", "Unable to parse date string"),48("20141", "Unable to parse date string"),49("201402", "Unable to parse date string"),50(51"2007-06-23X06:40:34.00Z",52"Unable to parse date string",53), # https://code.google.com/p/pyiso8601/issues/detail?id=1454(55"2007-06-23 06:40:34.00Zrubbish",56"Unable to parse date string",57), # https://code.google.com/p/pyiso8601/issues/detail?id=1458("20114-01-03T01:45:49", "Unable to parse date string"),59],60)61def test_parse_invalid_date(invalid_date: str, error_string: str) -> None:62with pytest.raises(iso8601.ParseError) as exc:63iso8601.parse_date(invalid_date)64assert exc.errisinstance(iso8601.ParseError)65assert str(exc.value).startswith(error_string)666768@pytest.mark.parametrize(69"valid_date,expected_datetime,isoformat",70[71(72"2007-06-23 06:40:34.00Z",73datetime.datetime(2007, 6, 23, 6, 40, 34, 0, iso8601.UTC),74"2007-06-23T06:40:34+00:00",75), # Handle a separator other than T76(77"1997-07-16T19:20+01:00",78datetime.datetime(791997, 7, 16, 19, 20, 0, 0, iso8601.FixedOffset(1, 0, "+01:00")80),81"1997-07-16T19:20:00+01:00",82), # Parse with no seconds83(84"2007-01-01T08:00:00",85datetime.datetime(2007, 1, 1, 8, 0, 0, 0, iso8601.UTC),86"2007-01-01T08:00:00+00:00",87), # Handle timezone-less dates. Assumes UTC. http://code.google.com/p/pyiso8601/issues/detail?id=488(89"2006-10-20T15:34:56.123+02:30",90datetime.datetime(912006, 10, 20, 15, 34, 56, 123000, iso8601.FixedOffset(2, 30, "+02:30")92),93None,94),95(96"2006-10-20T15:34:56Z",97datetime.datetime(2006, 10, 20, 15, 34, 56, 0, iso8601.UTC),98"2006-10-20T15:34:56+00:00",99),100(101"2007-5-7T11:43:55.328Z",102datetime.datetime(2007, 5, 7, 11, 43, 55, 328000, iso8601.UTC),103"2007-05-07T11:43:55.328000+00:00",104), # http://code.google.com/p/pyiso8601/issues/detail?id=6105(106"2006-10-20T15:34:56.123Z",107datetime.datetime(2006, 10, 20, 15, 34, 56, 123000, iso8601.UTC),108"2006-10-20T15:34:56.123000+00:00",109),110(111"2013-10-15T18:30Z",112datetime.datetime(2013, 10, 15, 18, 30, 0, 0, iso8601.UTC),113"2013-10-15T18:30:00+00:00",114),115(116"2013-10-15T22:30+04",117datetime.datetime(1182013, 10, 15, 22, 30, 0, 0, iso8601.FixedOffset(4, 0, "+04:00")119),120"2013-10-15T22:30:00+04:00",121), # <time>±hh:mm122(123"2013-10-15T1130-0700",124datetime.datetime(1252013, 10, 15, 11, 30, 0, 0, iso8601.FixedOffset(-7, 0, "-07:00")126),127"2013-10-15T11:30:00-07:00",128), # <time>±hhmm129(130"2013-10-15T1130+0700",131datetime.datetime(1322013, 10, 15, 11, 30, 0, 0, iso8601.FixedOffset(+7, 0, "+07:00")133),134"2013-10-15T11:30:00+07:00",135), # <time>±hhmm136(137"2013-10-15T1130+07",138datetime.datetime(1392013, 10, 15, 11, 30, 0, 0, iso8601.FixedOffset(+7, 0, "+07:00")140),141"2013-10-15T11:30:00+07:00",142), # <time>±hh143(144"2013-10-15T1130-07",145datetime.datetime(1462013, 10, 15, 11, 30, 0, 0, iso8601.FixedOffset(-7, 0, "-07:00")147),148"2013-10-15T11:30:00-07:00",149), # <time>±hh150(151"2013-10-15T15:00-03:30",152datetime.datetime(1532013, 10, 15, 15, 0, 0, 0, iso8601.FixedOffset(-3, -30, "-03:30")154),155"2013-10-15T15:00:00-03:30",156),157(158"2013-10-15T183123Z",159datetime.datetime(2013, 10, 15, 18, 31, 23, 0, iso8601.UTC),160"2013-10-15T18:31:23+00:00",161), # hhmmss162(163"2013-10-15T1831Z",164datetime.datetime(2013, 10, 15, 18, 31, 0, 0, iso8601.UTC),165"2013-10-15T18:31:00+00:00",166), # hhmm167(168"2013-10-15T18Z",169datetime.datetime(2013, 10, 15, 18, 0, 0, 0, iso8601.UTC),170"2013-10-15T18:00:00+00:00",171), # hh172(173"2013-10-15",174datetime.datetime(2013, 10, 15, 0, 0, 0, 0, iso8601.UTC),175"2013-10-15T00:00:00+00:00",176), # YYYY-MM-DD177(178"20131015T18:30Z",179datetime.datetime(2013, 10, 15, 18, 30, 0, 0, iso8601.UTC),180"2013-10-15T18:30:00+00:00",181), # YYYYMMDD182(183"2012-12-19T23:21:28.512400+00:00",184datetime.datetime(1852012, 12, 19, 23, 21, 28, 512400, iso8601.FixedOffset(0, 0, "+00:00")186),187"2012-12-19T23:21:28.512400+00:00",188), # https://code.google.com/p/pyiso8601/issues/detail?id=21189(190"2006-10-20T15:34:56.123+0230",191datetime.datetime(1922006, 10, 20, 15, 34, 56, 123000, iso8601.FixedOffset(2, 30, "+02:30")193),194"2006-10-20T15:34:56.123000+02:30",195), # https://code.google.com/p/pyiso8601/issues/detail?id=18196(197"19950204",198datetime.datetime(1995, 2, 4, tzinfo=iso8601.UTC),199"1995-02-04T00:00:00+00:00",200), # https://code.google.com/p/pyiso8601/issues/detail?id=1201(202"2010-07-20 15:25:52.520701+00:00",203datetime.datetime(2042010, 7, 20, 15, 25, 52, 520701, iso8601.FixedOffset(0, 0, "+00:00")205),206"2010-07-20T15:25:52.520701+00:00",207), # https://code.google.com/p/pyiso8601/issues/detail?id=17208(209"2010-06-12",210datetime.datetime(2010, 6, 12, tzinfo=iso8601.UTC),211"2010-06-12T00:00:00+00:00",212), # https://code.google.com/p/pyiso8601/issues/detail?id=16213(214"1985-04-12T23:20:50.52-05:30",215datetime.datetime(2161985, 4, 12, 23, 20, 50, 520000, iso8601.FixedOffset(-5, -30, "-05:30")217),218"1985-04-12T23:20:50.520000-05:30",219), # https://bitbucket.org/micktwomey/pyiso8601/issue/8/015-parses-negative-timezones-incorrectly220(221"1997-08-29T06:14:00.000123Z",222datetime.datetime(1997, 8, 29, 6, 14, 0, 123, iso8601.UTC),223"1997-08-29T06:14:00.000123+00:00",224), # https://bitbucket.org/micktwomey/pyiso8601/issue/9/regression-parsing-microseconds225(226"2014-02",227datetime.datetime(2014, 2, 1, 0, 0, 0, 0, iso8601.UTC),228"2014-02-01T00:00:00+00:00",229), # https://bitbucket.org/micktwomey/pyiso8601/issue/14/regression-yyyy-mm-no-longer-parses230(231"2014",232datetime.datetime(2014, 1, 1, 0, 0, 0, 0, iso8601.UTC),233"2014-01-01T00:00:00+00:00",234), # YYYY235(236"1997-08-29T06:14:00,000123Z",237datetime.datetime(1997, 8, 29, 6, 14, 0, 123, iso8601.UTC),238"1997-08-29T06:14:00.000123+00:00",239), # Use , as decimal separator240],241)242def test_parse_valid_date(243valid_date: str, expected_datetime: datetime.datetime, isoformat: str244) -> None:245parsed = iso8601.parse_date(valid_date)246assert parsed.year == expected_datetime.year247assert parsed.month == expected_datetime.month248assert parsed.day == expected_datetime.day249assert parsed.hour == expected_datetime.hour250assert parsed.minute == expected_datetime.minute251assert parsed.second == expected_datetime.second252assert parsed.microsecond == expected_datetime.microsecond253assert parsed.tzinfo == expected_datetime.tzinfo254assert parsed == expected_datetime255assert parsed.isoformat() == expected_datetime.isoformat()256copy.deepcopy(parsed) # ensure it's deep copy-able257pickle.dumps(parsed) # ensure it pickles258if isoformat:259assert parsed.isoformat() == isoformat260assert iso8601.parse_date(parsed.isoformat()) == parsed # Test round trip261262263@hypothesis.given(s=hypothesis.strategies.datetimes())264def test_hypothesis_valid_naive_datetimes(s: datetime.datetime) -> None:265as_string = s.isoformat()266parsed = iso8601.parse_date(as_string, default_timezone=None)267print(f"{s!r} {as_string!r} {parsed!r}")268assert s == parsed269270271@hypothesis.given(272s=hypothesis.strategies.datetimes(timezones=hypothesis.extra.pytz.timezones())273)274def test_hypothesis_valid_datetimes_with_timezone(s: datetime.datetime) -> None:275as_string = s.isoformat()276parsed = iso8601.parse_date(as_string)277print(f"{s!r} {as_string!r} {parsed!r}")278assert s == parsed279280281