diff options
author | R David Murray <rdmurray@bitdance.com> | 2015-11-28 12:24:52 -0500 |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2015-11-28 12:24:52 -0500 |
commit | 4f09806e662928c5524ab5d792d73297c50494b3 (patch) | |
tree | 74a8b786e7c43de01493bc1b84ad1e38367219c4 | |
parent | 37f54219543f9cb6ebf6a94cfe1eb402bc9b5580 (diff) | |
download | cpython-git-4f09806e662928c5524ab5d792d73297c50494b3.tar.gz |
#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 4040f72ee8..ce406ca2e6 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 172b253e43..fc32fb5926 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 72dabc76e0..b0863b1cbd 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 524bba37b3..23029e0c6f 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__. |