[Python-checkins] cpython (3.5): Issue #27083: Respect the PYTHONCASEOK environment variable under

brett.cannon python-checkins at python.org
Fri Jul 15 14:55:27 EDT 2016


https://hg.python.org/cpython/rev/bedcb9ec3f26
changeset:   102360:bedcb9ec3f26
branch:      3.5
parent:      102357:22eaf6158e7b
user:        Brett Cannon <brett at python.org>
date:        Fri Jul 15 11:54:38 2016 -0700
summary:
  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.

files:
  Lib/importlib/_bootstrap_external.py                    |   3 +-
  Lib/test/test_importlib/source/test_case_sensitivity.py |  15 ++++++----
  Misc/NEWS                                               |   2 +
  3 files changed, 13 insertions(+), 7 deletions(-)


diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
--- a/Lib/importlib/_bootstrap_external.py
+++ b/Lib/importlib/_bootstrap_external.py
@@ -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 --git a/Lib/test/test_importlib/source/test_case_sensitivity.py b/Lib/test/test_importlib/source/test_case_sensitivity.py
--- a/Lib/test/test_importlib/source/test_case_sensitivity.py
+++ b/Lib/test/test_importlib/source/test_case_sensitivity.py
@@ -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 --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.
 

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list