Re: [Zope] Newbie - passing a list to an External Method
Dylan, Thanks very much for the reply. AFAIK, there is absolutely no change made to lines before trying to use it, but I'll put a bit more detail in here, so someone can no doubt prove me wrong! I set the value of lines, passed to the external method, to be: ['Hello, this is my test pdf', 'This is still my test pdf.', 'Still here', 'and this is the end ..'] ( Just in case, this is done using a python script: lines=[] lines.append("Hello, this is my test pdf") lines.append("This is still my test pdf.") lines.append("Still here") lines.append("and this is the end ..") return lines ) If the code in the External Method is: ******************************************************************** #!/usr/bin/env python def run(fileID, lines): import sping.stringformat from sping.PDF import PDFCanvas from sping.PS import PSCanvas filename="c:/zopepdf/"+fileID canvas = PDFCanvas(size=(350,200), name=filename) y = 20 for line in lines: sping.stringformat.drawString(canvas, line, 10,y) y = y + 20 canvas.flush() canvas.save() return fileID ******************************************************************** Then I get the following error details: ==================================================================== Error Type AttributeError Error Value __getitem__ Traceback (most recent call last): File "C:\PROGRA~1\ZopeSite\lib\python\DocumentTemplate\DT_Try.py", line 149, in render_try_except result = render_blocks(self.section, md) File "C:\PROGRA~1\ZopeSite\lib\python\DocumentTemplate\DT_Let.py", line 75, in render else: d[name]=expr(md) File "C:\PROGRA~1\ZopeSite\lib\python\DocumentTemplate\DT_Util.py", line 159, in eval return eval(code, d) File "", line 2, in f File "C:\PROGRA~1\ZopeSite\lib\python\Products\ExternalMethod\ExternalMethod.py", line 198, in __call__ try: return apply(f,args,kw) File "C:\PROGRA~1\ZopeSite\Extensions\formatted-strings.py", line 21, in run from sping.PDF import PDFCanvas AttributeError: __getitem__ ==================================================================== Whereas, if the code in the External Method is: ******************************************************************** #!/usr/bin/env python def run(fileID, lines): import sping.stringformat from sping.PDF import PDFCanvas from sping.PS import PSCanvas filename="c:/zopepdf/"+fileID canvas = PDFCanvas(size=(350,200), name=filename) return lines ******************************************************************** then this returns the value of lines in the manner above. What am I doing wrong? TIA, Ashley From: Dylan Reinhardt <zope@dylanreinhardt.com> Reply-To: zope@dylanreinhardt.com To: Ashley Lloyd <ashleylloyd@hotmail.com> CC: zope@zope.org Subject: Re: [Zope] Newbie - passing a list to an External Method Date: 17 Apr 2003 10:11:17 -0700 On Thu, 2003-04-17 at 08:01, Ashley Lloyd wrote:
Error Type: AttributeError Error Value: __getitem__
This error is typical when the object you're trying to iterate over isn't a sequence. Most likely, something you've done on lines 2-27 has changed the value of lines to None. Look extra carefully at any and all assignments you make in the external method. In particular, it's possible you may have committed a common error with lists, ex: a = [1,2.3] b = a b = None # now the value of a is None! HTH, Dylan _________________________________________________________________ On the move? Get Hotmail on your mobile phone http://www.msn.co.uk/mobile
I'm not sure if I can explain _all_ of what you're seeing here... you seem to be having a different error than you were before and I don't have any experience with the sping module. But... do have something to recommend. Use: def run(self, fileID, lines): to define your external method. The first argument passed to an external method is the "self" object, a reference to the context from which the method was called. Give that a try and see if it helps. HTH, Dylan On Tue, 2003-04-22 at 02:01, Ashley Lloyd wrote:
Dylan,
Thanks very much for the reply.
AFAIK, there is absolutely no change made to lines before trying to use it, but I'll put a bit more detail in here, so someone can no doubt prove me wrong!
I set the value of lines, passed to the external method, to be: ['Hello, this is my test pdf', 'This is still my test pdf.', 'Still here', 'and this is the end ..']
( Just in case, this is done using a python script: lines=[] lines.append("Hello, this is my test pdf") lines.append("This is still my test pdf.") lines.append("Still here") lines.append("and this is the end ..") return lines )
If the code in the External Method is:
******************************************************************** #!/usr/bin/env python def run(fileID, lines):
import sping.stringformat from sping.PDF import PDFCanvas from sping.PS import PSCanvas
filename="c:/zopepdf/"+fileID canvas = PDFCanvas(size=(350,200), name=filename)
y = 20 for line in lines: sping.stringformat.drawString(canvas, line, 10,y) y = y + 20
canvas.flush() canvas.save() return fileID ******************************************************************** Then I get the following error details:
==================================================================== Error Type AttributeError Error Value __getitem__ Traceback (most recent call last): File "C:\PROGRA~1\ZopeSite\lib\python\DocumentTemplate\DT_Try.py", line 149, in render_try_except result = render_blocks(self.section, md) File "C:\PROGRA~1\ZopeSite\lib\python\DocumentTemplate\DT_Let.py", line 75, in render else: d[name]=expr(md) File "C:\PROGRA~1\ZopeSite\lib\python\DocumentTemplate\DT_Util.py", line 159, in eval return eval(code, d) File "", line 2, in f File "C:\PROGRA~1\ZopeSite\lib\python\Products\ExternalMethod\ExternalMethod.py", line 198, in __call__ try: return apply(f,args,kw) File "C:\PROGRA~1\ZopeSite\Extensions\formatted-strings.py", line 21, in run from sping.PDF import PDFCanvas AttributeError: __getitem__ ====================================================================
Whereas, if the code in the External Method is:
******************************************************************** #!/usr/bin/env python def run(fileID, lines):
import sping.stringformat from sping.PDF import PDFCanvas from sping.PS import PSCanvas
filename="c:/zopepdf/"+fileID canvas = PDFCanvas(size=(350,200), name=filename) return lines ********************************************************************
then this returns the value of lines in the manner above.
What am I doing wrong?
TIA,
Ashley
From: Dylan Reinhardt <zope@dylanreinhardt.com> Reply-To: zope@dylanreinhardt.com To: Ashley Lloyd <ashleylloyd@hotmail.com> CC: zope@zope.org Subject: Re: [Zope] Newbie - passing a list to an External Method Date: 17 Apr 2003 10:11:17 -0700
On Thu, 2003-04-17 at 08:01, Ashley Lloyd wrote:
Error Type: AttributeError Error Value: __getitem__
This error is typical when the object you're trying to iterate over isn't a sequence. Most likely, something you've done on lines 2-27 has changed the value of lines to None.
Look extra carefully at any and all assignments you make in the external method. In particular, it's possible you may have committed a common error with lists, ex:
a = [1,2.3] b = a b = None # now the value of a is None!
HTH,
Dylan
_________________________________________________________________ On the move? Get Hotmail on your mobile phone http://www.msn.co.uk/mobile
participants (2)
-
Ashley Lloyd -
Dylan Reinhardt