Issue #22570: Add 'path' attribute to pathlib.Path objects. (Merge 3.4->3.5)

This commit is contained in:
Guido van Rossum 2016-01-06 11:03:15 -08:00
commit 1a4afec0d6
3 changed files with 40 additions and 0 deletions

View File

@ -690,6 +690,13 @@ class PurePath(object):
self._parts) or '.'
return self._str
@property
def path(self):
try:
return self._str
except AttributeError:
return str(self)
def as_posix(self):
"""Return the string representation of the path with forward (/)
slashes."""

View File

@ -477,6 +477,22 @@ class _BasePurePathTest(object):
self.assertEqual(P('a/b.py').name, 'b.py')
self.assertEqual(P('/a/b.py').name, 'b.py')
def test_path_common(self):
P = self.cls
def check(arg, expected=None):
if expected is None:
expected = arg
self.assertEqual(P(arg).path, expected.replace('/', self.sep))
check('', '.')
check('.')
check('/')
check('a/b')
check('/a/b')
check('/a/b/', '/a/b')
check('/a/b/.', '/a/b')
check('a/b.py')
check('/a/b.py')
def test_suffix_common(self):
P = self.cls
self.assertEqual(P('').suffix, '')
@ -899,6 +915,17 @@ class PureWindowsPathTest(_BasePurePathTest, unittest.TestCase):
self.assertEqual(P('//My.py/Share.php').name, '')
self.assertEqual(P('//My.py/Share.php/a/b').name, 'b')
def test_path(self):
P = self.cls
self.assertEqual(P('c:').path, 'c:')
self.assertEqual(P('c:/').path, 'c:\\')
self.assertEqual(P('c:a/b').path, 'c:a\\b')
self.assertEqual(P('c:/a/b').path, 'c:\\a\\b')
self.assertEqual(P('c:a/b.py').path, 'c:a\\b.py')
self.assertEqual(P('c:/a/b.py').path, 'c:\\a\\b.py')
self.assertEqual(P('//My.py/Share.php').path, '\\\\My.py\\Share.php\\')
self.assertEqual(P('//My.py/Share.php/a/b').path, '\\\\My.py\\Share.php\\a\\b')
def test_suffix(self):
P = self.cls
self.assertEqual(P('c:').suffix, '')

View File

@ -41,6 +41,12 @@ Core and Builtins
Library
-------
- Issue #22570: Add 'path' attribute to pathlib.Path objects,
returning the same as str(), to make it more similar to DirEntry.
Library code can now write getattr(p, 'path', p) to get the path as
a string from a Path, a DirEntry, or a plain string. This is
essentially a small one-off protocol.
- Issue #26012: Don't traverse into symlinks for ** pattern in
pathlib.Path.[r]glob().