bump imaplib2 from v2.50 to v2.51
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
parent
7601583a72
commit
91d089641b
@ -17,9 +17,9 @@ Public functions: Internaldate2Time
|
|||||||
__all__ = ("IMAP4", "IMAP4_SSL", "IMAP4_stream",
|
__all__ = ("IMAP4", "IMAP4_SSL", "IMAP4_stream",
|
||||||
"Internaldate2Time", "ParseFlags", "Time2Internaldate")
|
"Internaldate2Time", "ParseFlags", "Time2Internaldate")
|
||||||
|
|
||||||
__version__ = "2.50"
|
__version__ = "2.51"
|
||||||
__release__ = "2"
|
__release__ = "2"
|
||||||
__revision__ = "50"
|
__revision__ = "51"
|
||||||
__credits__ = """
|
__credits__ = """
|
||||||
Authentication code contributed by Donn Cave <donn@u.washington.edu> June 1998.
|
Authentication code contributed by Donn Cave <donn@u.washington.edu> June 1998.
|
||||||
String method conversion by ESR, February 2001.
|
String method conversion by ESR, February 2001.
|
||||||
@ -65,7 +65,7 @@ if bytes != str:
|
|||||||
else:
|
else:
|
||||||
import Queue as queue
|
import Queue as queue
|
||||||
string_types = basestring
|
string_types = basestring
|
||||||
|
threading.TIMEOUT_MAX = 9223372036854.0
|
||||||
|
|
||||||
select_module = select
|
select_module = select
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ class Request(object):
|
|||||||
def get_response(self, exc_fmt=None):
|
def get_response(self, exc_fmt=None):
|
||||||
self.callback = None
|
self.callback = None
|
||||||
if __debug__: self.parent._log(3, '%s:%s.ready.wait' % (self.name, self.tag))
|
if __debug__: self.parent._log(3, '%s:%s.ready.wait' % (self.name, self.tag))
|
||||||
self.ready.wait(sys.float_info.max)
|
self.ready.wait(threading.TIMEOUT_MAX)
|
||||||
|
|
||||||
if self.aborted is not None:
|
if self.aborted is not None:
|
||||||
typ, val = self.aborted
|
typ, val = self.aborted
|
||||||
@ -329,6 +329,7 @@ class IMAP4(object):
|
|||||||
|
|
||||||
self.compressor = None # COMPRESS/DEFLATE if not None
|
self.compressor = None # COMPRESS/DEFLATE if not None
|
||||||
self.decompressor = None
|
self.decompressor = None
|
||||||
|
self._tls_established = False
|
||||||
|
|
||||||
# Create unique tag for this session,
|
# Create unique tag for this session,
|
||||||
# and compile tagged response matcher.
|
# and compile tagged response matcher.
|
||||||
@ -390,7 +391,7 @@ class IMAP4(object):
|
|||||||
# request and store CAPABILITY response.
|
# request and store CAPABILITY response.
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.welcome = self._request_push(tag='continuation').get_response('IMAP4 protocol error: %s')[1]
|
self.welcome = self._request_push(name='welcome', tag='continuation').get_response('IMAP4 protocol error: %s')[1]
|
||||||
|
|
||||||
if self._get_untagged_response('PREAUTH'):
|
if self._get_untagged_response('PREAUTH'):
|
||||||
self.state = AUTH
|
self.state = AUTH
|
||||||
@ -478,10 +479,6 @@ class IMAP4(object):
|
|||||||
|
|
||||||
def ssl_wrap_socket(self):
|
def ssl_wrap_socket(self):
|
||||||
|
|
||||||
# Allow sending of keep-alive messages - seems to prevent some servers
|
|
||||||
# from closing SSL, leading to deadlocks.
|
|
||||||
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import ssl
|
import ssl
|
||||||
|
|
||||||
@ -525,13 +522,17 @@ class IMAP4(object):
|
|||||||
self.read_fd = self.sock.fileno()
|
self.read_fd = self.sock.fileno()
|
||||||
except ImportError:
|
except ImportError:
|
||||||
# No ssl module, and socket.ssl has no fileno(), and does not allow certificate verification
|
# No ssl module, and socket.ssl has no fileno(), and does not allow certificate verification
|
||||||
raise socket.sslerror("imaplib2 SSL mode does not work without ssl module")
|
raise socket.sslerror("imaplib SSL mode does not work without ssl module")
|
||||||
|
|
||||||
if self.cert_verify_cb is not None:
|
if self.cert_verify_cb is not None:
|
||||||
cert_err = self.cert_verify_cb(self.sock.getpeercert(), self.host)
|
cert_err = self.cert_verify_cb(self.sock.getpeercert(), self.host)
|
||||||
if cert_err:
|
if cert_err:
|
||||||
raise ssl_exc(cert_err)
|
raise ssl_exc(cert_err)
|
||||||
|
|
||||||
|
# Allow sending of keep-alive messages - seems to prevent some servers
|
||||||
|
# from closing SSL, leading to deadlocks.
|
||||||
|
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def start_compressing(self):
|
def start_compressing(self):
|
||||||
@ -567,7 +568,7 @@ class IMAP4(object):
|
|||||||
data += self.compressor.flush(zlib.Z_SYNC_FLUSH)
|
data += self.compressor.flush(zlib.Z_SYNC_FLUSH)
|
||||||
|
|
||||||
if bytes != str:
|
if bytes != str:
|
||||||
data = bytes(data, 'utf8')
|
data = bytes(data, 'ASCII')
|
||||||
|
|
||||||
self.sock.sendall(data)
|
self.sock.sendall(data)
|
||||||
|
|
||||||
@ -576,7 +577,14 @@ class IMAP4(object):
|
|||||||
"""shutdown()
|
"""shutdown()
|
||||||
Close I/O established in "open"."""
|
Close I/O established in "open"."""
|
||||||
|
|
||||||
self.sock.close()
|
try:
|
||||||
|
self.sock.shutdown(socket.SHUT_RDWR)
|
||||||
|
except OSError as e:
|
||||||
|
# The server might already have closed the connection
|
||||||
|
if e.errno != errno.ENOTCONN:
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
self.sock.close()
|
||||||
|
|
||||||
|
|
||||||
def socket(self):
|
def socket(self):
|
||||||
@ -914,7 +922,7 @@ class IMAP4(object):
|
|||||||
def _CRAM_MD5_AUTH(self, challenge):
|
def _CRAM_MD5_AUTH(self, challenge):
|
||||||
"""Authobject to use with CRAM-MD5 authentication."""
|
"""Authobject to use with CRAM-MD5 authentication."""
|
||||||
import hmac
|
import hmac
|
||||||
pwd = (self.password.encode('utf-8') if isinstance(self.password, str)
|
pwd = (self.password.encode('ASCII') if isinstance(self.password, str)
|
||||||
else self.password)
|
else self.password)
|
||||||
return self.user + " " + hmac.HMAC(pwd, challenge, 'md5').hexdigest()
|
return self.user + " " + hmac.HMAC(pwd, challenge, 'md5').hexdigest()
|
||||||
|
|
||||||
@ -1109,7 +1117,7 @@ class IMAP4(object):
|
|||||||
if name not in self.capabilities:
|
if name not in self.capabilities:
|
||||||
raise self.abort('TLS not supported by server')
|
raise self.abort('TLS not supported by server')
|
||||||
|
|
||||||
if hasattr(self, '_tls_established') and self._tls_established:
|
if self._tls_established:
|
||||||
raise self.abort('TLS session already established')
|
raise self.abort('TLS session already established')
|
||||||
|
|
||||||
# Must now shutdown reader thread after next response, and restart after changing read_fd
|
# Must now shutdown reader thread after next response, and restart after changing read_fd
|
||||||
@ -1272,7 +1280,10 @@ class IMAP4(object):
|
|||||||
|
|
||||||
bye = self._get_untagged_response('BYE', leave=True)
|
bye = self._get_untagged_response('BYE', leave=True)
|
||||||
if bye:
|
if bye:
|
||||||
raise self.abort(bye[-1])
|
if str != bytes:
|
||||||
|
raise self.abort(bye[-1].decode('ASCII', 'replace'))
|
||||||
|
else:
|
||||||
|
raise self.abort(bye[-1])
|
||||||
|
|
||||||
|
|
||||||
def _checkquote(self, arg):
|
def _checkquote(self, arg):
|
||||||
@ -1333,7 +1344,7 @@ class IMAP4(object):
|
|||||||
self.commands_lock.release()
|
self.commands_lock.release()
|
||||||
if need_event:
|
if need_event:
|
||||||
if __debug__: self._log(3, 'sync command %s waiting for empty commands Q' % name)
|
if __debug__: self._log(3, 'sync command %s waiting for empty commands Q' % name)
|
||||||
self.state_change_free.wait(sys.float_info.max)
|
self.state_change_free.wait(threading.TIMEOUT_MAX)
|
||||||
if __debug__: self._log(3, 'sync command %s proceeding' % name)
|
if __debug__: self._log(3, 'sync command %s proceeding' % name)
|
||||||
|
|
||||||
if self.state not in Commands[name][CMD_VAL_STATES]:
|
if self.state not in Commands[name][CMD_VAL_STATES]:
|
||||||
@ -1384,7 +1395,7 @@ class IMAP4(object):
|
|||||||
return rqb
|
return rqb
|
||||||
|
|
||||||
# Must setup continuation expectancy *before* ouq.put
|
# Must setup continuation expectancy *before* ouq.put
|
||||||
crqb = self._request_push(tag='continuation')
|
crqb = self._request_push(name=name, tag='continuation')
|
||||||
|
|
||||||
self.ouq.put(rqb)
|
self.ouq.put(rqb)
|
||||||
|
|
||||||
@ -1409,7 +1420,7 @@ class IMAP4(object):
|
|||||||
|
|
||||||
if literator is not None:
|
if literator is not None:
|
||||||
# Need new request for next continuation response
|
# Need new request for next continuation response
|
||||||
crqb = self._request_push(tag='continuation')
|
crqb = self._request_push(name=name, tag='continuation')
|
||||||
|
|
||||||
if __debug__: self._log(4, 'write literal size %s' % len(literal))
|
if __debug__: self._log(4, 'write literal size %s' % len(literal))
|
||||||
crqb.data = '%s%s' % (literal, CRLF)
|
crqb.data = '%s%s' % (literal, CRLF)
|
||||||
@ -1449,7 +1460,10 @@ class IMAP4(object):
|
|||||||
return
|
return
|
||||||
bye = self._get_untagged_response('BYE', leave=True)
|
bye = self._get_untagged_response('BYE', leave=True)
|
||||||
if bye:
|
if bye:
|
||||||
rqb.abort(self.abort, bye[-1])
|
if str != bytes:
|
||||||
|
rqb.abort(self.abort, bye[-1].decode('ASCII', 'replace'))
|
||||||
|
else:
|
||||||
|
rqb.abort(self.abort, bye[-1])
|
||||||
return
|
return
|
||||||
typ, dat = response
|
typ, dat = response
|
||||||
if typ == 'BAD':
|
if typ == 'BAD':
|
||||||
@ -2084,7 +2098,7 @@ class IMAP4_SSL(IMAP4):
|
|||||||
"""IMAP4 client class over SSL connection
|
"""IMAP4 client class over SSL connection
|
||||||
|
|
||||||
Instantiate with:
|
Instantiate with:
|
||||||
IMAP4_SSL(host=None, port=None, keyfile=None, certfile=None, ca_certs=None, cert_verify_cb=None, ssl_version="ssl23", debug=None, debug_file=None, identifier=None, timeout=None, tls_level="tls_compat")
|
IMAP4_SSL(host=None, port=None, keyfile=None, certfile=None, ca_certs=None, cert_verify_cb=None, ssl_version="ssl23", debug=None, debug_file=None, identifier=None, timeout=None, debug_buf_lvl=None, tls_level="tls_compat")
|
||||||
|
|
||||||
host - host's name (default: localhost);
|
host - host's name (default: localhost);
|
||||||
port - port number (default: standard IMAP4 SSL port);
|
port - port number (default: standard IMAP4 SSL port);
|
||||||
|
Loading…
Reference in New Issue
Block a user