diff options
author | Ezio Melotti <ezio.melotti@gmail.com> | 2010-02-20 08:09:39 (GMT) |
---|---|---|
committer | Ezio Melotti <ezio.melotti@gmail.com> | 2010-02-20 08:09:39 (GMT) |
commit | 4cc80ca921b4f6bce11bd7eec8bc6b561aa9f524 (patch) | |
tree | 9951e02d8dec6e305ab5fa184b93c9d0e534eea5 | |
parent | 61afd2694bf6bff8c65a392aaf27c575d92b7eb9 (diff) | |
download | cpython-4cc80ca921b4f6bce11bd7eec8bc6b561aa9f524.zip cpython-4cc80ca921b4f6bce11bd7eec8bc6b561aa9f524.tar.gz cpython-4cc80ca921b4f6bce11bd7eec8bc6b561aa9f524.tar.bz2 |
#3426: os.path.abspath now returns unicode when its arg is unicode.
-rw-r--r-- | Lib/macpath.py | 6 | ||||
-rw-r--r-- | Lib/ntpath.py | 8 | ||||
-rw-r--r-- | Lib/os2emxpath.py | 6 | ||||
-rw-r--r-- | Lib/posixpath.py | 6 | ||||
-rw-r--r-- | Lib/test/test_macpath.py | 10 | ||||
-rw-r--r-- | Lib/test/test_ntpath.py | 14 | ||||
-rw-r--r-- | Lib/test/test_posixpath.py | 9 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
8 files changed, 57 insertions, 6 deletions
diff --git a/Lib/macpath.py b/Lib/macpath.py index 14e49a3..15714c6 100644 --- a/Lib/macpath.py +++ b/Lib/macpath.py @@ -186,7 +186,11 @@ def walk(top, func, arg): def abspath(path): """Return an absolute path.""" if not isabs(path): - path = join(os.getcwd(), path) + if isinstance(path, unicode): + cwd = os.getcwdu() + else: + cwd = os.getcwd() + path = join(cwd, path) return normpath(path) # realpath is a no-op on systems without islink support diff --git a/Lib/ntpath.py b/Lib/ntpath.py index 02d8584..a124dfd 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -449,7 +449,11 @@ except ImportError: # not running on Windows - mock up something sensible def abspath(path): """Return the absolute version of a path.""" if not isabs(path): - path = join(os.getcwd(), path) + if isinstance(path, unicode): + cwd = os.getcwdu() + else: + cwd = os.getcwd() + path = join(cwd, path) return normpath(path) else: # use native Windows method on Windows @@ -461,6 +465,8 @@ else: # use native Windows method on Windows path = _getfullpathname(path) except WindowsError: pass # Bad path - return unchanged. + elif isinstance(path, unicode): + path = os.getcwdu() else: path = os.getcwd() return normpath(path) diff --git a/Lib/os2emxpath.py b/Lib/os2emxpath.py index 4e85c4d..1bed51d 100644 --- a/Lib/os2emxpath.py +++ b/Lib/os2emxpath.py @@ -146,7 +146,11 @@ def normpath(path): def abspath(path): """Return the absolute version of a path""" if not isabs(path): - path = join(os.getcwd(), path) + if isinstance(path, unicode): + cwd = os.getcwdu() + else: + cwd = os.getcwd() + path = join(cwd, path) return normpath(path) # realpath is a no-op on systems without islink support diff --git a/Lib/posixpath.py b/Lib/posixpath.py index 6be031b..b6438bd 100644 --- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -337,7 +337,11 @@ def normpath(path): def abspath(path): """Return an absolute path.""" if not isabs(path): - path = join(os.getcwd(), path) + if isinstance(path, unicode): + cwd = os.getcwdu() + else: + cwd = os.getcwd() + path = join(cwd, path) return normpath(path) diff --git a/Lib/test/test_macpath.py b/Lib/test/test_macpath.py index 4541eb9..ff8da10 100644 --- a/Lib/test/test_macpath.py +++ b/Lib/test/test_macpath.py @@ -8,6 +8,16 @@ class MacPathTestCase(unittest.TestCase): def test_abspath(self): self.assertTrue(macpath.abspath("xx:yy") == "xx:yy") + # Issue 3426: check that abspath retuns unicode when the arg is unicode + # and str when it's str, with both ASCII and non-ASCII cwds + for cwd in (u'cwd', u'\xe7w\xf0'): + with test_support.temp_cwd(cwd): + for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'): + self.assertIsInstance(macpath.abspath(path), str) + for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): + self.assertIsInstance(macpath.abspath(upath), unicode) + + def test_isabs(self): isabs = macpath.isabs self.assertTrue(isabs("xx:yy")) diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py index 9e9b6ed..f5bc952 100644 --- a/Lib/test/test_ntpath.py +++ b/Lib/test/test_ntpath.py @@ -160,13 +160,25 @@ class TestNtpath(unittest.TestCase): # the rest of the tests for the ntpath module to be run to completion # on any platform, since most of the module is intended to be usable # from any platform. + # XXX this needs more tests try: import nt except ImportError: - pass + # check that the function is there even if we are not on Windows + ntpath.abspath else: tester('ntpath.abspath("C:\\")', "C:\\") + # Issue 3426: check that abspath retuns unicode when the arg is + # unicode and str when it's str, with both ASCII and non-ASCII cwds + for cwd in (u'cwd', u'\xe7w\xf0'): + with test_support.temp_cwd(cwd): + for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'): + self.assertIsInstance(ntpath.abspath(path), str) + for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): + self.assertIsInstance(ntpath.abspath(upath), unicode) + + def test_relpath(self): currentdir = os.path.split(os.getcwd())[-1] tester('ntpath.relpath("a")', 'a') diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py index 60a043c..2315b25 100644 --- a/Lib/test/test_posixpath.py +++ b/Lib/test/test_posixpath.py @@ -386,6 +386,15 @@ class PosixPathTest(unittest.TestCase): def test_abspath(self): self.assertTrue("foo" in posixpath.abspath("foo")) + # Issue 3426: check that abspath retuns unicode when the arg is unicode + # and str when it's str, with both ASCII and non-ASCII cwds + for cwd in (u'cwd', u'\xe7w\xf0'): + with test_support.temp_cwd(cwd): + for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'): + self.assertIsInstance(posixpath.abspath(path), str) + for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): + self.assertIsInstance(posixpath.abspath(upath), unicode) + self.assertRaises(TypeError, posixpath.abspath) def test_realpath(self): @@ -15,6 +15,8 @@ Core and Builtins Library ------- +- Issue #3426: ``os.path.abspath`` now returns unicode when its arg is unicode. + - Issue #7633: In the decimal module, Context class methods (with the exception of canonical and is_canonical) now accept instances of int and long wherever a Decimal instance is accepted, and implicitly @@ -28,7 +30,7 @@ Library argument added to the TextTestRunner constructor allowing a different result class to be used without having to subclass. -- Issue 7588: ``unittest.TextTestResult.getDescription`` now includes the test +- Issue #7588: ``unittest.TextTestResult.getDescription`` now includes the test name in failure reports even if the test has a docstring. Extension Modules |