Still same bug even with email ver. 1.2
Sheila King
usenet at thinkspot.net
Sun Mar 17 15:44:46 EST 2002
[reference link, for those just now joining this discussion:
http://mail.python.org/pipermail/python-list/2002-March/093191.html
]
OK, I got the latest email module from the CVS. I installed it. I ran the
tests for the module. Everything tested out fine.
I now eagerly get out my code from last night, that was causing the
'int' has no attribute .lower
error, and run it, hoping for different results.
No good. Same results. :(
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Message.py", line 285,
in get
name = name.lower()
AttributeError: 'int' object has no attribute 'lower'
Here is all the data and code necessary for you to run this test, also:
### main program file
### parsertest.py
from cStringIO import StringIO
from SmartParser import SmartParser
import sys, traceback
try:
f = open('problem_multipart_virus.txt', 'r')
fp = StringIO(f.read())
parserobj = SmartParser()
msg = parserobj.parse(fp)
count = 0
print "msg.get_params() = ", msg.get_params()
if msg.preamble:
print "preamble = ", preamble
if msg.epilogue:
print "epilogue = ", epilogue
print "payload = ", msg.get_payload()
print "now walking parts:"
count = 0
for part in msg.walk():
print "part ", count, " = ", part
count += 1
except:
exc, val, tb = sys.exc_info()
f = open('err.txt', 'w')
traceback.print_exception(exc, val, tb, file=sys.stdout)
### class file
### SmartParser.py
from email.Parser import Parser
import email
print "starting init of SmartParser"
print "email.__version__ = ", email.__version__
class SmartParser(Parser):
def _parsebody(self, container, fp):
print "\n*** beginning SmartParser._parsebody() ***"
boundary = container.get_boundary()
print "type = ", container.get_type()
isdigest = (container.get_type() == 'multipart/digest')
if container.is_multipart():
print "multipart"
if boundary:
preamble = epilogue = None
separator = '--' + boundary
payload = fp.read()
start = payload.find(separator)
if start < 0:
container.add_payload(fp.getvalue())
if start > 0:
preamble = payload[0:start]
start += len(separator) + 1 + isdigest
terminator = payload.find('\n' + separator + '--', start)
if terminator < 0:
terminator = len(payload)
if terminator + len(separator) + 3 < len(payload):
epilogue = payload[terminator + len(separator) + 3:]
if isdigest:
separator += '\n\n'
else:
separator += '\n'
parts = payload[start:terminator].split('\n' + separator)
print "parts = ", str(parts)
for part in parts:
msgobj = self.parsestr(part)
container.preamble = preamble
container.epilogue = epilogue
container.add_payload(msgobj)
print "*** end SmartParser._parsebody ***\n"
### data file
### problem_multipart_virus.txt
Received: from aol.com (adsl-63393.turboline.skynet.be [217.136.119.161])
by excalibur.skynet.be (8.11.6/8.11.6/Skynet-OUT-2.16) with SMTP id
fBJ8Iu829963
for <webmaster at leonbergerdatabase.com>; Wed, 19 Dec 2001 09:18:56 +0100
(MET)
(envelope-from <removed at infonie.be>)
Date: Wed, 19 Dec 2001 09:18:56 +0100 (MET)
Message-Id: <200112190818.fBJ8Iu829963 at excalibur.skynet.be>
From: "John Doe" <_removed at infonie.be>
To: webmaster at leonbergerdatabase.com
Subject: Re:
MIME-Version: 1.0
Content-Type: multipart/related;
type="multipart/alternative";
boundary="====_ABC1234567890DEF_===="
X-Priority: 3
X-MSMail-Priority: Normal
X-Unsent: 1
--====_ABC1234567890DEF_====
Content-Type: multipart/alternative;
boundary="====_ABC0987654321DEF_===="
--====_ABC0987654321DEF_====
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<HTML><HEAD></HEAD><BODY bgColor=3D#ffffff>
<iframe src=3Dcid:EA4DMGBP9p height=3D0 width=3D0>
</iframe></BODY></HTML>
--====_ABC0987654321DEF_====--
--====_ABC1234567890DEF_====
Content-Type: audio/x-wav;
name="stuff.MP3.pif"
Content-Transfer-Encoding: base64
Content-ID: <EA4DMGBP9p>
TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAA8AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAAAoxs1SbKejAWynowFsp6MBF7uvAWinowHvu60BbqejAYS4qQF2p6MBhLin
WHAA/kVwAPw2cAD+KXAA+BxwAPz2cAD+GQAAAAAAAP4BAAAAAAAAAAAAAAAAAAD8QgAAAAAAAAAA
/l/9D/3yCg==
--====_ABC1234567890DEF_====
### results file
### output.txt
starting init of SmartParser
email.__version__ = 1.2
*** beginning SmartParser._parsebody() ***
type = multipart/related
parts = ['Content-Type: multipart/alternative;\n\t
boundary="====_ABC0987654321DEF_===="\n\n--====_ABC0987654321DEF_====\nContent-Type:
text/html;\n \t charset="iso-8859-1"\nContent-Transfer-Encoding:
quoted-printable\n\n\n<HTML><HEAD></HEAD><BODY bgColor=3D#ffffff>\n<iframe
src=3Dcid:EA4DMGBP9p height=3D0
width=3D0>\n</iframe></BODY></HTML>\n--====_ABC0987654321DEF_====--\n',
'Content-Type: audio/x-wav;\n\t
name="stuff.MP3.pif"\nContent-Transfer-Encoding: base64\nContent-ID:
<EA4DMGBP9p>\n\nTVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA8AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v\nZGUuDQ0KJAAAAAAAAAAoxs1SbKejAWynowFsp6MBF7uvAWinowHvu60BbqejAYS4qQF2p6MBhLin\nWHAA/kVwAPw2cAD+KXAA+BxwAPz2cAD+GQAAAAAAAP4BAAAAAAAAAAAAAAAAAAD8QgAAAAAAAAAA\n/l/9D/3yCg==\n',
'\n']
*** beginning SmartParser._parsebody() ***
type = multipart/alternative
parts = ['Content-Type: text/html;\n \t
charset="iso-8859-1"\nContent-Transfer-Encoding:
quoted-printable\n\n\n<HTML><HEAD></HEAD><BODY bgColor=3D#ffffff>\n<iframe
src=3Dcid:EA4DMGBP9p height=3D0 width=3D0>\n</iframe></BODY></HTML>']
*** beginning SmartParser._parsebody() ***
type = text/html
*** end SmartParser._parsebody ***
*** beginning SmartParser._parsebody() ***
type = audio/x-wav
*** beginning SmartParser._parsebody() ***
type = None
*** end SmartParser._parsebody ***
msg.get_params() = [('multipart/related', ''), ('type',
'multipart/alternative'), ('boundary', '====_ABC1234567890DEF_====')]
payload = [<email.Message.Message instance at 0x00805430>,
<email.Message.Message instance at 0x00805300>, <email.Message.Message
instance at 0x008069C0>]
now walking parts:
part 0 = Traceback (most recent call last):
File "parsertest.py", line 20, in ?
print "part ", count, " = ", part
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Message.py", line 73, in
__str__
return self.as_string(unixfrom=1)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Message.py", line 83, in
as_string
g(self, unixfrom=unixfrom)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Generator.py", line 79,
in __call__
self._write(msg)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Generator.py", line 100,
in _write
self._dispatch(msg)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Generator.py", line 130,
in _dispatch
meth(msg)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Generator.py", line 246,
in _handle_multipart
g(part, unixfrom=0)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Generator.py", line 79,
in __call__
self._write(msg)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Generator.py", line 100,
in _write
self._dispatch(msg)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Generator.py", line 130,
in _dispatch
meth(msg)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Generator.py", line 243,
in _handle_multipart
for part in msg.get_payload():
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Message.py", line 222,
in __getitem__
return self.get(name)
File "E:\PYTHON\PYTHON22\Lib\site-packages\email\Message.py", line 285,
in get
name = name.lower()
AttributeError: 'int' object has no attribute 'lower'
Notice that if I change the following lines in the parsetest.py file
count = 0
for part in msg.walk():
print "part ", count, " = ", part
count += 1
to
count = 0
for part in msg.walk():
print "count = ", count
count += 1
That the code then runs fine without generating an error. So, I am able to
parse the message into parts, I am able to walk the parts. I am only
getting an error when I try to print a string representation of the part.
:(
What should I try next ????
--
Sheila King
http://www.thinkspot.net/sheila/
http://www.k12groups.org/
More information about the Python-list
mailing list