Commit e4282315 authored by Guido van Rossum's avatar Guido van Rossum

Issue #22570: Add 'path' attribute to pathlib.Path objects.

parent 69bfb15b
...@@ -645,6 +645,13 @@ class PurePath(object): ...@@ -645,6 +645,13 @@ class PurePath(object):
self._parts) or '.' self._parts) or '.'
return self._str return self._str
@property
def path(self):
try:
return self._str
except AttributeError:
return str(self)
def as_posix(self): def as_posix(self):
"""Return the string representation of the path with forward (/) """Return the string representation of the path with forward (/)
slashes.""" slashes."""
......
...@@ -480,6 +480,22 @@ class _BasePurePathTest(object): ...@@ -480,6 +480,22 @@ class _BasePurePathTest(object):
self.assertEqual(P('a/b.py').name, 'b.py') self.assertEqual(P('a/b.py').name, 'b.py')
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): def test_suffix_common(self):
P = self.cls P = self.cls
self.assertEqual(P('').suffix, '') self.assertEqual(P('').suffix, '')
...@@ -903,6 +919,17 @@ class PureWindowsPathTest(_BasePurePathTest, unittest.TestCase): ...@@ -903,6 +919,17 @@ class PureWindowsPathTest(_BasePurePathTest, unittest.TestCase):
self.assertEqual(P('//My.py/Share.php').name, '') self.assertEqual(P('//My.py/Share.php').name, '')
self.assertEqual(P('//My.py/Share.php/a/b').name, 'b') 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): def test_suffix(self):
P = self.cls P = self.cls
self.assertEqual(P('c:').suffix, '') self.assertEqual(P('c:').suffix, '')
......
...@@ -13,6 +13,12 @@ Core and Builtins ...@@ -13,6 +13,12 @@ Core and Builtins
Library 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 - Issue #26012: Don't traverse into symlinks for ** pattern in
pathlib.Path.[r]glob(). pathlib.Path.[r]glob().
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment