[Email-SIG] API thoughts
Steffen Daode Nurpmeso
sdaoden at googlemail.com
Tue Mar 8 15:32:51 CET 2011
Barry Warsaw wrote:
> I personally like this part of the API, and I think it's held up well under
> years of use.
:-)
msg[f] is indeed and really an elegant and understand-at-a-glance
way to access headers.
(Possible restriction: it would be graceful if it would return and
take a list.)
> Well, replace one header retaining original order is a bit difficult, but I've
> rarely had to do that.
[...]
> I think it could too, by adding an index argument to .replace_header(),
> and using .get_all() to get an ordered list of the headers of interest.
... and give me a way to also delete just one body of a field and
i'll be lucky.
Maybe simply 'Message._headers = {normalized_field = [bodies]}'?
But, why not .delete_all_of(0, 2, 5), realized by a walk in equal
spirit to .get_all().
(My thought was that a new Proxy class can be added very easily,
requiring only one new method in Message and
without affecting the remaining interface,
whatever status David's local EMAIL 6 branch is currently in and
whatever approach he will have chosen in the end.
Anyway, and unless i missed something, this is the current way:
def _bewitch_msg(self):
"""Handle Python 3.2.0/3.3a0 issue 11401 email/message.py error"""
if sys.hexversion > 0x030300A1 or sys.hexversion > 0x030200F1:
return
for f in self._msg:
had_repl = False
new_ab = []
ab = self._msg.get_all(f)
for b in ab:
if not len(b):
had_repl = True
b = ' '
new_ab.append(b)
if had_repl:
del self._msg[f]
for b in new_ab:
self._msg[f] = b
At best the very same could be achieved (faster and with smaller
memory footprint):
for p in self._msg.proxy_iter():
for (idx, body) in p:
if not len(body):
p[idx] = ' '
)
More information about the Email-SIG
mailing list