]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-89157: Make C and Python implementation of `datetime.date.fromisoformat` consisten...
authorStan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Thu, 24 Apr 2025 14:16:07 +0000 (15:16 +0100)
committerGitHub <noreply@github.com>
Thu, 24 Apr 2025 14:16:07 +0000 (17:16 +0300)
Lib/_pydatetime.py
Lib/test/datetimetester.py
Misc/NEWS.d/next/Library/2025-03-09-10-37-00.gh-issue-89157.qg3r138.rst [new file with mode: 0644]

index 50e21a123356117a2c23f49d17d0314b4ef0e91b..e3db1b52b1159bf1917de59d4aefb42425d8add7 100644 (file)
@@ -1050,8 +1050,12 @@ class date:
     @classmethod
     def fromisoformat(cls, date_string):
         """Construct a date from a string in ISO 8601 format."""
+
         if not isinstance(date_string, str):
-            raise TypeError('fromisoformat: argument must be str')
+            raise TypeError('Argument must be a str')
+
+        if not date_string.isascii():
+            raise ValueError('Argument must be an ASCII str')
 
         if len(date_string) not in (7, 8, 10):
             raise ValueError(f'Invalid isoformat string: {date_string!r}')
index ecb37250ceb6c48c15c65026d4d753daa4e54aae..55844ec35a90c94ed4820677dc79555e17dff1e8 100644 (file)
@@ -2087,6 +2087,7 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase):
             '10000-W25-1',      # Invalid year
             '2020-W25-0',       # Invalid day-of-week
             '2020-W25-8',       # Invalid day-of-week
+            '٢025-03-09'        # Unicode characters
             '2009\ud80002\ud80028',     # Separators are surrogate codepoints
         ]
 
@@ -3542,7 +3543,7 @@ class TestDateTime(TestDate):
             '2009-04-19T03:15:4500:00',     # Bad time zone separator
             '2009-04-19T03:15:45.123456+24:30',    # Invalid time zone offset
             '2009-04-19T03:15:45.123456-24:30',    # Invalid negative offset
-            '2009-04-10ᛇᛇᛇᛇᛇ12:15',         # Too many unicode separators
+            '2009-04-10ᛇᛇᛇᛇᛇ12:15',         # Unicode chars
             '2009-04\ud80010T12:15',        # Surrogate char in date
             '2009-04-10T12\ud80015',        # Surrogate char in time
             '2009-04-19T1',                 # Incomplete hours
diff --git a/Misc/NEWS.d/next/Library/2025-03-09-10-37-00.gh-issue-89157.qg3r138.rst b/Misc/NEWS.d/next/Library/2025-03-09-10-37-00.gh-issue-89157.qg3r138.rst
new file mode 100644 (file)
index 0000000..0031721
--- /dev/null
@@ -0,0 +1,2 @@
+Make the pure Python implementation of :func:`datetime.date.fromisoformat`,
+only accept ASCII strings for consistency with the C implementation.