44
55import socket
66import sys
7+ import warnings
78import weakref
89
910if hasattr (socket , 'AF_UNIX' ):
@@ -42,11 +43,14 @@ async def open_connection(host=None, port=None, *,
4243 """
4344 if loop is None :
4445 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 )
4750 transport , _ = await loop .create_connection (
4851 lambda : protocol , host , port , ** kwds )
49- writer = StreamWriter (transport , protocol , reader , loop )
52+ writer = StreamWriter (transport , protocol , reader , loop ,
53+ _asyncio_internal = True )
5054 return reader , writer
5155
5256
@@ -77,9 +81,11 @@ async def start_server(client_connected_cb, host=None, port=None, *,
7781 loop = events .get_event_loop ()
7882
7983 def factory ():
80- reader = StreamReader (limit = limit , loop = loop )
84+ reader = StreamReader (limit = limit , loop = loop ,
85+ _asyncio_internal = True )
8186 protocol = StreamReaderProtocol (reader , client_connected_cb ,
82- loop = loop )
87+ loop = loop ,
88+ _asyncio_internal = True )
8389 return protocol
8490
8591 return await loop .create_server (factory , host , port , ** kwds )
@@ -93,11 +99,14 @@ async def open_unix_connection(path=None, *,
9399 """Similar to `open_connection` but works with UNIX Domain Sockets."""
94100 if loop is None :
95101 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 )
98106 transport , _ = await loop .create_unix_connection (
99107 lambda : protocol , path , ** kwds )
100- writer = StreamWriter (transport , protocol , reader , loop )
108+ writer = StreamWriter (transport , protocol , reader , loop ,
109+ _asyncio_internal = True )
101110 return reader , writer
102111
103112 async def start_unix_server (client_connected_cb , path = None , * ,
@@ -107,9 +116,11 @@ async def start_unix_server(client_connected_cb, path=None, *,
107116 loop = events .get_event_loop ()
108117
109118 def factory ():
110- reader = StreamReader (limit = limit , loop = loop )
119+ reader = StreamReader (limit = limit , loop = loop ,
120+ _asyncio_internal = True )
111121 protocol = StreamReaderProtocol (reader , client_connected_cb ,
112- loop = loop )
122+ loop = loop ,
123+ _asyncio_internal = True )
113124 return protocol
114125
115126 return await loop .create_unix_server (factory , path , ** kwds )
@@ -125,11 +136,20 @@ class FlowControlMixin(protocols.Protocol):
125136 StreamWriter.drain() must wait for _drain_helper() coroutine.
126137 """
127138
128- def __init__ (self , loop = None ):
139+ def __init__ (self , loop = None , * , _asyncio_internal = False ):
129140 if loop is None :
130141 self ._loop = events .get_event_loop ()
131142 else :
132143 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 )
133153 self ._paused = False
134154 self ._drain_waiter = None
135155 self ._connection_lost = False
@@ -191,8 +211,9 @@ class StreamReaderProtocol(FlowControlMixin, protocols.Protocol):
191211
192212 _source_traceback = None
193213
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 )
196217 if stream_reader is not None :
197218 self ._stream_reader_wr = weakref .ref (stream_reader ,
198219 self ._on_reader_gc )
@@ -253,7 +274,8 @@ def connection_made(self, transport):
253274 if self ._client_connected_cb is not None :
254275 self ._stream_writer = StreamWriter (transport , self ,
255276 reader ,
256- self ._loop )
277+ self ._loop ,
278+ _asyncio_internal = True )
257279 res = self ._client_connected_cb (reader ,
258280 self ._stream_writer )
259281 if coroutines .iscoroutine (res ):
@@ -311,7 +333,13 @@ class StreamWriter:
311333 directly.
312334 """
313335
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 )
315343 self ._transport = transport
316344 self ._protocol = protocol
317345 # drain() expects that the reader has an exception() method
@@ -388,7 +416,14 @@ class StreamReader:
388416
389417 _source_traceback = None
390418
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+
392427 # The line length limit is a security feature;
393428 # it also doubles as half the buffer limit.
394429
0 commit comments