changeset: 102360:bedcb9ec3f26 branch: 3.5 parent: 102357:22eaf6158e7b user: Brett Cannon date: Fri Jul 15 11:54:38 2016 -0700 files: Lib/importlib/_bootstrap_external.py Lib/test/test_importlib/source/test_case_sensitivity.py Misc/NEWS description: Issue #27083: Respect the PYTHONCASEOK environment variable under Windows. Originally only b'PYTHONCASEOK' was being checked for in os.environ, but that won't work under Windows where all environment variables are strings (on OS X they are bytes). Thanks to Eryk Sun for the bug report. diff -r 22eaf6158e7b -r bedcb9ec3f26 Lib/importlib/_bootstrap_external.py --- a/Lib/importlib/_bootstrap_external.py Fri Jul 15 10:58:54 2016 -0700 +++ b/Lib/importlib/_bootstrap_external.py Fri Jul 15 11:54:38 2016 -0700 @@ -29,7 +29,8 @@ if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): def _relax_case(): """True if filenames must be checked case-insensitively.""" - return b'PYTHONCASEOK' in _os.environ + return (b'PYTHONCASEOK' in _os.environ + or 'PYTHONCASEOK' in _os.environ) else: def _relax_case(): """True if filenames must be checked case-insensitively.""" diff -r 22eaf6158e7b -r bedcb9ec3f26 Lib/test/test_importlib/source/test_case_sensitivity.py --- a/Lib/test/test_importlib/source/test_case_sensitivity.py Fri Jul 15 10:58:54 2016 -0700 +++ b/Lib/test/test_importlib/source/test_case_sensitivity.py Fri Jul 15 11:54:38 2016 -0700 @@ -39,12 +39,17 @@ insensitive_finder = self.finder(insensitive_path) return self.find(sensitive_finder), self.find(insensitive_finder) + def env_changed(self, *, should_exist): + possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK' + if any(x in self.importlib._bootstrap_external._os.environ + for x in possibilities) == should_exist: + self.skipTest('os.environ changes not reflected in ' + '_os.environ') + def test_sensitive(self): with test_support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - if b'PYTHONCASEOK' in self.importlib._bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.env_changed(should_exist=False) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) @@ -53,9 +58,7 @@ def test_insensitive(self): with test_support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - if b'PYTHONCASEOK' not in self.importlib._bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.env_changed(should_exist=True) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) diff -r 22eaf6158e7b -r bedcb9ec3f26 Misc/NEWS --- a/Misc/NEWS Fri Jul 15 10:58:54 2016 -0700 +++ b/Misc/NEWS Fri Jul 15 11:54:38 2016 -0700 @@ -10,6 +10,8 @@ Core and Builtins ----------------- +- Issue #27083: Respect the PYTHONCASEOK environment variable under Windows. + - Issue #27514: Make having too many statically nested blocks a SyntaxError instead of SystemError.