[3.13] gh-85702: Catch IsADirectoryError in zoneinfo (GH-131333) (#136130)

gh-85702: Catch IsADirectoryError in zoneinfo (GH-131333)
(cherry picked from commit d22604a6d1)

Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
Miss Islington (bot) 2025-06-30 17:00:56 +02:00 committed by GitHub
parent 38c7b0efb8
commit 4f4fa72695
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 5 additions and 1 deletions

View file

@ -222,6 +222,7 @@ def test_bad_keys(self):
"America.Los_Angeles",
"🇨🇦", # Non-ascii
"America/New\ud800York", # Contains surrogate character
"Europe", # Is a directory, see issue gh-85702
]
for bad_key in bad_keys:

View file

@ -10,7 +10,7 @@ def load_tzdata(key):
try:
return resources.files(package_name).joinpath(resource_name).open("rb")
except (ImportError, FileNotFoundError, UnicodeEncodeError):
except (ImportError, FileNotFoundError, UnicodeEncodeError, IsADirectoryError):
# There are three types of exception that can be raised that all amount
# to "we cannot find this key":
#
@ -21,6 +21,7 @@ def load_tzdata(key):
# (e.g. Europe/Krasnoy)
# UnicodeEncodeError: If package_name or resource_name are not UTF-8,
# such as keys containing a surrogate character.
# IsADirectoryError: If package_name without a resource_name specified.
raise ZoneInfoNotFoundError(f"No time zone found with key {key}")

View file

@ -0,0 +1,2 @@
If ``zoneinfo._common.load_tzdata`` is given a package without a resource a
``ZoneInfoNotFoundError`` is raised rather than a :exc:`IsADirectoryError`.