[Email-SIG] invertability and idempotence

R. David Murray rdmurray at bitdance.com
Thu Oct 22 00:58:42 CEST 2009


On Mon, 19 Oct 2009 at 15:39, Andrew McNamara wrote:
>> Just to ramble a little longer, it's been argued that we should give
>> up on idempotency, but I'm not convinced.  I think people want to see
>> an email message they throw into the system come out the other end as
>> closely as possible (well, /exactly/ for well-formed messages).
>
> I, for one, would be disappointed if we lost idempotency. If people want
> a use-case, think of SpamBayes, where we read the message, do our best
> to analyse it, then insert a header or two. If this mangled messages,
> the email module would be nearly useless to SB.

You are referring here to invertability, rather than idempotence.

But it turns out that idempotence does have a meaning in the context
of the email module, so I think I need to remove 'depreciated' from
my glossary[1] entry for it, and explain what it means in the context
of the email module.

For background, see issue 7119[2].

Here's what I propose: _invertability_ applies to the data path
into the parser and out of the generator.  That is:

     generate(parse(msg)) == msg

should be true whenever possible.

On the other hand, when _constructing_ a message, sometimes not all data
is filled in (in the example above, it is the MIME boundary marker).
In that case, it is important (I think, please discuss :) that generating
the message maintain _idempotency_: once you have generated the message,
then if you have not further mutated the message, generating the message
again should produce the _same_ output.  That is:

     generate(msg) == generate(msg)

even though the state of msg may change after the _first_ generate call.

--David

[1] http://wiki.python.org/moin/Email%20SIG/Glossary
[2] http://bugs.python.org/issue7119


More information about the Email-SIG mailing list