Esempio n. 1
0
def test_partial_intervals():
    assert parsers.interval('2005-03-20T05:15+03:00/23T17:00') == interval(repeats=0, start=datetime_(2005, 3, 20, 5, 15,
        tzinfo=timezone(hours=3, minutes=0)), end=datetime_(2005, 3, 23, 17, tzinfo=timezone(hours=3, minutes=0)))
    assert parsers.interval('2007-11-13/15') == interval(repeats=0, start=datetime_(2007, 11, 13, tzinfo=utc),
        end=datetime_(2007, 11, 16, tzinfo=utc))
    assert parsers.interval('2007-11-13T09:00/15T17:00') == interval(repeats=0, start=datetime_(2007, 11, 13, 9, tzinfo=utc),
        end=datetime_(2007, 11, 15, 17, tzinfo=utc))
Esempio n. 2
0
def test_datetime():
    assert parsers.datetime('2007-04-05T14:30') == datetime_(2007, 4, 5, 14, 30, tzinfo=utc)
    assert parsers.datetime('2007-08-09T12:30Z') == datetime_(2007, 8, 9, 12, 30, tzinfo=utc)
    assert parsers.datetime('2007-01-01T24:00:00') == datetime_(2007, 1, 2, 0, 0, 0, tzinfo=utc)
    assert parsers.datetime('2007-01-01T24:00:00') == parsers.datetime('2007-01-02T00:00:00')
    assert parsers.datetime('2007-08-09T12:30-02:00') == datetime_(2007, 8, 9, 12, 30,
        tzinfo=-timezone(hours=2, minutes=0))

    with pytest.raises(ValueError):
        parsers.datetime('invalid')
Esempio n. 3
0
        def _to_isoformat_range(component: DatetimeOrTimestamp):
            """Converts a single DatetimeOrTimestamp into one or two Datetimes.

            This is required to expand a single value like "2017" out to the whole year. This function returns two values.
            The first value is always a valid Datetime. The second value can be None or a Datetime. If it is None, this
            means that the first value was an exactly specified value (e.g. a `datetime.datetime`). If the second value is
            a Datetime, then it will be the end of the range at the resolution of the component, e.g. if the component
            were "2017" the second value would be the last second of the last day of 2017.
            """
            if component is None:
                return "..", None
            elif isinstance(component, str):
                if component == "..":
                    return component, None

                match = DATETIME_REGEX.match(component)
                if not match:
                    raise Exception(f"invalid datetime component: {component}")
                elif match.group("remainder"):
                    return component, None
                else:
                    year = int(match.group("year"))
                    optional_month = match.group("month")
                    optional_day = match.group("day")

                if optional_day is not None:
                    start = datetime_(year,
                                      int(optional_month),
                                      int(optional_day),
                                      0,
                                      0,
                                      0,
                                      tzinfo=tzutc())
                    end = start + relativedelta(days=1, seconds=-1)
                elif optional_month is not None:
                    start = datetime_(year,
                                      int(optional_month),
                                      1,
                                      0,
                                      0,
                                      0,
                                      tzinfo=tzutc())
                    end = start + relativedelta(months=1, seconds=-1)
                else:
                    start = datetime_(year, 1, 1, 0, 0, 0, tzinfo=tzutc())
                    end = start + relativedelta(years=1, seconds=-1)
                return _to_utc_isoformat(start), _to_utc_isoformat(end)
            else:
                return _to_utc_isoformat(component), None
Esempio n. 4
0
def test_interval():
    now = datetime_(2016, 1, 1)
    with pytest.raises(ValueError):
        parsers.interval('P6Yasdf')

    with pytest.raises(ValueError):
        parsers.interval('7432891')

    with pytest.raises(ValueError):
        parsers.interval('asdf')

    with pytest.raises(ValueError):
        parsers.interval('23P7DT5H')

    with pytest.raises(ValueError):
        parsers.interval('1999-12-31T16:00:00.000Z')

    with pytest.raises(ValueError):
        parsers.interval('1999-12-31T16:00:00.000+08:30')

    with pytest.raises(ValueError):
        parsers.interval('P6Yasdf/P8Y')

    with pytest.raises(ValueError):
        parsers.interval('P7Y/asdf')

    with pytest.raises(ValueError):
        parsers.interval('1999-12-01T00:00:0a/1999-12-31T16:00:00.000Z')

    with pytest.raises(ValueError):
        parsers.interval('A4/1999-12-01T00:00:00/1999-12-31T16:00:00.000Z')

    with pytest.raises(ValueError):
        parsers.interval('P6Y5M/P9D')

    with pytest.raises(ValueError):
        parsers.interval('7432891/1234')

    with pytest.raises(ValueError):
        parsers.interval('asdf/87rf')

    with pytest.raises(ValueError):
        parsers.interval('23P7DT5H/89R3')

    assert parsers.interval('P7Y', now=now) == interval(end=now, duration=duration(years=7))
    assert parsers.interval('P6W', now=now) == interval(end=now, duration=duration(weeks=6))
    assert parsers.interval('R1/P6Y5M', now=now) == interval(end=now, repeats=1, duration=duration(years=6, months=5))
    assert parsers.interval('R5/1999-12-31T16:00:00.000Z/P5DT7H') == interval(start=datetime_(year=1999, month=12, day=31,
        hour=16, tzinfo=utc), duration=duration(days=5, hours=7), repeats=5)
    assert parsers.interval('R7/2016-08-01T23:10:59.111Z/2016-08-08T00:13:23.001Z') == interval(start=datetime_(year=2016,
        month=8, day=1, hour=23, minute=10, second=59, microsecond=111000, tzinfo=utc), end=datetime_(year=2016, month=8,
        day=8, hour=0, minute=13, second=23, microsecond=1000, tzinfo=utc), repeats=7)
    assert parsers.interval('R2/P5DT7H/1999-12-31T16:00:00.000Z') == interval(end=datetime_(year=1999, month=12, day=31,
        hour=16, tzinfo=utc), duration=duration(days=5, hours=7), repeats=2)
    assert parsers.interval('R5/2002-08-15T16:20:05.100+08:10/P5DT7H') == interval(start=datetime_(year=2002, month=8,
        day=15, hour=16, minute=20, second=5, microsecond=100000, tzinfo=timezone(hours=8, minutes=10)),
        duration=duration(days=5, hours=7), repeats=5)
    assert parsers.interval('2002-08-15T16:20:05.100+08:10/2002-10-12T17:05:25.020-01:40') == interval(start=datetime_(year=2002, 
        month=8, day=15, hour=16, minute=20, second=5, microsecond=100000, tzinfo=timezone(hours=8, minutes=10)),
        end=datetime_(year=2002, month=10, day=12, hour=17, minute=5, second=25, microsecond=20000,
            tzinfo=-timezone(hours=1, minutes=40)))
    assert parsers.interval('R/P5DT7H/2002-08-15T16:20:05.100+08:10') == interval(end=datetime_(year=2002, month=8,
        day=15, hour=16, minute=20, second=5, microsecond=100000, tzinfo=timezone(hours=8, minutes=10)),
        duration=duration(days=5, hours=7), repeats=float('inf'))
def set_pk_for_weather_city(time_, city):
    return int(
            (time_.replace(tzinfo=None) - datetime_(2016, 1, 1).
             replace(tzinfo=None)).total_seconds() // 60 * 10 + city
    )