Add support for .parent and .joinpath in zipfile.Path (#13213)
This commit is contained in:
parent
afd1e6d2f0
commit
33e067d6a2
|
@ -2481,6 +2481,14 @@ class TestPath(unittest.TestCase):
|
|||
assert a.read_text() == "content of a"
|
||||
assert a.read_bytes() == b"content of a"
|
||||
|
||||
def test_joinpath(self):
|
||||
for zipfile_abcde in self.zipfile_abcde():
|
||||
root = zipfile.Path(zipfile_abcde)
|
||||
a = root.joinpath("a")
|
||||
assert a.is_file()
|
||||
e = root.joinpath("b").joinpath("d").joinpath("e.txt")
|
||||
assert e.read_text() == "content of e"
|
||||
|
||||
def test_traverse_truediv(self):
|
||||
for zipfile_abcde in self.zipfile_abcde():
|
||||
root = zipfile.Path(zipfile_abcde)
|
||||
|
@ -2502,5 +2510,11 @@ class TestPath(unittest.TestCase):
|
|||
root = zipfile.Path(zipfile_abcde)
|
||||
root / pathlib.Path("a")
|
||||
|
||||
def test_parent(self):
|
||||
for zipfile_abcde in self.zipfile_abcde():
|
||||
root = zipfile.Path(zipfile_abcde)
|
||||
assert (root / 'a').parent.at == ''
|
||||
assert (root / 'a' / 'b').parent.at == 'a/'
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -2218,12 +2218,14 @@ class Path:
|
|||
def __repr__(self):
|
||||
return self.__repr.format(self=self)
|
||||
|
||||
def __truediv__(self, add):
|
||||
def joinpath(self, add):
|
||||
next = posixpath.join(self.at, add)
|
||||
next_dir = posixpath.join(self.at, add, "")
|
||||
names = self._names()
|
||||
return self._next(next_dir if next not in names and next_dir in names else next)
|
||||
|
||||
__truediv__ = joinpath
|
||||
|
||||
@staticmethod
|
||||
def _add_implied_dirs(names):
|
||||
return names + [
|
||||
|
@ -2232,6 +2234,13 @@ class Path:
|
|||
if name and name + "/" not in names
|
||||
]
|
||||
|
||||
@property
|
||||
def parent(self):
|
||||
parent_at = posixpath.dirname(self.at)
|
||||
if parent_at:
|
||||
parent_at += '/'
|
||||
return self._next(parent_at)
|
||||
|
||||
def _names(self):
|
||||
return self._add_implied_dirs(self.root.namelist())
|
||||
|
||||
|
|
Loading…
Reference in New Issue