From 1ebc45d96354cdc5b76e57d2ded17502e882b8aa Mon Sep 17 00:00:00 2001 From: John Goerzen Date: Mon, 3 Mar 2008 08:22:44 -0600 Subject: [PATCH] Fix performance for SSL Added WrappedIMAP4_SSL class to help fix up performance of SSL Standard imaplib.py is really bad with this, since it reads one character at a time. Reported by Aaron Kaplan at http://lists.complete.org/offlineimap@complete.org/2008/01/msg00012.html.gz He wrote: I just noticed that the version of offlineimap I've been using (3.99.17) is well over four years old. How time flies. I haven't had any problems with it, but out of curiosity I decided to pull in 5.99.2 from the fedora repository. It turns out to take consistently over twice as long as the old version to sync the same account. Is this expected? He tracked it down at http://lists.complete.org/offlineimap@complete.org/2008/02/msg00012.html.gz The following changeset is the one responsible for the difference in speed I was noticing between the imaplib.py that was packaged with older versions of offlineimap and the one that comes with python: * /offlineimap/head: changeset 169 More optimizations -- this time fix readline() to not work character-by-character! --- offlineimap/imaplibutil.py | 8 ++++++++ offlineimap/imapserver.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/offlineimap/imaplibutil.py b/offlineimap/imaplibutil.py index 373d227..23ba654 100644 --- a/offlineimap/imaplibutil.py +++ b/offlineimap/imaplibutil.py @@ -103,6 +103,14 @@ def new_mesg(self, s, secs=None): tm = time.strftime('%M:%S', time.localtime(secs)) UIBase.getglobalui().debug('imap', ' %s.%02d %s' % (tm, (secs*100)%100, s)) +class WrappedIMAP4_SSL(IMAP4_SSL): + def open(self, host = '', port = IMAP4_SSL_PORT): + IMAP4_SSL.open(self, host, port) + self.sslobj = sslwrapper(self.sslobj) + + def readline(self): + return self.sslobj.readline() + def new_open(self, host = '', port = IMAP4_PORT): """Setup connection to remote server on "host:port" (default: localhost:standard IMAP4 port). diff --git a/offlineimap/imapserver.py b/offlineimap/imapserver.py index b96a404..6ca1fbc 100644 --- a/offlineimap/imapserver.py +++ b/offlineimap/imapserver.py @@ -51,7 +51,7 @@ class UsefulIMAP4(UsefulIMAPMixIn, imaplib.IMAP4): def open(self, host = '', port = imaplib.IMAP4_PORT): imaplibutil.new_open(self, host, port) -class UsefulIMAP4_SSL(UsefulIMAPMixIn, imaplib.IMAP4_SSL): +class UsefulIMAP4_SSL(UsefulIMAPMixIn, imaplibutil.WrappedIMAP4_SSL): def open(self, host = '', port = imaplib.IMAP4_SSL_PORT): imaplibutil.new_open_ssl(self, host, port)