[PATCH 0/13] Reintegrate imaplib2 and IDLE, again

Ethan ethan.glasser.camp at gmail.com
Mon Feb 7 16:11:33 GMT 2011


On Mon, Feb 7, 2011 at 6:35 AM, Sebastian Spaeth <Sebastian at sspaeth.de> wrote:
>
> On Sun,  6 Feb 2011 11:58:54 -0500, Ethan Glasser-Camp <ethan at betacantrips.com> wrote:
> > - Patch 5: Remove WrappedIMAP4_SSL.read(). This overridden method
> >   seemed to be built to interact with imaplib, but with imaplib2,
> >   it prevents SSL from working. We seem to be OK without it...
>
> Hi there,
>
> cool work. I will try it out when I have some time. Just one comment on
> the imaplib.read() implementation (because I had asked John why we
> override this very function):
>
> IMAP4_SSL.readline() implements a VERY inefficient solution, it reads
> one char at a time, and copies all those fragments together to full
> strings. It really sucks! That's why we have a custom _read_upto()
> function which reads (I believe around 4kb) in one go, and buffers the
> rest that we don't need for our readline(). That is why we also need to
> override read(), so we get data that we have in that buffer first before
> actually reading in new data.

imaplib2 doesn't define or use any method called readline(), as far as
I can tell. See for yourself:

ethan at jonah-hex:~$ curl -s
http://sydney.edu.au/engineering/it/~piers/python/imaplib2 | head
#!/usr/bin/env python

"""Threaded IMAP4 client.

Based on RFC 2060 and original imaplib module.

Public classes:   IMAP4
                  IMAP4_SSL
                  IMAP4_stream

ethan at jonah-hex:~$ curl -s
http://sydney.edu.au/engineering/it/~piers/python/imaplib2 | grep
readline
ethan at jonah-hex:~$

> So, while it would be possible to ditch _read_upto(), read(), and
> .readline() for the SSL case (but just ditching read() and keeping
> readline() wouldnt work!), we would get the performance penalty that
> this implementation overcomes.

Since imaplib2 doesn't define or use readline or _read_upto, and we
don't call it directly ourselves, we should be able to delete them all
without a problem. When I sent the patch, I hadn't yet grepped the
codebase for use of these methods, so wasn't sure if they were being
used somewhere.

Ethan




More information about the OfflineIMAP-project mailing list