mirror of https://github.com/python/cpython
Issue 11291: poplib suppresses errors on QUIT.
This commit is contained in:
parent
103a6d6cd6
commit
95bcb93041
|
@ -250,15 +250,18 @@ class POP3:
|
||||||
|
|
||||||
def quit(self):
|
def quit(self):
|
||||||
"""Signoff: commit changes on server, unlock mailbox, close connection."""
|
"""Signoff: commit changes on server, unlock mailbox, close connection."""
|
||||||
try:
|
|
||||||
resp = self._shortcmd('QUIT')
|
resp = self._shortcmd('QUIT')
|
||||||
except error_proto as val:
|
self.close()
|
||||||
resp = val
|
|
||||||
self.file.close()
|
|
||||||
self.sock.close()
|
|
||||||
del self.file, self.sock
|
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
"""Close the connection without assuming anything about it."""
|
||||||
|
if self.file is not None:
|
||||||
|
self.file.close()
|
||||||
|
if self.sock is not None:
|
||||||
|
self.sock.close()
|
||||||
|
self.file = self.sock = None
|
||||||
|
|
||||||
#__del__ = quit
|
#__del__ = quit
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -108,6 +108,10 @@ class DummyPOP3Handler(asynchat.async_chat):
|
||||||
def cmd_apop(self, arg):
|
def cmd_apop(self, arg):
|
||||||
self.push('+OK done nothing.')
|
self.push('+OK done nothing.')
|
||||||
|
|
||||||
|
def cmd_quit(self, arg):
|
||||||
|
self.push('+OK closing.')
|
||||||
|
self.close_when_done()
|
||||||
|
|
||||||
|
|
||||||
class DummyPOP3Server(asyncore.dispatcher, threading.Thread):
|
class DummyPOP3Server(asyncore.dispatcher, threading.Thread):
|
||||||
|
|
||||||
|
@ -165,10 +169,10 @@ class TestPOP3Class(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.server = DummyPOP3Server((HOST, PORT))
|
self.server = DummyPOP3Server((HOST, PORT))
|
||||||
self.server.start()
|
self.server.start()
|
||||||
self.client = poplib.POP3(self.server.host, self.server.port)
|
self.client = poplib.POP3(self.server.host, self.server.port, timeout=3)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.client.quit()
|
self.client.close()
|
||||||
self.server.stop()
|
self.server.stop()
|
||||||
|
|
||||||
def test_getwelcome(self):
|
def test_getwelcome(self):
|
||||||
|
@ -228,6 +232,12 @@ class TestPOP3Class(TestCase):
|
||||||
self.client.uidl()
|
self.client.uidl()
|
||||||
self.client.uidl('foo')
|
self.client.uidl('foo')
|
||||||
|
|
||||||
|
def test_quit(self):
|
||||||
|
resp = self.client.quit()
|
||||||
|
self.assertTrue(resp)
|
||||||
|
self.assertIsNone(self.client.sock)
|
||||||
|
self.assertIsNone(self.client.file)
|
||||||
|
|
||||||
|
|
||||||
SUPPORTS_SSL = False
|
SUPPORTS_SSL = False
|
||||||
if hasattr(poplib, 'POP3_SSL'):
|
if hasattr(poplib, 'POP3_SSL'):
|
||||||
|
@ -274,6 +284,7 @@ if hasattr(poplib, 'POP3_SSL'):
|
||||||
else:
|
else:
|
||||||
DummyPOP3Handler.handle_read(self)
|
DummyPOP3Handler.handle_read(self)
|
||||||
|
|
||||||
|
|
||||||
class TestPOP3_SSLClass(TestPOP3Class):
|
class TestPOP3_SSLClass(TestPOP3Class):
|
||||||
# repeat previous tests by using poplib.POP3_SSL
|
# repeat previous tests by using poplib.POP3_SSL
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue 11291: poplib.POP no longer suppresses errors on quit().
|
||||||
|
|
||||||
- Issue 11177: asyncore's create_socket() arguments can now be omitted.
|
- Issue 11177: asyncore's create_socket() arguments can now be omitted.
|
||||||
|
|
||||||
- Issue #6064: Add a ``daemon`` keyword argument to the threading.Thread
|
- Issue #6064: Add a ``daemon`` keyword argument to the threading.Thread
|
||||||
|
|
Loading…
Reference in New Issue