{{{
In [4]: timedelta(days=-1)
Out[4]: datetime.timedelta(days=-1)
In [5]: td = timedelta(days=-1)
In [6]: duration_iso_string(td)
Out[6]: '-P1DT00H00M00S'
In [7]: parse_duration(duration_iso_string(td))
Out[7]: datetime.timedelta(days=1) # <-- Why is this 1 and not -1?
In [8]: td = timedelta(days=-1, microseconds=1)
In [9]: duration_iso_string(td)
Out[9]: '-P0DT23H59M59.999999S'
In [10]: parse_duration(duration_iso_string(td))
Out[10]: datetime.timedelta(days=-1, microseconds=1)
}}}
I guess the problem is in django/utils/dateparse.py line 147 that reads
`return days + sign * datetime.timedelta(**kw)`.
However, if `datetime.timedelta(**kw)` ends up being zero (`timedelta(0)`)
then the sign multiplication ends up in zero, not `-0`. This is just a
preliminary quick look though and maybe the problem is something else.
--
Ticket URL: <https://code.djangoproject.com/ticket/32269>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* stage: Unreviewed => Accepted
Comment:
Great catch. Would you like to prepare a patch?
--
Ticket URL: <https://code.djangoproject.com/ticket/32269#comment:1>
Comment (by Hanno):
I can try! Hopefully I can find the time.
--
Ticket URL: <https://code.djangoproject.com/ticket/32269#comment:2>
* owner: nobody => Hanno
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/32269#comment:3>
* owner: Hanno => starryrbs
* has_patch: 0 => 1
* stage: Accepted => Ready for checkin
Comment:
[https://github.com/django/django/pull/13791 PR]
--
Ticket URL: <https://code.djangoproject.com/ticket/32269#comment:4>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"2a76f4313423a3b91caade4fce71790630ef9152" 2a76f43]:
{{{
#!CommitTicketReference repository=""
revision="2a76f4313423a3b91caade4fce71790630ef9152"
Fixed #32269 -- Fixed parse_duration() for negative days in ISO 8601
format.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32269#comment:5>