[Zope] Newbie - passing a list to an External Method
Dylan Reinhardt
zope@dylanreinhardt.com
22 Apr 2003 08:48:20 -0700
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
>