Skip to content

Commit 5bb1afb

Browse files
committed
asyncio: Add Transport.is_closing()
See python/asyncio#291 for details.
1 parent da32d26 commit 5bb1afb

11 files changed

+36
-14
lines changed

Lib/asyncio/base_subprocess.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ def __repr__(self):
8787
def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs):
8888
raise NotImplementedError
8989

90+
def is_closing(self):
91+
return self._closed
92+
9093
def close(self):
9194
if self._closed:
9295
return

Lib/asyncio/proactor_events.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ def __repr__(self):
6565
def _set_extra(self, sock):
6666
self._extra['pipe'] = sock
6767

68+
def is_closing(self):
69+
return self._closing
70+
6871
def close(self):
6972
if self._closing:
7073
return

Lib/asyncio/selector_events.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,9 @@ def __repr__(self):
556556
def abort(self):
557557
self._force_close(None)
558558

559+
def is_closing(self):
560+
return self._closing
561+
559562
def close(self):
560563
if self._closing:
561564
return

Lib/asyncio/sslproto.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,9 @@ def get_extra_info(self, name, default=None):
304304
"""Get optional transport information."""
305305
return self._ssl_protocol._get_extra_info(name, default)
306306

307+
def is_closing(self):
308+
return self._closed
309+
307310
def close(self):
308311
"""Close the transport.
309312

Lib/asyncio/streams.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ def drain(self):
302302
if exc is not None:
303303
raise exc
304304
if self._transport is not None:
305-
if self._transport._closing:
305+
if self._transport.is_closing():
306306
# Yield to the event loop so connection_lost() may be
307307
# called. Without this, _drain_helper() would return
308308
# immediately, and code that calls

Lib/asyncio/transports.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ def get_extra_info(self, name, default=None):
1919
"""Get optional transport information."""
2020
return self._extra.get(name, default)
2121

22+
def is_closing(self):
23+
"""Return True if the transport is closing or closed."""
24+
raise NotImplementedError
25+
2226
def close(self):
2327
"""Close the transport.
2428

Lib/asyncio/unix_events.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,9 @@ def pause_reading(self):
364364
def resume_reading(self):
365365
self._loop.add_reader(self._fileno, self._read_ready)
366366

367+
def is_closing(self):
368+
return self._closing
369+
367370
def close(self):
368371
if not self._closing:
369372
self._close(None)
@@ -548,6 +551,9 @@ def write_eof(self):
548551
self._loop.remove_reader(self._fileno)
549552
self._loop.call_soon(self._call_connection_lost, None)
550553

554+
def is_closing(self):
555+
return self._closing
556+
551557
def close(self):
552558
if self._pipe is not None and not self._closing:
553559
# write_eof is all what we needed to close the write pipe

Lib/test/test_asyncio/test_proactor_events.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ def test_close(self):
204204
tr.close()
205205
test_utils.run_briefly(self.loop)
206206
self.protocol.connection_lost.assert_called_with(None)
207-
self.assertTrue(tr._closing)
207+
self.assertTrue(tr.is_closing())
208208
self.assertEqual(tr._conn_lost, 1)
209209

210210
self.protocol.connection_lost.reset_mock()
@@ -298,7 +298,7 @@ def test_write_eof_write_pipe(self):
298298
self.loop, self.sock, self.protocol)
299299
self.assertTrue(tr.can_write_eof())
300300
tr.write_eof()
301-
self.assertTrue(tr._closing)
301+
self.assertTrue(tr.is_closing())
302302
self.loop._run_once()
303303
self.assertTrue(self.sock.close.called)
304304
tr.close()
@@ -309,7 +309,7 @@ def test_write_eof_buffer_write_pipe(self):
309309
tr._loop._proactor.send.return_value = f
310310
tr.write(b'data')
311311
tr.write_eof()
312-
self.assertTrue(tr._closing)
312+
self.assertTrue(tr.is_closing())
313313
self.assertFalse(self.sock.shutdown.called)
314314
tr._loop._proactor.send.assert_called_with(self.sock, b'data')
315315
f.set_result(4)

Lib/test/test_asyncio/test_selector_events.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,7 @@ def test_close(self):
698698
tr = self.create_transport()
699699
tr.close()
700700

