Updated bundled imaplib2 to 2.35:
- Fix for Gmail sending a BYE response after reading >100 messages in a session. - Includes fix for GitHub#15: patch was accepted upstream. Signed-off-by: Eygene Ryabinkin <rea@codelabs.ru>
This commit is contained in:
parent
1ef506655c
commit
2df5b716b5
@ -29,6 +29,10 @@ WIP (add new stuff for the next release)
|
|||||||
* [regression] pass folder names to the foldersort function,
|
* [regression] pass folder names to the foldersort function,
|
||||||
revert the documented behaviour
|
revert the documented behaviour
|
||||||
* Fix handling of zero-sized IMAP data items (GitHub#15).
|
* Fix handling of zero-sized IMAP data items (GitHub#15).
|
||||||
|
* Updated bundled imaplib2 to 2.35:
|
||||||
|
- fix for Gmail sending a BYE response after reading >100 messages
|
||||||
|
in a session;
|
||||||
|
- includes fix for GitHub#15: patch was accepted upstream.
|
||||||
|
|
||||||
OfflineIMAP v6.5.5-rc1 (2012-09-05)
|
OfflineIMAP v6.5.5-rc1 (2012-09-05)
|
||||||
===================================
|
===================================
|
||||||
|
@ -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.33"
|
__version__ = "2.35"
|
||||||
__release__ = "2"
|
__release__ = "2"
|
||||||
__revision__ = "33"
|
__revision__ = "35"
|
||||||
__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.
|
||||||
@ -40,7 +40,9 @@ Time2Internaldate() patch to match RFC2060 specification of English month names
|
|||||||
starttls() bug fixed with the help of Sebastian Spaeth <sebastian@sspaeth.de> April 2011.
|
starttls() bug fixed with the help of Sebastian Spaeth <sebastian@sspaeth.de> April 2011.
|
||||||
Threads now set the "daemon" flag (suggested by offlineimap-project) April 2011.
|
Threads now set the "daemon" flag (suggested by offlineimap-project) April 2011.
|
||||||
Single quoting introduced with the help of Vladimir Marek <vladimir.marek@oracle.com> August 2011.
|
Single quoting introduced with the help of Vladimir Marek <vladimir.marek@oracle.com> August 2011.
|
||||||
Support for specifying SSL version by Ryan Kavanagh <rak@debian.org> July 2013."""
|
Support for specifying SSL version by Ryan Kavanagh <rak@debian.org> July 2013.
|
||||||
|
Fix for gmail "read 0" error provided by Jim Greenleaf <james.a.greenleaf@gmail.com> August 2013.
|
||||||
|
Fix for offlineimap "indexerror: string index out of range" bug provided by Eygene Ryabinkin <rea@codelabs.ru> August 2013."""
|
||||||
__author__ = "Piers Lauder <piers@janeelix.com>"
|
__author__ = "Piers Lauder <piers@janeelix.com>"
|
||||||
__URL__ = "http://imaplib2.sourceforge.net"
|
__URL__ = "http://imaplib2.sourceforge.net"
|
||||||
__license__ = "Python License"
|
__license__ = "Python License"
|
||||||
@ -1331,7 +1333,7 @@ class IMAP4(object):
|
|||||||
self.ouq.put(rqb)
|
self.ouq.put(rqb)
|
||||||
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(tag='continuation')
|
||||||
|
|
||||||
self.ouq.put(rqb)
|
self.ouq.put(rqb)
|
||||||
@ -1373,8 +1375,8 @@ class IMAP4(object):
|
|||||||
|
|
||||||
# Called for non-callback commands
|
# Called for non-callback commands
|
||||||
|
|
||||||
typ, dat = rqb.get_response('command: %s => %%s' % rqb.name)
|
|
||||||
self._check_bye()
|
self._check_bye()
|
||||||
|
typ, dat = rqb.get_response('command: %s => %%s' % rqb.name)
|
||||||
if typ == 'BAD':
|
if typ == 'BAD':
|
||||||
if __debug__: self._print_log()
|
if __debug__: self._print_log()
|
||||||
raise self.error('%s command error: %s %s. Data: %.100s' % (rqb.name, typ, dat, rqb.data))
|
raise self.error('%s command error: %s %s. Data: %.100s' % (rqb.name, typ, dat, rqb.data))
|
||||||
@ -1903,11 +1905,12 @@ class IMAP4(object):
|
|||||||
if __debug__:
|
if __debug__:
|
||||||
|
|
||||||
def _init_debug(self, debug=None, debug_file=None, debug_buf_lvl=None):
|
def _init_debug(self, debug=None, debug_file=None, debug_buf_lvl=None):
|
||||||
|
self.debug_lock = threading.Lock()
|
||||||
|
|
||||||
self.debug = self._choose_nonull_or_dflt(0, debug, Debug)
|
self.debug = self._choose_nonull_or_dflt(0, debug, Debug)
|
||||||
self.debug_file = self._choose_nonull_or_dflt(sys.stderr, debug_file)
|
self.debug_file = self._choose_nonull_or_dflt(sys.stderr, debug_file)
|
||||||
self.debug_buf_lvl = self._choose_nonull_or_dflt(DFLT_DEBUG_BUF_LVL, debug_buf_lvl)
|
self.debug_buf_lvl = self._choose_nonull_or_dflt(DFLT_DEBUG_BUF_LVL, debug_buf_lvl)
|
||||||
|
|
||||||
self.debug_lock = threading.Lock()
|
|
||||||
self._cmd_log_len = 20
|
self._cmd_log_len = 20
|
||||||
self._cmd_log_idx = 0
|
self._cmd_log_idx = 0
|
||||||
self._cmd_log = {} # Last `_cmd_log_len' interactions
|
self._cmd_log = {} # Last `_cmd_log_len' interactions
|
||||||
@ -2111,6 +2114,7 @@ class IMAP4_stream(IMAP4):
|
|||||||
|
|
||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
|
|
||||||
|
if __debug__: self._log(0, 'opening stream from command "%s"' % self.command)
|
||||||
self._P = Popen(self.command, shell=True, stdin=PIPE, stdout=PIPE, close_fds=True)
|
self._P = Popen(self.command, shell=True, stdin=PIPE, stdout=PIPE, close_fds=True)
|
||||||
self.writefile, self.readfile = self._P.stdin, self._P.stdout
|
self.writefile, self.readfile = self._P.stdin, self._P.stdout
|
||||||
self.read_fd = self.readfile.fileno()
|
self.read_fd = self.readfile.fileno()
|
||||||
@ -2313,19 +2317,22 @@ if __name__ == '__main__':
|
|||||||
# To test: invoke either as 'python imaplib2.py [IMAP4_server_hostname]',
|
# To test: invoke either as 'python imaplib2.py [IMAP4_server_hostname]',
|
||||||
# or as 'python imaplib2.py -s "rsh IMAP4_server_hostname exec /etc/rimapd"'
|
# or as 'python imaplib2.py -s "rsh IMAP4_server_hostname exec /etc/rimapd"'
|
||||||
# or as 'python imaplib2.py -l "keyfile[:certfile]" [IMAP4_SSL_server_hostname]'
|
# or as 'python imaplib2.py -l "keyfile[:certfile]" [IMAP4_SSL_server_hostname]'
|
||||||
|
# Option "-i" tests that IDLE is interruptible
|
||||||
|
|
||||||
import getopt, getpass
|
import getopt, getpass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
optlist, args = getopt.getopt(sys.argv[1:], 'd:l:s:p:')
|
optlist, args = getopt.getopt(sys.argv[1:], 'd:il:s:p:')
|
||||||
except getopt.error, val:
|
except getopt.error, val:
|
||||||
optlist, args = (), ()
|
optlist, args = (), ()
|
||||||
|
|
||||||
debug, debug_buf_lvl, port, stream_command, keyfile, certfile = (None,)*6
|
debug, debug_buf_lvl, port, stream_command, keyfile, certfile, idle_intr = (None,)*7
|
||||||
for opt,val in optlist:
|
for opt,val in optlist:
|
||||||
if opt == '-d':
|
if opt == '-d':
|
||||||
debug = int(val)
|
debug = int(val)
|
||||||
debug_buf_lvl = debug - 1
|
debug_buf_lvl = debug - 1
|
||||||
|
elif opt == '-i':
|
||||||
|
idle_intr = 1
|
||||||
elif opt == '-l':
|
elif opt == '-l':
|
||||||
try:
|
try:
|
||||||
keyfile,certfile = val.split(':')
|
keyfile,certfile = val.split(':')
|
||||||
@ -2446,7 +2453,7 @@ if __name__ == '__main__':
|
|||||||
run('id', ())
|
run('id', ())
|
||||||
run('id', ('("name", "imaplib2")',))
|
run('id', ('("name", "imaplib2")',))
|
||||||
run('id', ("version", __version__, "os", os.uname()[0]))
|
run('id', ("version", __version__, "os", os.uname()[0]))
|
||||||
|
|
||||||
for cmd,args in test_seq2:
|
for cmd,args in test_seq2:
|
||||||
if (cmd,args) != ('uid', ('SEARCH', 'SUBJECT', 'IMAP4 test')):
|
if (cmd,args) != ('uid', ('SEARCH', 'SUBJECT', 'IMAP4 test')):
|
||||||
run(cmd, args)
|
run(cmd, args)
|
||||||
@ -2476,6 +2483,16 @@ if __name__ == '__main__':
|
|||||||
M._mesg('fetch %s => %s' % (num, `dat`))
|
M._mesg('fetch %s => %s' % (num, `dat`))
|
||||||
run('uid', ('STORE', num, 'FLAGS', '(\Deleted)'))
|
run('uid', ('STORE', num, 'FLAGS', '(\Deleted)'))
|
||||||
run('expunge', ())
|
run('expunge', ())
|
||||||
|
if idle_intr:
|
||||||
|
M._mesg('HIT CTRL-C to interrupt IDLE')
|
||||||
|
try:
|
||||||
|
run('idle', (99,), cb=False) # Synchronous, to test interruption of 'idle' by INTR
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
M._mesg('Thanks!')
|
||||||
|
M._mesg('')
|
||||||
|
raise
|
||||||
|
elif idle_intr:
|
||||||
|
M._mesg('chosen server does not report IDLE capability')
|
||||||
|
|
||||||
run('logout', (), cb=False)
|
run('logout', (), cb=False)
|
||||||
|
|
||||||
@ -2489,12 +2506,13 @@ if __name__ == '__main__':
|
|||||||
print 'All tests OK.'
|
print 'All tests OK.'
|
||||||
|
|
||||||
except:
|
except:
|
||||||
print 'Tests failed.'
|
if not idle_intr or not 'IDLE' in M.capabilities:
|
||||||
|
print 'Tests failed.'
|
||||||
|
|
||||||
if not debug:
|
if not debug:
|
||||||
print '''
|
print '''
|
||||||
If you would like to see debugging output,
|
If you would like to see debugging output,
|
||||||
try: %s -d5
|
try: %s -d5
|
||||||
''' % sys.argv[0]
|
''' % sys.argv[0]
|
||||||
|
|
||||||
raise
|
raise
|
||||||
|
Loading…
Reference in New Issue
Block a user