mailbox.mbox not locking mbox properly

Chris Rebert clp2 at rebertia.com
Tue Aug 10 05:25:02 EDT 2010


On Tue, Aug 10, 2010 at 2:01 AM,  <tinnews at isbd.co.uk> wrote:
> Tim Roberts <timr at probo.com> wrote:
>> tinnews at 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



More information about the Python-list mailing list