From ddda49c6ffa1396962e8e80260181346c20ebbba Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Thu, 17 Aug 2023 08:40:49 +0200 Subject: [PATCH] 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. --- picard/util/__init__.py | 15 ++++++++++----- test/test_utils.py | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/picard/util/__init__.py b/picard/util/__init__.py index 21d11f77c..b5a6290e7 100644 --- a/picard/util/__init__.py +++ b/picard/util/__init__.py @@ -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) diff --git a/test/test_utils.py b/test/test_utils.py index 0077e878a..95c31ec40 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -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")