Skip to content

Commit a53bfeb

Browse files
authored
add zipfile._path (#11150)
1 parent 91b35bb commit a53bfeb

File tree

3 files changed

+100
-1
lines changed

3 files changed

+100
-1
lines changed

stdlib/VERSIONS

+1
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ xmlrpc: 3.0-
303303
xxlimited: 3.2-
304304
zipapp: 3.5-
305305
zipfile: 2.7-
306+
zipfile._path: 3.12-
306307
zipimport: 2.7-
307308
zlib: 2.7-
308309
zoneinfo: 3.9-

stdlib/zipfile.pyi renamed to stdlib/zipfile/__init__.pyi

+4-1
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,10 @@ class ZipInfo:
227227
def is_dir(self) -> bool: ...
228228
def FileHeader(self, zip64: bool | None = None) -> bytes: ...
229229

230-
if sys.version_info >= (3, 8):
230+
if sys.version_info >= (3, 12):
231+
from zipfile._path import CompleteDirs as CompleteDirs, Path as Path
232+
233+
elif sys.version_info >= (3, 8):
231234
class CompleteDirs(ZipFile):
232235
def resolve_dir(self, name: str) -> str: ...
233236
@overload

stdlib/zipfile/_path.pyi

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import sys
2+
from _typeshed import StrPath
3+
from collections.abc import Iterator, Sequence
4+
from io import TextIOWrapper
5+
from os import PathLike
6+
from typing import IO, overload
7+
from typing_extensions import Literal, Self, TypeAlias
8+
from zipfile import ZipFile
9+
10+
_ReadWriteBinaryMode: TypeAlias = Literal["r", "w", "rb", "wb"]
11+
12+
if sys.version_info >= (3, 12):
13+
class InitializedState:
14+
def __init__(self, *args: object, **kwargs: object) -> None: ...
15+
def __getstate__(self) -> tuple[list[object], dict[object, object]]: ...
16+
def __setstate__(self, state: Sequence[tuple[list[object], dict[object, object]]]) -> None: ...
17+
18+
class CompleteDirs(InitializedState, ZipFile):
19+
def resolve_dir(self, name: str) -> str: ...
20+
@overload
21+
@classmethod
22+
def make(cls, source: ZipFile) -> CompleteDirs: ...
23+
@overload
24+
@classmethod
25+
def make(cls, source: StrPath | IO[bytes]) -> Self: ...
26+
27+
class Path:
28+
root: CompleteDirs
29+
def __init__(self, root: ZipFile | StrPath | IO[bytes], at: str = "") -> None: ...
30+
@property
31+
def name(self) -> str: ...
32+
@property
33+
def parent(self) -> PathLike[str]: ... # undocumented
34+
if sys.version_info >= (3, 10):
35+
@property
36+
def filename(self) -> PathLike[str]: ... # undocumented
37+
if sys.version_info >= (3, 11):
38+
@property
39+
def suffix(self) -> str: ...
40+
@property
41+
def suffixes(self) -> list[str]: ...
42+
@property
43+
def stem(self) -> str: ...
44+
45+
if sys.version_info >= (3, 9):
46+
@overload
47+
def open(
48+
self,
49+
mode: Literal["r", "w"] = "r",
50+
encoding: str | None = None,
51+
errors: str | None = None,
52+
newline: str | None = None,
53+
line_buffering: bool = ...,
54+
write_through: bool = ...,
55+
*,
56+
pwd: bytes | None = None,
57+
) -> TextIOWrapper: ...
58+
@overload
59+
def open(self, mode: Literal["rb", "wb"], *, pwd: bytes | None = None) -> IO[bytes]: ...
60+
else:
61+
def open(
62+
self, mode: _ReadWriteBinaryMode = "r", pwd: bytes | None = None, *, force_zip64: bool = False
63+
) -> IO[bytes]: ...
64+
65+
if sys.version_info >= (3, 10):
66+
def iterdir(self) -> Iterator[Self]: ...
67+
else:
68+
def iterdir(self) -> Iterator[Path]: ...
69+
70+
def is_dir(self) -> bool: ...
71+
def is_file(self) -> bool: ...
72+
def exists(self) -> bool: ...
73+
def read_text(
74+
self,
75+
encoding: str | None = ...,
76+
errors: str | None = ...,
77+
newline: str | None = ...,
78+
line_buffering: bool = ...,
79+
write_through: bool = ...,
80+
) -> str: ...
81+
def read_bytes(self) -> bytes: ...
82+
if sys.version_info >= (3, 10):
83+
def joinpath(self, *other: StrPath) -> Path: ...
84+
else:
85+
def joinpath(self, add: StrPath) -> Path: ... # undocumented
86+
if sys.version_info >= (3, 12):
87+
def glob(self, pattern: str) -> Iterator[Self]: ...
88+
def rglob(self, pattern: str) -> Iterator[Self]: ...
89+
def is_symlink(self) -> Literal[False]: ...
90+
def relative_to(self, other: Path, *extra: StrPath) -> str: ...
91+
def match(self, path_pattern: str) -> bool: ...
92+
def __eq__(self, other: object) -> bool: ...
93+
def __hash__(self) -> int: ...
94+
95+
def __truediv__(self, add: StrPath) -> Path: ...

0 commit comments

Comments
 (0)