1
1
from _typeshed import AnyPath , OpenBinaryMode , OpenBinaryModeReading , OpenBinaryModeUpdating , OpenBinaryModeWriting , OpenTextMode
2
- from typing import Any , Callable , Optional , Union , overload
2
+ from asyncio import AbstractEventLoop
3
+ from typing import Any , Callable , Optional , TypeVar , Union , overload
3
4
from typing_extensions import Literal
4
5
5
- from ..base import AiofilesContextManager , AsyncBase
6
- from .binary import AsyncBufferedIOBase , AsyncBufferedReader , AsyncFileIO
6
+ from ..base import AiofilesContextManager
7
+ from .binary import AsyncBufferedIOBase , AsyncBufferedReader , AsyncFileIO , _UnknownAsyncBinaryIO
7
8
from .text import AsyncTextIOWrapper
8
9
9
- _OpenFile = Union [AnyPath , int ]
10
+ _OpenFile = TypeVar ( "_OpenFile" , bound = Union [AnyPath , int ])
10
11
_Opener = Callable [[str , int ], int ]
12
+
13
+ # Text mode: always returns AsyncTextIOWrapper
11
14
@overload
12
15
def open (
13
16
file : _OpenFile ,
@@ -19,9 +22,11 @@ def open(
19
22
closefd : bool = ...,
20
23
opener : Optional [_Opener ] = ...,
21
24
* ,
22
- loop : Optional [Any ] = ...,
25
+ loop : Optional [AbstractEventLoop ] = ...,
23
26
executor : Optional [Any ] = ...,
24
27
) -> AiofilesContextManager [None , None , AsyncTextIOWrapper ]: ...
28
+
29
+ # Unbuffered binary: returns a FileIO
25
30
@overload
26
31
def open (
27
32
file : _OpenFile ,
@@ -33,37 +38,43 @@ def open(
33
38
closefd : bool = ...,
34
39
opener : Optional [_Opener ] = ...,
35
40
* ,
36
- loop : Optional [Any ] = ...,
41
+ loop : Optional [AbstractEventLoop ] = ...,
37
42
executor : Optional [Any ] = ...,
38
43
) -> AiofilesContextManager [None , None , AsyncFileIO ]: ...
44
+
45
+ # Buffered binary reading/updating: AsyncBufferedReader
39
46
@overload
40
47
def open (
41
48
file : _OpenFile ,
42
- mode : OpenBinaryModeWriting ,
49
+ mode : Union [ OpenBinaryModeReading , OpenBinaryModeUpdating ] ,
43
50
buffering : Literal [- 1 , 1 ] = ...,
44
51
encoding : None = ...,
45
52
errors : None = ...,
46
53
newline : None = ...,
47
54
closefd : bool = ...,
48
55
opener : Optional [_Opener ] = ...,
49
56
* ,
50
- loop : Optional [Any ] = ...,
57
+ loop : Optional [AbstractEventLoop ] = ...,
51
58
executor : Optional [Any ] = ...,
52
- ) -> AiofilesContextManager [None , None , AsyncBufferedIOBase ]: ...
59
+ ) -> AiofilesContextManager [None , None , AsyncBufferedReader ]: ...
60
+
61
+ # Buffered binary writing: AsyncBufferedIOBase
53
62
@overload
54
63
def open (
55
64
file : _OpenFile ,
56
- mode : Union [ OpenBinaryModeReading , OpenBinaryModeUpdating ] ,
65
+ mode : OpenBinaryModeWriting ,
57
66
buffering : Literal [- 1 , 1 ] = ...,
58
67
encoding : None = ...,
59
68
errors : None = ...,
60
69
newline : None = ...,
61
70
closefd : bool = ...,
62
71
opener : Optional [_Opener ] = ...,
63
72
* ,
64
- loop : Optional [Any ] = ...,
73
+ loop : Optional [AbstractEventLoop ] = ...,
65
74
executor : Optional [Any ] = ...,
66
- ) -> AiofilesContextManager [None , None , AsyncBufferedReader ]: ...
75
+ ) -> AiofilesContextManager [None , None , AsyncBufferedIOBase ]: ...
76
+
77
+ # Buffering cannot be determined: fall back to _UnknownAsyncBinaryIO
67
78
@overload
68
79
def open (
69
80
file : _OpenFile ,
@@ -75,6 +86,6 @@ def open(
75
86
closefd : bool = ...,
76
87
opener : Optional [_Opener ] = ...,
77
88
* ,
78
- loop : Optional [Any ] = ...,
89
+ loop : Optional [AbstractEventLoop ] = ...,
79
90
executor : Optional [Any ] = ...,
80
- ) -> AiofilesContextManager [None , None , AsyncBase [ bytes ] ]: ...
91
+ ) -> AiofilesContextManager [None , None , _UnknownAsyncBinaryIO ]: ...
0 commit comments