def test_invalid_isointerval_error(): with assert_raises(ValueError) as cm: types.iso8601interval('2013-01-01/blah') error = cm.exception assert_equal( error.message, "Invalid argument: 2013-01-01/blah. argument must be a valid ISO8601 " "date/time interval.", )
def test_isointerval(): intervals = [ ( # Full precision with explicit UTC. "2013-01-01T12:30:00Z/P1Y2M3DT4H5M6S", ( datetime(2013, 1, 1, 12, 30, 0, tzinfo=pytz.UTC), datetime(2014, 3, 5, 16, 35, 6, tzinfo=pytz.UTC), ), ), ( # Full precision with alternate UTC indication "2013-01-01T12:30+00:00/P2D", ( datetime(2013, 1, 1, 12, 30, 0, tzinfo=pytz.UTC), datetime(2013, 1, 3, 12, 30, 0, tzinfo=pytz.UTC), ), ), ( # Implicit UTC with time "2013-01-01T15:00/P1M", ( datetime(2013, 1, 1, 15, 0, 0, tzinfo=pytz.UTC), datetime(2013, 1, 31, 15, 0, 0, tzinfo=pytz.UTC), ), ), ( # TZ conversion "2013-01-01T17:00-05:00/P2W", ( datetime(2013, 1, 1, 22, 0, 0, tzinfo=pytz.UTC), datetime(2013, 1, 15, 22, 0, 0, tzinfo=pytz.UTC), ), ), ( # Date upgrade to midnight-midnight period "2013-01-01/P3D", ( datetime(2013, 1, 1, 0, 0, 0, tzinfo=pytz.UTC), datetime(2013, 1, 4, 0, 0, 0, 0, tzinfo=pytz.UTC), ), ), ( # Start/end with UTC "2013-01-01T12:00:00Z/2013-02-01T12:00:00Z", ( datetime(2013, 1, 1, 12, 0, 0, tzinfo=pytz.UTC), datetime(2013, 2, 1, 12, 0, 0, tzinfo=pytz.UTC), ), ), ( # Start/end with time upgrade "2013-01-01/2013-06-30", ( datetime(2013, 1, 1, tzinfo=pytz.UTC), datetime(2013, 6, 30, tzinfo=pytz.UTC), ), ), ( # Start/end with TZ conversion "2013-02-17T12:00:00-07:00/2013-02-28T15:00:00-07:00", ( datetime(2013, 2, 17, 19, 0, 0, tzinfo=pytz.UTC), datetime(2013, 2, 28, 22, 0, 0, tzinfo=pytz.UTC), ), ), # Resolution expansion for single date(time) ( # Second with UTC "2013-01-01T12:30:45Z", ( datetime(2013, 1, 1, 12, 30, 45, tzinfo=pytz.UTC), datetime(2013, 1, 1, 12, 30, 46, tzinfo=pytz.UTC), ), ), ( # Second with tz conversion "2013-01-01T12:30:45+02:00", ( datetime(2013, 1, 1, 10, 30, 45, tzinfo=pytz.UTC), datetime(2013, 1, 1, 10, 30, 46, tzinfo=pytz.UTC), ), ), ( # Second with implicit UTC "2013-01-01T12:30:45", ( datetime(2013, 1, 1, 12, 30, 45, tzinfo=pytz.UTC), datetime(2013, 1, 1, 12, 30, 46, tzinfo=pytz.UTC), ), ), ( # Minute with UTC "2013-01-01T12:30+00:00", ( datetime(2013, 1, 1, 12, 30, tzinfo=pytz.UTC), datetime(2013, 1, 1, 12, 31, tzinfo=pytz.UTC), ), ), ( # Minute with conversion "2013-01-01T12:30+04:00", ( datetime(2013, 1, 1, 8, 30, tzinfo=pytz.UTC), datetime(2013, 1, 1, 8, 31, tzinfo=pytz.UTC), ), ), ( # Minute with implicit UTC "2013-01-01T12:30", ( datetime(2013, 1, 1, 12, 30, tzinfo=pytz.UTC), datetime(2013, 1, 1, 12, 31, tzinfo=pytz.UTC), ), ), ( # Hour, explicit UTC "2013-01-01T12Z", ( datetime(2013, 1, 1, 12, tzinfo=pytz.UTC), datetime(2013, 1, 1, 13, tzinfo=pytz.UTC), ), ), ( # Hour with offset "2013-01-01T12-07:00", ( datetime(2013, 1, 1, 19, tzinfo=pytz.UTC), datetime(2013, 1, 1, 20, tzinfo=pytz.UTC), ), ), ( # Hour with implicit UTC "2013-01-01T12", ( datetime(2013, 1, 1, 12, tzinfo=pytz.UTC), datetime(2013, 1, 1, 13, tzinfo=pytz.UTC), ), ), ( # Interval with trailing zero fractional seconds should # be accepted. "2013-01-01T12:00:00.0/2013-01-01T12:30:00.000000", ( datetime(2013, 1, 1, 12, tzinfo=pytz.UTC), datetime(2013, 1, 1, 12, 30, tzinfo=pytz.UTC), ), ), ] for value, expected in intervals: yield assert_equal, types.iso8601interval(value), expected