Browse Source

Issue #14581: Windows users are allowed to import modules w/o taking

the file suffix's case into account, even when doing a case-sensitive
import.
pull/2332/head
Brett Cannon 14 years ago
parent
commit
8ff6baf25b
  1. 18
      Lib/importlib/_bootstrap.py
  2. 1814
      Python/importlib.h

18
Lib/importlib/_bootstrap.py

@ -841,7 +841,23 @@ class _FileFinder:
contents = _os.listdir(path)
# We store two cached versions, to handle runtime changes of the
# PYTHONCASEOK environment variable.
self._path_cache = set(contents)
if not sys.platform.startswith('win'):
self._path_cache = set(contents)
else:
# Windows users can import modules with case-insensitive file
# suffixes (for legacy reasons). Make the suffix lowercase here
# so it's done once instead of for every import. This is safe as
# the specified suffixes to check against are always specified in a
# case-sensitive manner.
lower_suffix_contents = set()
for item in contents:
name, dot, suffix = item.partition('.')
if dot:
new_name = '{}.{}'.format(name, suffix.lower())
else:
new_name = name
lower_suffix_contents.add(new_name)
self._path_cache = lower_suffix_contents
if sys.platform.startswith(CASE_INSENSITIVE_PLATFORMS):
self._relaxed_path_cache = set(fn.lower() for fn in contents)

1814
Python/importlib.h
File diff suppressed because it is too large
View File

Loading…
Cancel
Save