1
1
import os
2
2
import sys
3
- from _typeshed import OpenBinaryMode , OpenTextMode
3
+ from _typeshed import OpenBinaryMode , OpenBinaryModeReading , OpenBinaryModeUpdating , OpenBinaryModeWriting , OpenTextMode
4
+ from io import BufferedRandom , BufferedReader , BufferedWriter , FileIO , TextIOWrapper
4
5
from types import TracebackType
5
6
from typing import IO , Any , BinaryIO , Generator , List , Optional , Sequence , TextIO , Tuple , Type , TypeVar , Union , overload
7
+ from typing_extensions import Literal
6
8
7
9
_P = TypeVar ("_P" , bound = PurePath )
8
10
@@ -83,6 +85,9 @@ class Path(PurePath):
83
85
def mkdir (self , mode : int = ..., parents : bool = ...) -> None : ...
84
86
else :
85
87
def mkdir (self , mode : int = ..., parents : bool = ..., exist_ok : bool = ...) -> None : ...
88
+
89
+ # Adapted from builtins.open
90
+ # Text mode: always returns a TextIOWrapper
86
91
@overload
87
92
def open (
88
93
self ,
@@ -91,11 +96,56 @@ class Path(PurePath):
91
96
encoding : Optional [str ] = ...,
92
97
errors : Optional [str ] = ...,
93
98
newline : Optional [str ] = ...,
94
- ) -> TextIO : ...
99
+ ) -> TextIOWrapper : ...
100
+ # Unbuffered binary mode: returns a FileIO
101
+ @overload
102
+ def open (
103
+ self ,
104
+ mode : OpenBinaryMode ,
105
+ buffering : Literal [0 ],
106
+ encoding : None = ...,
107
+ errors : None = ...,
108
+ newline : None = ...,
109
+ ) -> FileIO : ...
110
+ # Buffering is on: return BufferedRandom, BufferedReader, or BufferedWriter
95
111
@overload
96
112
def open (
97
- self , mode : OpenBinaryMode , buffering : int = ..., encoding : None = ..., errors : None = ..., newline : None = ...
113
+ self ,
114
+ mode : OpenBinaryModeUpdating ,
115
+ buffering : Literal [- 1 , 1 ] = ...,
116
+ encoding : None = ...,
117
+ errors : None = ...,
118
+ newline : None = ...,
119
+ ) -> BufferedRandom : ...
120
+ @overload
121
+ def open (
122
+ self ,
123
+ mode : OpenBinaryModeWriting ,
124
+ buffering : Literal [- 1 , 1 ] = ...,
125
+ encoding : None = ...,
126
+ errors : None = ...,
127
+ newline : None = ...,
128
+ ) -> BufferedWriter : ...
129
+ @overload
130
+ def open (
131
+ self ,
132
+ mode : OpenBinaryModeReading ,
133
+ buffering : Literal [- 1 , 1 ] = ...,
134
+ encoding : None = ...,
135
+ errors : None = ...,
136
+ newline : None = ...,
137
+ ) -> BufferedReader : ...
138
+ # Buffering cannot be determined: fall back to BinaryIO
139
+ @overload
140
+ def open (
141
+ self ,
142
+ mode : OpenBinaryMode ,
143
+ buffering : int ,
144
+ encoding : None = ...,
145
+ errors : None = ...,
146
+ newline : None = ...,
98
147
) -> BinaryIO : ...
148
+ # Fallback if mode is not specified
99
149
@overload
100
150
def open (
101
151
self ,
@@ -105,6 +155,7 @@ class Path(PurePath):
105
155
errors : Optional [str ] = ...,
106
156
newline : Optional [str ] = ...,
107
157
) -> IO [Any ]: ...
158
+
108
159
def owner (self ) -> str : ...
109
160
if sys .version_info >= (3 , 9 ):
110
161
def readlink (self : _P ) -> _P : ...
0 commit comments