But maybe if __exit__ is called with an exception it should roll back. In any case it looks like your proposal could break existing code (e.g. code that uses `with` depending on its current behavior, using some other logic to decide whether to commit or not) and that feels difficult to overcome. Perhaps a new method or flag argument can be added to request that the transactions be automatically committed?
On Mon, Oct 30, 2017 at 10:20 AM, Drew <dwarwic...@gmail.com> wrote: > IMAP4.close closes the selected inbox and commits changes such as > deletions. It is not called on IMAP4.__exit__ (only logout is, which > doesn't call close in its call stack) however, so: > > with imaplib.IMAP4_SSL(...) as i: > ... > > would fail to commit those changes. close must be explicitly invoked i.e. > > with imaplib.IMAP4_SSL(...) as i: > ... > i.close() > > This is counterintuitive however, as the with statement is meant to > automatically clean up. Another programmer might come along and delete > i.close() because it seems unnecessary. Now changes aren't being committed > and the programmer doesn't realize it's because of this weird Python > idiosyncracy. > > Python IO such as open commits changes automatically, so I'm not sure why > IMAP4 doesn't and only logs out. > > _______________________________________________ > Python-ideas mailing list > Python-ideas@python.org > https://mail.python.org/mailman/listinfo/python-ideas > Code of Conduct: http://python.org/psf/codeofconduct/ > > -- --Guido van Rossum (python.org/~guido)
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/