701-
self.assertTrue(tr._closing)
701+
self.assertTrue(tr.is_closing())
702702
self.assertEqual(1, self.loop.remove_reader_count[7])
703703
self.protocol.connection_lost(None)
704704
self.assertEqual(tr._conn_lost, 1)
@@ -723,7 +723,7 @@ def test_force_close(self):
723723
self.loop.add_writer(7, mock.sentinel)
724724
tr._force_close(None)
725725

726-
self.assertTrue(tr._closing)
726+
self.assertTrue(tr.is_closing())
727727
self.assertEqual(tr._buffer, list_to_buffer())
728728
self.assertFalse(self.loop.readers)
729729
self.assertFalse(self.loop.writers)
@@ -1436,7 +1436,7 @@ def check_close(self):
14361436
tr = self._make_one()
14371437
tr.close()
14381438

1439-
self.assertTrue(tr._closing)
1439+
self.assertTrue(tr.is_closing())
14401440
self.assertEqual(1, self.loop.remove_reader_count[1])
14411441
self.assertEqual(tr._conn_lost, 1)
14421442

Lib/test/test_asyncio/test_subprocess.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def test_proc_exited(self):
6161
self.assertTrue(protocol.connection_lost.called)
6262
self.assertEqual(protocol.connection_lost.call_args[0], (None,))
6363

64-
self.assertFalse(transport._closed)
64+
self.assertFalse(transport.is_closing())
6565
self.assertIsNone(transport._loop)
6666
self.assertIsNone(transport._proc)
6767
self.assertIsNone(transport._protocol)

Lib/test/test_asyncio/test_unix_events.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ def test__close(self, m_read):
440440
tr = self.read_pipe_transport()
441441
err = object()
442442
tr._close(err)
443-
self.assertTrue(tr._closing)
443+
self.assertTrue(tr.is_closing())
444444
self.assertFalse(self.loop.readers)
445445
test_utils.run_briefly(self.loop)
446446
self.protocol.connection_lost.assert_called_with(err)
@@ -598,7 +598,7 @@ def test__read_ready(self):
598598
tr._read_ready()
599599
self.assertFalse(self.loop.readers)
600600
self.assertFalse(self.loop.writers)
601-
self.assertTrue(tr._closing)
601+
self.assertTrue(tr.is_closing())
602602
test_utils.run_briefly(self.loop)
603603
self.protocol.connection_lost.assert_called_with(None)
604604

@@ -658,7 +658,7 @@ def test__write_ready_err(self, m_write, m_logexc):
658658
self.assertFalse(self.loop.writers)
659659
self.assertFalse(self.loop.readers)
660660
self.assertEqual([], tr._buffer)
661-
self.assertTrue(tr._closing)
661+
self.assertTrue(tr.is_closing())
662662
m_logexc.assert_called_with(
663663
test_utils.MockPattern(
664664
'Fatal write error on pipe transport'
@@ -694,7 +694,7 @@ def test_abort(self, m_write):
694694
self.assertFalse(self.loop.readers)
695695
self.assertFalse(self.loop.writers)
696696
self.assertEqual([], tr._buffer)
697-
self.assertTrue(tr._closing)
697+
self.assertTrue(tr.is_closing())
698698
test_utils.run_briefly(self.loop)
699699
self.protocol.connection_lost.assert_called_with(None)
700700

@@ -743,7 +743,7 @@ def test_close_closing(self):
743743
def test_write_eof(self):
744744
tr = self.write_pipe_transport()
745745
tr.write_eof()
746-
self.assertTrue(tr._closing)
746+
self.assertTrue(tr.is_closing())
747747
self.assertFalse(self.loop.readers)
748748
test_utils.run_briefly(self.loop)
749749
self.protocol.connection_lost.assert_called_with(None)
@@ -752,7 +752,7 @@ def test_write_eof_pending(self):
752752
tr = self.write_pipe_transport()
753753
tr._buffer = [b'data']
754754
tr.write_eof()
755-
self.assertTrue(tr._closing)
755+
self.assertTrue(tr.is_closing())
756756
self.assertFalse(self.protocol.connection_lost.called)
757757

758758

0 commit comments

Comments
 (0)