4
4
5
5
import socket
6
6
import sys
7
+ import warnings
7
8
import weakref
8
9
9
10
if hasattr (socket , 'AF_UNIX' ):
@@ -42,11 +43,14 @@ async def open_connection(host=None, port=None, *,
42
43
"""
43
44
if loop is None :
44
45
loop = events .get_event_loop ()
45
- reader = StreamReader (limit = limit , loop = loop )
46
- protocol = StreamReaderProtocol (reader , loop = loop )
46
+ reader = StreamReader (limit = limit , loop = loop ,
47
+ _asyncio_internal = True )
48
+ protocol = StreamReaderProtocol (reader , loop = loop ,
49
+ _asyncio_internal = True )
47
50
transport , _ = await loop .create_connection (
48
51
lambda : protocol , host , port , ** kwds )
49
- writer = StreamWriter (transport , protocol , reader , loop )
52
+ writer = StreamWriter (transport , protocol , reader , loop ,
53
+ _asyncio_internal = True )
50
54
return reader , writer
51
55
52
56
@@ -77,9 +81,11 @@ async def start_server(client_connected_cb, host=None, port=None, *,
77
81
loop = events .get_event_loop ()
78
82
79
83
def factory ():
80
- reader = StreamReader (limit = limit , loop = loop )
84
+ reader = StreamReader (limit = limit , loop = loop ,
85
+ _asyncio_internal = True )
81
86
protocol = StreamReaderProtocol (reader , client_connected_cb ,
82
- loop = loop )
87
+ loop = loop ,
88
+ _asyncio_internal = True )
83
89
return protocol
84
90
85
91
return await loop .create_server (factory , host , port , ** kwds )
@@ -93,11 +99,14 @@ async def open_unix_connection(path=None, *,
93
99
"""Similar to `open_connection` but works with UNIX Domain Sockets."""
94
100
if loop is None :
95
101
loop = events .get_event_loop ()
96
- reader = StreamReader (limit = limit , loop = loop )
97
- protocol = StreamReaderProtocol (reader , loop = loop )
102
+ reader = StreamReader (limit = limit , loop = loop ,
103
+ _asyncio_internal = True )
104
+ protocol = StreamReaderProtocol (reader , loop = loop ,
105
+ _asyncio_internal = True )
98
106
transport , _ = await loop .create_unix_connection (
99
107
lambda : protocol , path , ** kwds )
100
- writer = StreamWriter (transport , protocol , reader , loop )
108
+ writer = StreamWriter (transport , protocol , reader , loop ,
109
+ _asyncio_internal = True )
101
110
return reader , writer
102
111
103
112
async def start_unix_server (client_connected_cb , path = None , * ,
@@ -107,9 +116,11 @@ async def start_unix_server(client_connected_cb, path=None, *,
107
116
loop = events .get_event_loop ()
108
117
109
118
def factory ():
110
- reader = StreamReader (limit = limit , loop = loop )
119
+ reader = StreamReader (limit = limit , loop = loop ,
120
+ _asyncio_internal = True )
111
121
protocol = StreamReaderProtocol (reader , client_connected_cb ,
112
- loop = loop )
122
+ loop = loop ,
123
+ _asyncio_internal = True )
113
124
return protocol
114
125
115
126
return await loop .create_unix_server (factory , path , ** kwds )
@@ -125,11 +136,20 @@ class FlowControlMixin(protocols.Protocol):
125
136
StreamWriter.drain() must wait for _drain_helper() coroutine.
126
137
"""
127
138
128
- def __init__ (self , loop = None ):
139
+ def __init__ (self , loop = None , * , _asyncio_internal = False ):
129
140
if loop is None :
130
141
self ._loop = events .get_event_loop ()
131
142
else :
132
143
self ._loop = loop
144
+ if not _asyncio_internal :
145
+ # NOTE:
146
+ # Avoid inheritance from FlowControlMixin
147
+ # Copy-paste the code to your project
148
+ # if you need flow control helpers
149
+ warnings .warn (f"{ self .__class__ } should be instaniated "
150
+ "by asyncio internals only, "
151
+ "please avoid its creation from user code" ,
152
+ DeprecationWarning )
133
153
self ._paused = False
134
154
self ._drain_waiter = None
135
155
self ._connection_lost = False
@@ -191,8 +211,9 @@ class StreamReaderProtocol(FlowControlMixin, protocols.Protocol):
191
211
192
212
_source_traceback = None
193
213
194
- def __init__ (self , stream_reader , client_connected_cb = None , loop = None ):
195
- super ().__init__ (loop = loop )
214
+ def __init__ (self , stream_reader , client_connected_cb = None , loop = None ,
215
+ * , _asyncio_internal = False ):
216
+ super ().__init__ (loop = loop , _asyncio_internal = _asyncio_internal )
196
217
if stream_reader is not None :
197
218
self ._stream_reader_wr = weakref .ref (stream_reader ,
198
219
self ._on_reader_gc )
@@ -253,7 +274,8 @@ def connection_made(self, transport):
253
274
if self ._client_connected_cb is not None :
254
275
self ._stream_writer = StreamWriter (transport , self ,
255
276
reader ,
256
- self ._loop )
277
+ self ._loop ,
278
+ _asyncio_internal = True )
257
279
res = self ._client_connected_cb (reader ,
258
280
self ._stream_writer )
259
281
if coroutines .iscoroutine (res ):
@@ -311,7 +333,13 @@ class StreamWriter:
311
333
directly.
312
334
"""
313
335
314
- def __init__ (self , transport , protocol , reader , loop ):
336
+ def __init__ (self , transport , protocol , reader , loop ,
337
+ * , _asyncio_internal = False ):
338
+ if not _asyncio_internal :
339
+ warnings .warn (f"{ self .__class__ } should be instaniated "
340
+ "by asyncio internals only, "
341
+ "please avoid its creation from user code" ,
342
+ DeprecationWarning )
315
343
self ._transport = transport
316
344
self ._protocol = protocol
317
345
# drain() expects that the reader has an exception() method
@@ -388,7 +416,14 @@ class StreamReader:
388
416
389
417
_source_traceback = None
390
418
391
- def __init__ (self , limit = _DEFAULT_LIMIT , loop = None ):
419
+ def __init__ (self , limit = _DEFAULT_LIMIT , loop = None ,
420
+ * , _asyncio_internal = False ):
421
+ if not _asyncio_internal :
422
+ warnings .warn (f"{ self .__class__ } should be instaniated "
423
+ "by asyncio internals only, "
424
+ "please avoid its creation from user code" ,
425
+ DeprecationWarning )
426
+
392
427
# The line length limit is a security feature;
393
428
# it also doubles as half the buffer limit.
394
429
0 commit comments