On 8/10/2010 2:25 AM, Chris Rebert wrote:
On Tue, Aug 10, 2010 at 2:01 AM,<tinn...@isbd.co.uk>  wrote:
Tim Roberts<t...@probo.com>  wrote:
tinn...@isbd.co.uk wrote:

I'm using the python mailbox class in a script that processes incoming
mail and delivers it to various mbox format mailboxes.  It appears
that, although I am calling the lock method on the destination before
writing to the mbox and calling unlock afterwards the locking isn't
working correctly.
...
So it seems that python's mailbox class locking isn't playing nicely
with mutt's mailbox locking whereas postfix's locking does work
correctly.

Correct.  The "dest.flush()" method creates a temporary file, copies the
entire modified mailbox into it, removed the original file, and renames the
temp file into place.

Yes, I just took a look at the mailbox.py code and it does exactly
that which of course screws up just about any normal MUA looking at
the mbox.  Grrrrrr!


The Postfix MDA, like most MDAs, just opens the existing file and appends
the new data to it.

Has anyone seen this problem before, and/or do I need to anything more
than the following for the locking to work correctly:-

It's not the locking.  It's the flush mechanism.  The mbox class doesn't
know that the ONLY thing you did was an append.  You might have modified
other messages in the middle.  If you want to do an append, you'll need to
write your own subclass of mbox.

OK, thanks.  In reality I can probably just use straightforward file
reading and writing as the *only* thing I will ever be doing is to
append a message to a mailbox file.

I think there should be a big warning in the mailbox documentation to
this effect as doing it the way that Python's mailbox class does it
will break all sorts of things.  There should maybe be a specific
'append' method.

File a documentation and/or library bug:
http://bugs.python.org/

Cheers,
Chris

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to