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