diff options
| author | Seunghun Lee <waydi1@gmail.com> | 2019-02-16 16:43:42 +0900 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2019-02-23 18:54:09 -0500 |
| commit | 99fc5dc13c12d874ffc1c8f47a6421494e720b31 (patch) | |
| tree | 0a1f65ab7898c199ad60a814613579ecf04899a3 | |
| parent | 36300ef336e3f130a0dadc1143163ff3d23dc843 (diff) | |
Fixed #30141 -- Fixed parse_duration() for some negative durations.
| -rw-r--r-- | django/utils/dateparse.py | 7 | ||||
| -rw-r--r-- | tests/utils_tests/test_dateparse.py | 7 |
2 files changed, 9 insertions, 5 deletions
diff --git a/django/utils/dateparse.py b/django/utils/dateparse.py index 8d08b7d1d3..f90d952581 100644 --- a/django/utils/dateparse.py +++ b/django/utils/dateparse.py @@ -29,9 +29,10 @@ datetime_re = re.compile( standard_duration_re = re.compile( r'^' r'(?:(?P<days>-?\d+) (days?, )?)?' - r'((?:(?P<hours>-?\d+):)(?=\d+:\d+))?' - r'(?:(?P<minutes>-?\d+):)?' - r'(?P<seconds>-?\d+)' + r'(?P<sign>-?)' + r'((?:(?P<hours>\d+):)(?=\d+:\d+))?' + r'(?:(?P<minutes>\d+):)?' + r'(?P<seconds>\d+)' r'(?:\.(?P<microseconds>\d{1,6})\d{0,6})?' r'$' ) diff --git a/tests/utils_tests/test_dateparse.py b/tests/utils_tests/test_dateparse.py index 8d464278ce..535815c7e2 100644 --- a/tests/utils_tests/test_dateparse.py +++ b/tests/utils_tests/test_dateparse.py @@ -113,9 +113,12 @@ class DurationParseTests(unittest.TestCase): test_values = ( ('-4 15:30', timedelta(days=-4, minutes=15, seconds=30)), ('-172800', timedelta(days=-2)), - ('-15:30', timedelta(minutes=-15, seconds=30)), - ('-1:15:30', timedelta(hours=-1, minutes=15, seconds=30)), + ('-15:30', timedelta(minutes=-15, seconds=-30)), + ('-1:15:30', timedelta(hours=-1, minutes=-15, seconds=-30)), ('-30.1', timedelta(seconds=-30, milliseconds=-100)), + ('-00:01:01', timedelta(minutes=-1, seconds=-1)), + ('-01:01', timedelta(seconds=-61)), + ('-01:-01', None), ) for source, expected in test_values: with self.subTest(source=source): |
