diff options
author | Julian Berman <Julian@GrayVines.com> | 2023-03-28 15:48:05 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-28 15:48:05 -0400 |
commit | 8b8f3551adf6e0290e58e644e799f956f4df41a8 (patch) | |
tree | 86f44904f532107cff8961385cf226206186b266 | |
parent | d09feb650ba8d8af88b4f4e193b50e959bcb4a96 (diff) | |
parent | 781f8cdf9c6318e511a9459ac0a923502b455102 (diff) | |
download | jsonschema-8b8f3551adf6e0290e58e644e799f956f4df41a8.tar.gz |
Merge pull request #1076 from jvtm/python311-date-fromisoformat-allows-extra-formats
fix: Python 3.11 date.fromisoformat() allows extra formats
-rw-r--r-- | jsonschema/_format.py | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/jsonschema/_format.py b/jsonschema/_format.py index d274c5f..2231f5e 100644 --- a/jsonschema/_format.py +++ b/jsonschema/_format.py @@ -17,6 +17,8 @@ _RaisesType = typing.Union[ typing.Type[Exception], typing.Tuple[typing.Type[Exception], ...], ] +_RE_DATE = re.compile(r"^\d{4}-\d{2}-\d{2}$", re.ASCII) + class FormatChecker: """ @@ -396,7 +398,10 @@ def is_regex(instance: object) -> bool: def is_date(instance: object) -> bool: if not isinstance(instance, str): return True - return bool(instance.isascii() and datetime.date.fromisoformat(instance)) + return bool( + _RE_DATE.fullmatch(instance) + and datetime.date.fromisoformat(instance) + ) @_checks_drafts(draft3="time", raises=ValueError) |