]> granicus.if.org Git - python/commitdiff
bpo-31802: Fix importing native path module before importing os. (#4017)
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 7 Jan 2018 15:54:31 +0000 (17:54 +0200)
committerGitHub <noreply@github.com>
Sun, 7 Jan 2018 15:54:31 +0000 (17:54 +0200)
Lib/macpath.py
Lib/ntpath.py
Lib/posixpath.py
Lib/test/test_genericpath.py
Misc/NEWS.d/next/Library/2017-10-17-14-52-14.bpo-31802.sYj2Zv.rst [new file with mode: 0644]

index f85a91435b90446d68f886ca05bdcae0eedbc897..aacf7235b011fd0e69626b69ff595de800d0b761 100644 (file)
@@ -1,5 +1,17 @@
 """Pathname and path-related operations for the Macintosh."""
 
+# strings representing various path-related bits and pieces
+# These are primarily for export; internally, they are hardcoded.
+# Should be set before imports for resolving cyclic dependency.
+curdir = ':'
+pardir = '::'
+extsep = '.'
+sep = ':'
+pathsep = '\n'
+defpath = ':'
+altsep = None
+devnull = 'Dev:Null'
+
 import os
 from stat import *
 import genericpath
@@ -16,17 +28,6 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
            "curdir","pardir","sep","pathsep","defpath","altsep","extsep",
            "devnull","realpath","supports_unicode_filenames"]
 
-# strings representing various path-related bits and pieces
-# These are primarily for export; internally, they are hardcoded.
-curdir = ':'
-pardir = '::'
-extsep = '.'
-sep = ':'
-pathsep = '\n'
-defpath = ':'
-altsep = None
-devnull = 'Dev:Null'
-
 def _get_colon(path):
     if isinstance(path, bytes):
         return b':'
index 10d3f2dc35ba8834311b2820f91670869e2d1a2d..2182ec776cc50357ee1c17732fdb9be765768ca0 100644 (file)
@@ -5,6 +5,18 @@ Instead of importing this module directly, import os and refer to this
 module as os.path.
 """
 
+# strings representing various path-related bits and pieces
+# These are primarily for export; internally, they are hardcoded.
+# Should be set before imports for resolving cyclic dependency.
+curdir = '.'
+pardir = '..'
+extsep = '.'
+sep = '\\'
+pathsep = ';'
+altsep = '/'
+defpath = '.;C:\\bin'
+devnull = 'nul'
+
 import os
 import sys
 import stat
@@ -19,17 +31,6 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
            "extsep","devnull","realpath","supports_unicode_filenames","relpath",
            "samefile", "sameopenfile", "samestat", "commonpath"]
 
-# strings representing various path-related bits and pieces
-# These are primarily for export; internally, they are hardcoded.
-curdir = '.'
-pardir = '..'
-extsep = '.'
-sep = '\\'
-pathsep = ';'
-altsep = '/'
-defpath = '.;C:\\bin'
-devnull = 'nul'
-
 def _get_bothseps(path):
     if isinstance(path, bytes):
         return b'\\/'
index 6dbdab27497f2b392484a5a08c3bc25e37cdba74..e92186c64e0ddbece53ed11a6e5f1537a162ea01 100644 (file)
@@ -10,6 +10,18 @@ Some of this can actually be useful on non-Posix systems too, e.g.
 for manipulation of the pathname component of URLs.
 """
 
+# Strings representing various path-related bits and pieces.
+# These are primarily for export; internally, they are hardcoded.
+# Should be set before imports for resolving cyclic dependency.
+curdir = '.'
+pardir = '..'
+extsep = '.'
+sep = '/'
+pathsep = ':'
+defpath = ':/bin:/usr/bin'
+altsep = None
+devnull = '/dev/null'
+
 import os
 import sys
 import stat
@@ -25,16 +37,6 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
            "devnull","realpath","supports_unicode_filenames","relpath",
            "commonpath"]
 
-# Strings representing various path-related bits and pieces.
-# These are primarily for export; internally, they are hardcoded.
-curdir = '.'
-pardir = '..'
-extsep = '.'
-sep = '/'
-pathsep = ':'
-defpath = ':/bin:/usr/bin'
-altsep = None
-devnull = '/dev/null'
 
 def _get_sep(path):
     if isinstance(path, bytes):
index 01e11da09805e70dff41a1f285debce98cf73646..ad5a59c44ed7bdbd9f6b716a1377dc389a98e70d 100644 (file)
@@ -8,6 +8,7 @@ import sys
 import unittest
 import warnings
 from test import support
+from test.support.script_helper import assert_python_ok
 
 
 def create_file(filename, data=b'foo'):
@@ -486,6 +487,9 @@ class CommonTest(GenericTest):
             with self.assertRaisesRegex(TypeError, 'bytearray'):
                 self.pathmodule.relpath(bytearray(b'foo'), bytearray(b'bar'))
 
+    def test_import(self):
+        assert_python_ok('-S', '-c', 'import ' + self.pathmodule.__name__)
+
 
 class PathLikeTests(unittest.TestCase):
 
diff --git a/Misc/NEWS.d/next/Library/2017-10-17-14-52-14.bpo-31802.sYj2Zv.rst b/Misc/NEWS.d/next/Library/2017-10-17-14-52-14.bpo-31802.sYj2Zv.rst
new file mode 100644 (file)
index 0000000..77df6bb
--- /dev/null
@@ -0,0 +1,2 @@
+Importing native path module (``posixpath``, ``ntpath``) now works even if
+the ``os`` module still is not imported.