diff options
author | R David Murray <rdmurray@bitdance.com> | 2015-11-28 17:24:52 (GMT) |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2015-11-28 17:24:52 (GMT) |
commit | 4f09806e662928c5524ab5d792d73297c50494b3 (patch) | |
tree | 74a8b786e7c43de01493bc1b84ad1e38367219c4 | |
parent | 37f54219543f9cb6ebf6a94cfe1eb402bc9b5580 (diff) | |
download | cpython-4f09806e662928c5524ab5d792d73297c50494b3.zip cpython-4f09806e662928c5524ab5d792d73297c50494b3.tar.gz cpython-4f09806e662928c5524ab5d792d73297c50494b3.tar.bz2 |
#25485: Add context manager support to Telnet class.
Patch by Stéphane Wirtel.
-rw-r--r-- | Doc/library/telnetlib.rst | 11 | ||||
-rw-r--r-- | Doc/whatsnew/3.6.rst | 7 | ||||
-rw-r--r-- | Lib/telnetlib.py | 15 | ||||
-rw-r--r-- | Lib/test/test_telnetlib.py | 5 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
5 files changed, 35 insertions, 5 deletions
diff --git a/Doc/library/telnetlib.rst b/Doc/library/telnetlib.rst index 4040f72..ce406ca 100644 --- a/Doc/library/telnetlib.rst +++ b/Doc/library/telnetlib.rst @@ -43,6 +43,17 @@ Character), EL (Erase Line), GA (Go Ahead), SB (Subnegotiation Begin). :exc:`EOFError` when the end of the connection is read, because they can return an empty string for other reasons. See the individual descriptions below. + A :class:`Telnet` object is a context manager and can be used in a + :keyword:`with` statement. When the :keyword:`with` block ends, the + :meth:`close` method is called:: + + >>> from telnetlib import Telnet + >>> with Telnet('localhost', 23) as tn: + ... tn.interact() + ... + + .. versionchanged:: 3.6 Context manager support added + .. seealso:: diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst index 172b253..fc32fb5 100644 --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -125,6 +125,13 @@ Previously, names of properties and slots which were not yet created on an instance were excluded. (Contributed by Martin Panter in :issue:`25590`.) +telnetlib +--------- + +:class:`~telnetlib.Telnet` is now a context manager (contributed by +Stéphane Wirtel in :issue:`25485`). + + urllib.robotparser ------------------ diff --git a/Lib/telnetlib.py b/Lib/telnetlib.py index 72dabc7..b0863b1 100644 --- a/Lib/telnetlib.py +++ b/Lib/telnetlib.py @@ -637,6 +637,12 @@ class Telnet: raise EOFError return (-1, None, text) + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.close() + def test(): """Test program for telnetlib. @@ -660,11 +666,10 @@ def test(): port = int(portstr) except ValueError: port = socket.getservbyname(portstr, 'tcp') - tn = Telnet() - tn.set_debuglevel(debuglevel) - tn.open(host, port, timeout=0.5) - tn.interact() - tn.close() + with Telnet() as tn: + tn.set_debuglevel(debuglevel) + tn.open(host, port, timeout=0.5) + tn.interact() if __name__ == '__main__': test() diff --git a/Lib/test/test_telnetlib.py b/Lib/test/test_telnetlib.py index 524bba3..23029e0 100644 --- a/Lib/test/test_telnetlib.py +++ b/Lib/test/test_telnetlib.py @@ -42,6 +42,11 @@ class GeneralTests(TestCase): telnet = telnetlib.Telnet(HOST, self.port) telnet.sock.close() + def testContextManager(self): + with telnetlib.Telnet(HOST, self.port) as tn: + self.assertIsNotNone(tn.get_socket()) + self.assertIsNone(tn.get_socket()) + def testTimeoutDefault(self): self.assertTrue(socket.getdefaulttimeout() is None) socket.setdefaulttimeout(30) @@ -10,6 +10,8 @@ Release date: XXXX-XX-XX Core and Builtins ----------------- +- Issue #25485: telnetlib.Telnet is now a context manager. + - Issue #24097: Fixed crash in object.__reduce__() if slot name is freed inside __getattr__. |