Skip to content

Commit

Permalink
PICARD-2712: Fix sanitize date removing 0 values
Browse files Browse the repository at this point in the history
Sanitize date cleared zero values in between, such turning "YYYY-00-DD"
into "YYYY-DD", which would be a completely different date.

Fix this by keeping empty values if they are not the last element.
  • Loading branch information
phw committed Aug 17, 2023
1 parent 21482a4 commit ddda49c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 7 deletions.
15 changes: 10 additions & 5 deletions picard/util/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,18 +312,23 @@ def format_time(ms, display_zero=False):
def sanitize_date(datestr):
"""Sanitize date format.
e.g.: "YYYY-00-00" -> "YYYY"
"YYYY- - " -> "YYYY"
e.g.: "1980-00-00" -> "1980"
"1980- - " -> "1980"
"1980-00-23" -> "1980-00-23"
...
"""
date = []
for num in datestr.split("-"):
for num in reversed(datestr.split("-")):
try:
num = int(num.strip())
except ValueError:
break
if num:
if num == '':
num = 0
else:
break
if num or (num == 0 and date):
date.append(num)
date.reverse()
return ("", "%04d", "%04d-%02d", "%04d-%02d-%02d")[len(date)] % tuple(date)


Expand Down
15 changes: 13 additions & 2 deletions test/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,15 +188,26 @@ def test_mapping(self):
class SanitizeDateTest(PicardTestCase):

def test_correct(self):
self.assertEqual(util.sanitize_date(""), "")
self.assertEqual(util.sanitize_date("0"), "")
self.assertEqual(util.sanitize_date("0000"), "")
self.assertEqual(util.sanitize_date("2006"), "2006")
self.assertEqual(util.sanitize_date("2006--"), "2006")
self.assertEqual(util.sanitize_date("2006--02"), "2006")
self.assertEqual(util.sanitize_date("2006-00-02"), "2006-00-02")
self.assertEqual(util.sanitize_date("2006 "), "2006")
self.assertEqual(util.sanitize_date("2006 02"), "")
self.assertEqual(util.sanitize_date("2006.02"), "")
self.assertEqual(util.sanitize_date("2006-02"), "2006-02")
self.assertEqual(util.sanitize_date("2006-02-00"), "2006-02")
self.assertEqual(util.sanitize_date("2006-00-00"), "2006")
self.assertEqual(util.sanitize_date("2006-02-23"), "2006-02-23")
self.assertEqual(util.sanitize_date("2006-00-23"), "2006-00-23")
self.assertEqual(util.sanitize_date("0000-00-23"), "0000-00-23")
self.assertEqual(util.sanitize_date("0000-02"), "0000-02")
self.assertEqual(util.sanitize_date("--23"), "0000-00-23")

def test_incorrect(self):
self.assertNotEqual(util.sanitize_date("2006--02"), "2006-02")
self.assertNotEqual(util.sanitize_date("2006--02"), "2006")
self.assertNotEqual(util.sanitize_date("2006.03.02"), "2006-03-02")


Expand Down

0 comments on commit ddda49c

Please sign in to comment.