mirror of
https://github.com/python/cpython.git
synced 2025-10-29 12:44:56 +00:00
GH-128520: pathlib ABCs: add JoinablePath.__vfspath__() (#133437)
In the abstract interface of `JoinablePath`, replace `__str__()` with `__vfspath__()`. This frees user implementations of `JoinablePath` to implement `__str__()` however they like (or not at all.) Also add `pathlib._os.vfspath()`, which calls `__fspath__()` or `__vfspath__()`.
This commit is contained in:
parent
9f69a58623
commit
5dbd27db7d
8 changed files with 118 additions and 81 deletions
|
|
@ -9,9 +9,10 @@
|
|||
from . import is_pypi
|
||||
|
||||
if is_pypi:
|
||||
from pathlib_abc import _JoinablePath
|
||||
from pathlib_abc import vfspath, _JoinablePath
|
||||
else:
|
||||
from pathlib.types import _JoinablePath
|
||||
from pathlib._os import vfspath
|
||||
|
||||
|
||||
class LexicalPath(_JoinablePath):
|
||||
|
|
@ -22,20 +23,20 @@ def __init__(self, *pathsegments):
|
|||
self._segments = pathsegments
|
||||
|
||||
def __hash__(self):
|
||||
return hash(str(self))
|
||||
return hash(vfspath(self))
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, LexicalPath):
|
||||
return NotImplemented
|
||||
return str(self) == str(other)
|
||||
return vfspath(self) == vfspath(other)
|
||||
|
||||
def __str__(self):
|
||||
def __vfspath__(self):
|
||||
if not self._segments:
|
||||
return ''
|
||||
return self.parser.join(*self._segments)
|
||||
|
||||
def __repr__(self):
|
||||
return f'{type(self).__name__}({str(self)!r})'
|
||||
return f'{type(self).__name__}({vfspath(self)!r})'
|
||||
|
||||
def with_segments(self, *pathsegments):
|
||||
return type(self)(*pathsegments)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue