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,8 @@ 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
+ # Adapted from builtins.open
89
+ # Text mode: always returns a TextIOWrapper
86
90
@overload
87
91
def open (
88
92
self ,
@@ -91,11 +95,46 @@ class Path(PurePath):
91
95
encoding : Optional [str ] = ...,
92
96
errors : Optional [str ] = ...,
93
97
newline : Optional [str ] = ...,
94
- ) -> TextIO : ...
98
+ ) -> TextIOWrapper : ...
99
+ # Unbuffered binary mode: returns a FileIO
95
100
@overload
96
101
def open (
97
- self , mode : OpenBinaryMode , buffering : int = ..., encoding : None = ..., errors : None = ..., newline : None = ...
102
+ self , mode : OpenBinaryMode , buffering : Literal [0 ], encoding : None = ..., errors : None = ..., newline : None = ...,
103
+ ) -> FileIO : ...
104
+ # Buffering is on: return BufferedRandom, BufferedReader, or BufferedWriter
105
+ @overload
106
+ def open (
107
+ self ,
108
+ mode : OpenBinaryModeUpdating ,
109
+ buffering : Literal [- 1 , 1 ] = ...,
110
+ encoding : None = ...,
111
+ errors : None = ...,
112
+ newline : None = ...,
113
+ ) -> BufferedRandom : ...
114
+ @overload
115
+ def open (
116
+ self ,
117
+ mode : OpenBinaryModeWriting ,
118
+ buffering : Literal [- 1 , 1 ] = ...,
119
+ encoding : None = ...,
120
+ errors : None = ...,
121
+ newline : None = ...,
122
+ ) -> BufferedWriter : ...
123
+ @overload
124
+ def open (
125
+ self ,
126
+ mode : OpenBinaryModeReading ,
127
+ buffering : Literal [- 1 , 1 ] = ...,
128
+ encoding : None = ...,
129
+ errors : None = ...,
130
+ newline : None = ...,
131
+ ) -> BufferedReader : ...
132
+ # Buffering cannot be determined: fall back to BinaryIO
133
+ @overload
134
+ def open (
135
+ self , mode : OpenBinaryMode , buffering : int , encoding : None = ..., errors : None = ..., newline : None = ...,
98
136
) -> BinaryIO : ...
137
+ # Fallback if mode is not specified
99
138
@overload
100
139
def open (
101
140
self ,
0 commit comments