mirror of
https://github.com/fergalmoran/picard.git
synced 2025-12-25 10:48:18 +00:00
PICARD-2712: Fix sanitize date removing 0 values
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.
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -188,15 +188,26 @@ class ExtractYearTest(PicardTestCase):
|
||||
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")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user