mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
#25485: Add context manager support to Telnet class.
Patch by Stéphane Wirtel.
This commit is contained in:
parent
37f5421954
commit
4f09806e66
5 changed files with 35 additions and 5 deletions
|
@ -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
|
: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.
|
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::
|
.. seealso::
|
||||||
|
|
||||||
|
|
|
@ -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`.)
|
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
|
urllib.robotparser
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
|
|
@ -637,6 +637,12 @@ class Telnet:
|
||||||
raise EOFError
|
raise EOFError
|
||||||
return (-1, None, text)
|
return (-1, None, text)
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, type, value, traceback):
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
"""Test program for telnetlib.
|
"""Test program for telnetlib.
|
||||||
|
@ -660,11 +666,10 @@ def test():
|
||||||
port = int(portstr)
|
port = int(portstr)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
port = socket.getservbyname(portstr, 'tcp')
|
port = socket.getservbyname(portstr, 'tcp')
|
||||||
tn = Telnet()
|
with Telnet() as tn:
|
||||||
tn.set_debuglevel(debuglevel)
|
tn.set_debuglevel(debuglevel)
|
||||||
tn.open(host, port, timeout=0.5)
|
tn.open(host, port, timeout=0.5)
|
||||||
tn.interact()
|
tn.interact()
|
||||||
tn.close()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test()
|
test()
|
||||||
|
|
|
@ -42,6 +42,11 @@ class GeneralTests(TestCase):
|
||||||
telnet = telnetlib.Telnet(HOST, self.port)
|
telnet = telnetlib.Telnet(HOST, self.port)
|
||||||
telnet.sock.close()
|
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):
|
def testTimeoutDefault(self):
|
||||||
self.assertTrue(socket.getdefaulttimeout() is None)
|
self.assertTrue(socket.getdefaulttimeout() is None)
|
||||||
socket.setdefaulttimeout(30)
|
socket.setdefaulttimeout(30)
|
||||||
|
|
|
@ -10,6 +10,8 @@ Release date: XXXX-XX-XX
|
||||||
Core and Builtins
|
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
|
- Issue #24097: Fixed crash in object.__reduce__() if slot name is freed inside
|
||||||
__getattr__.
|
__getattr__.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue