summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/asyncio/protocols.py10
-rw-r--r--Lib/test/test_asyncio/test_events.py24
-rw-r--r--Lib/test/test_asyncio/test_protocols.py57
-rw-r--r--Misc/NEWS.d/next/Library/2018-12-04-12-17-08.bpo-35394.fuTVDk.rst1
4 files changed, 68 insertions, 24 deletions
diff --git a/Lib/asyncio/protocols.py b/Lib/asyncio/protocols.py
index a35ea82..69fa43e 100644
--- a/Lib/asyncio/protocols.py
+++ b/Lib/asyncio/protocols.py
@@ -16,6 +16,8 @@ class BaseProtocol:
write-only transport like write pipe
"""
+ __slots__ = ()
+
def connection_made(self, transport):
"""Called when a connection is made.
@@ -87,6 +89,8 @@ class Protocol(BaseProtocol):
* CL: connection_lost()
"""
+ __slots__ = ()
+
def data_received(self, data):
"""Called when some data is received.
@@ -130,6 +134,8 @@ class BufferedProtocol(BaseProtocol):
* CL: connection_lost()
"""
+ __slots__ = ()
+
def get_buffer(self, sizehint):
"""Called to allocate a new receive buffer.
@@ -160,6 +166,8 @@ class BufferedProtocol(BaseProtocol):
class DatagramProtocol(BaseProtocol):
"""Interface for datagram protocol."""
+ __slots__ = ()
+
def datagram_received(self, data, addr):
"""Called when some datagram is received."""
@@ -173,6 +181,8 @@ class DatagramProtocol(BaseProtocol):
class SubprocessProtocol(BaseProtocol):
"""Interface for protocol for subprocess calls."""
+ __slots__ = ()
+
def pipe_data_received(self, fd, data):
"""Called when the subprocess writes data into stdout/stderr pipe.
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
index b76cfb7..9311a20 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -2486,30 +2486,6 @@ class AbstractEventLoopTests(unittest.TestCase):
loop.close()
-class ProtocolsAbsTests(unittest.TestCase):
-
- def test_empty(self):
- f = mock.Mock()
- p = asyncio.Protocol()
- self.assertIsNone(p.connection_made(f))
- self.assertIsNone(p.connection_lost(f))
- self.assertIsNone(p.data_received(f))
- self.assertIsNone(p.eof_received())
-
- dp = asyncio.DatagramProtocol()
- self.assertIsNone(dp.connection_made(f))
- self.assertIsNone(dp.connection_lost(f))
- self.assertIsNone(dp.error_received(f))
- self.assertIsNone(dp.datagram_received(f, f))
-
- sp = asyncio.SubprocessProtocol()
- self.assertIsNone(sp.connection_made(f))
- self.assertIsNone(sp.connection_lost(f))
- self.assertIsNone(sp.pipe_data_received(1, f))
- self.assertIsNone(sp.pipe_connection_lost(1, f))
- self.assertIsNone(sp.process_exited())
-
-
class PolicyTests(unittest.TestCase):
def test_event_loop_policy(self):
diff --git a/Lib/test/test_asyncio/test_protocols.py b/Lib/test/test_asyncio/test_protocols.py
new file mode 100644
index 0000000..438111c
--- /dev/null
+++ b/Lib/test/test_asyncio/test_protocols.py
@@ -0,0 +1,57 @@
+import unittest
+from unittest import mock
+
+import asyncio
+
+
+class ProtocolsAbsTests(unittest.TestCase):
+
+ def test_base_protocol(self):
+ f = mock.Mock()
+ p = asyncio.BaseProtocol()
+ self.assertIsNone(p.connection_made(f))
+ self.assertIsNone(p.connection_lost(f))
+ self.assertIsNone(p.pause_writing())
+ self.assertIsNone(p.resume_writing())
+ self.assertFalse(hasattr(p, '__dict__'))
+
+ def test_protocol(self):
+ f = mock.Mock()
+ p = asyncio.Protocol()
+ self.assertIsNone(p.connection_made(f))
+ self.assertIsNone(p.connection_lost(f))
+ self.assertIsNone(p.data_received(f))
+ self.assertIsNone(p.eof_received())
+ self.assertIsNone(p.pause_writing())
+ self.assertIsNone(p.resume_writing())
+ self.assertFalse(hasattr(p, '__dict__'))
+
+ def test_buffered_protocol(self):
+ f = mock.Mock()
+ p = asyncio.BufferedProtocol()
+ self.assertIsNone(p.connection_made(f))
+ self.assertIsNone(p.connection_lost(f))
+ self.assertIsNone(p.get_buffer(100))
+ self.assertIsNone(p.buffer_updated(150))
+ self.assertIsNone(p.pause_writing())
+ self.assertIsNone(p.resume_writing())
+ self.assertFalse(hasattr(p, '__dict__'))
+
+ def test_datagram_protocol(self):
+ f = mock.Mock()
+ dp = asyncio.DatagramProtocol()
+ self.assertIsNone(dp.connection_made(f))
+ self.assertIsNone(dp.connection_lost(f))
+ self.assertIsNone(dp.error_received(f))
+ self.assertIsNone(dp.datagram_received(f, f))
+ self.assertFalse(hasattr(dp, '__dict__'))
+
+ def test_subprocess_protocol(self):
+ f = mock.Mock()
+ sp = asyncio.SubprocessProtocol()
+ self.assertIsNone(sp.connection_made(f))
+ self.assertIsNone(sp.connection_lost(f))
+ self.assertIsNone(sp.pipe_data_received(1, f))
+ self.assertIsNone(sp.pipe_connection_lost(1, f))
+ self.assertIsNone(sp.process_exited())
+ self.assertFalse(hasattr(sp, '__dict__'))
diff --git a/Misc/NEWS.d/next/Library/2018-12-04-12-17-08.bpo-35394.fuTVDk.rst b/Misc/NEWS.d/next/Library/2018-12-04-12-17-08.bpo-35394.fuTVDk.rst
new file mode 100644
index 0000000..ab630c0
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-12-04-12-17-08.bpo-35394.fuTVDk.rst
@@ -0,0 +1 @@
+Add empty slots to asyncio abstract protocols.