[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
>