mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
gh-89157: Make C and Python implementation of datetime.date.fromisoformat
consistent (#131007)
This commit is contained in:
parent
92985e321a
commit
4924bcf0e4
3 changed files with 9 additions and 2 deletions
|
@ -1050,8 +1050,12 @@ class date:
|
||||||
@classmethod
|
@classmethod
|
||||||
def fromisoformat(cls, date_string):
|
def fromisoformat(cls, date_string):
|
||||||
"""Construct a date from a string in ISO 8601 format."""
|
"""Construct a date from a string in ISO 8601 format."""
|
||||||
|
|
||||||
if not isinstance(date_string, str):
|
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):
|
if len(date_string) not in (7, 8, 10):
|
||||||
raise ValueError(f'Invalid isoformat string: {date_string!r}')
|
raise ValueError(f'Invalid isoformat string: {date_string!r}')
|
||||||
|
|
|
@ -2087,6 +2087,7 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase):
|
||||||
'10000-W25-1', # Invalid year
|
'10000-W25-1', # Invalid year
|
||||||
'2020-W25-0', # Invalid day-of-week
|
'2020-W25-0', # Invalid day-of-week
|
||||||
'2020-W25-8', # Invalid day-of-week
|
'2020-W25-8', # Invalid day-of-week
|
||||||
|
'٢025-03-09' # Unicode characters
|
||||||
'2009\ud80002\ud80028', # Separators are surrogate codepoints
|
'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: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 time zone offset
|
||||||
'2009-04-19T03:15:45.123456-24:30', # Invalid negative 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\ud80010T12:15', # Surrogate char in date
|
||||||
'2009-04-10T12\ud80015', # Surrogate char in time
|
'2009-04-10T12\ud80015', # Surrogate char in time
|
||||||
'2009-04-19T1', # Incomplete hours
|
'2009-04-19T1', # Incomplete hours
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Make the pure Python implementation of :func:`datetime.date.fromisoformat`,
|
||||||
|
only accept ASCII strings for consistency with the C implementation.
|
Loading…
Add table
Add a link
Reference in a new issue