#32269: parse_duration() ISO string sign is ignored when the timedelta only has
days
--------------------------------------+------------------------
               Reporter:  wanaryytel  |          Owner:  nobody
                   Type:  Bug         |         Status:  new
              Component:  Utilities   |        Version:  3.1
               Severity:  Normal      |       Keywords:
           Triage Stage:  Unreviewed  |      Has patch:  0
    Needs documentation:  0           |    Needs tests:  0
Patch needs improvement:  0           |  Easy pickings:  0
                  UI/UX:  0           |
--------------------------------------+------------------------
 I'm pretty sure that this is a bug even though I'm not an expert on the
 ISO 8601 standard. The sign of a timedelta string will be ignored by
 `django.utils.dateparse.parse_duration` if the input string only contains
 days. Compare the following (notice the minus signs):



 {{{
 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.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/053.9034ac730ad46cf96bad17e4357e1545%40djangoproject.com.

Reply via email to