Durations with time components before T are parsed successfully

Issue #7 resolved
Matti Niemenmaa created an issue

If you forget to put a T before time components in a duration, they are parsed successfully but the time components are ignored:

>>> aniso8601.parse_duration('P1S')
datetime.timedelta(0)

>>> aniso8601.parse_duration('P1D1S')
datetime.timedelta(1)

>>> aniso8601.parse_duration('P1H1M')
datetime.timedelta(30)

I would expect exceptions to be raised instead.

This is with aniso8601 1.1.0.

Comments (1)

  1. Brandon Nielsen repo owner

    Fixed in 1.2.0.

    >>> aniso8601.parse_duration('P1S')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/nielsenb/Jetfuse/aniso8601_test/lib/python2.7/site-packages/aniso8601/duration.py", line 29, in parse_duration
        return _parse_duration_prescribed(isodurationstr, relative)
      File "/home/nielsenb/Jetfuse/aniso8601_test/lib/python2.7/site-packages/aniso8601/duration.py", line 66, in _parse_duration_prescribed
        raise ValueError('ISO 8601 time components not allowed in duration without prescribed time.')
    ValueError: ISO 8601 time components not allowed in duration without prescribed time.
    
    >>> aniso8601.parse_duration('P1D1S')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/nielsenb/Jetfuse/aniso8601_test/lib/python2.7/site-packages/aniso8601/duration.py", line 29, in parse_duration
        return _parse_duration_prescribed(isodurationstr, relative)
      File "/home/nielsenb/Jetfuse/aniso8601_test/lib/python2.7/site-packages/aniso8601/duration.py", line 66, in _parse_duration_prescribed
        raise ValueError('ISO 8601 time components not allowed in duration without prescribed time.')
    ValueError: ISO 8601 time components not allowed in duration without prescribed time.
    
    >>> aniso8601.parse_duration('P1H1M')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/nielsenb/Jetfuse/aniso8601_test/lib/python2.7/site-packages/aniso8601/duration.py", line 29, in parse_duration
        return _parse_duration_prescribed(isodurationstr, relative)
      File "/home/nielsenb/Jetfuse/aniso8601_test/lib/python2.7/site-packages/aniso8601/duration.py", line 66, in _parse_duration_prescribed
        raise ValueError('ISO 8601 time components not allowed in duration without prescribed time.')
    ValueError: ISO 8601 time components not allowed in duration without prescribed time.
    
  2. Log in to comment