The module below works using the python compiler class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): print self.data x = Testclass() def createdata(): import __main__ __main__.x.setdata(10, 20, 30) __main__.x.updateLog(2) __main__.x.display()
createdata() [10,20,31]
However if I try to add it as an External Method( id= createdata) it doesn't seem to work. I've tried to call it using <dtml-var/call createdata> without success. Any suggestions what I do wrong. I am grateful for all comments, Espen
Espen, The files that external methods actually live in are not Python modules, like normal Python modules. Though I haven't tried your example, it's likely that your reference to __main__ is confusing the external method machinery. Additionally, the output of "print" doesn't go to the remote browser, it instead goes to the console. You need to return a value to the caller for it to be displayed on the remote browser. Try instead (as an example): class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): print self.data def createdata(): x = Testclass() x.setdata(10, 20, 30) x.updatedata(2) return x.display() ----- Original Message ----- From: "Espen Sorbye Frederiksen" <ceeesf@cee.hw.ac.uk> To: <zope-dev@zope.org> Sent: Tuesday, January 23, 2001 5:52 PM Subject: [Zope-dev] "Problem" using External Method
The module below works using the python compiler class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): print self.data
x = Testclass() def createdata(): import __main__ __main__.x.setdata(10, 20, 30) __main__.x.updateLog(2) __main__.x.display()
createdata() [10,20,31]
However if I try to add it as an External Method( id= createdata) it doesn't seem to work. I've tried to call it using <dtml-var/call createdata> without success. Any suggestions what I do wrong. I am grateful for all comments,
Espen
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Ooops, replace "print self.data" with "return self.data" in the display method of my Testclass. ----- Original Message ----- From: "Chris McDonough" <chrism@digicool.com> To: "Espen Sorbye Frederiksen" <ceeesf@cee.hw.ac.uk>; <zope-dev@zope.org> Sent: Tuesday, January 23, 2001 6:46 PM Subject: Re: [Zope-dev] "Problem" using External Method
Espen,
The files that external methods actually live in are not Python modules, like normal Python modules. Though I haven't tried your example, it's likely that your reference to __main__ is confusing the external method machinery. Additionally, the output of "print" doesn't go to the remote browser, it instead goes to the console. You need to return a value to the caller for it to be displayed on the remote browser.
Try instead (as an example):
class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): print self.data
def createdata(): x = Testclass() x.setdata(10, 20, 30) x.updatedata(2) return x.display()
----- Original Message ----- From: "Espen Sorbye Frederiksen" <ceeesf@cee.hw.ac.uk> To: <zope-dev@zope.org> Sent: Tuesday, January 23, 2001 5:52 PM Subject: [Zope-dev] "Problem" using External Method
The module below works using the python compiler class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): print self.data
x = Testclass() def createdata(): import __main__ __main__.x.setdata(10, 20, 30) __main__.x.updateLog(2) __main__.x.display()
createdata() [10,20,31]
However if I try to add it as an External Method( id= createdata) it doesn't seem to work. I've tried to call it using <dtml-var/call createdata> without success. Any suggestions what I do wrong. I am grateful for all comments,
Espen
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
The problem occur when I try to split up the function as shown below. I would like to store the data list, update it if nessesary and return it when appropriate. Am I making it unessesary complex when I use the class? Is there maybe a way to declare the data list global within the module? Or is there another, possibly different, way to do this? class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): return self.data x = Testclass() def createdata(var1, var2, var3): import __main__ x.setdata(var1, var2, var3) def update(index): import __main__ x.updatedata(index) def returndata(): import __main__ return x.display() Thank you for your assistance so far. Hope you have time to answer my problem, Espen On Tue, 23 Jan 2001 18:46:21 -0500 Chris McDonough <chrism@digicool.com> wrote:
Espen,
The files that external methods actually live in are not Python modules, like normal Python modules. Though I haven't tried your example, it's likely that your reference to __main__ is confusing the external method machinery. Additionally, the output of "print" doesn't go to the remote browser, it instead goes to the console. You need to return a value to the caller for it to be displayed on the remote browser.
Try instead (as an example):
class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): print self.data
def createdata(): x = Testclass() x.setdata(10, 20, 30) x.updatedata(2) return x.display()
----- Original Message ----- From: "Espen Sorbye Frederiksen" <ceeesf@cee.hw.ac.uk> To: <zope-dev@zope.org> Sent: Tuesday, January 23, 2001 5:52 PM Subject: [Zope-dev] "Problem" using External Method
The module below works using the python compiler class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): print self.data
x = Testclass() def createdata(): import __main__ __main__.x.setdata(10, 20, 30) __main__.x.updateLog(2) __main__.x.display()
createdata() [10,20,31]
However if I try to add it as an External Method( id= createdata) it doesn't seem to work. I've tried to call it using <dtml-var/call createdata> without success. Any suggestions what I do wrong. I am grateful for all comments,
Espen
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
-- Espen S. Frederiksen Vocalist Manifold Kapellmester Gambrinus Heriot-Watt University ceeesf@cee.hw.ac.uk
"Espen S. Frederiksen" wrote:
The problem occur when I try to split up the function as shown below. I would like to store the data list, update it if nessesary and return it when appropriate. Am I making it unessesary complex when I use the class? Is there maybe a way to declare the data list global within the module? Or is there another, possibly different, way to do this?
Take out all the "import __main__" statements and you should be fine. Python lets you access two namespaces at once: the "local" namespace and the "global" namespace. Were it not for the global namespace, you would need to do something like "import __main__". But since globals are there, everything available at the module level is also available at the function level. Shane
class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): return self.data
x = Testclass()
def createdata(var1, var2, var3): import __main__ x.setdata(var1, var2, var3)
def update(index): import __main__ x.updatedata(index)
def returndata(): import __main__ return x.display()
Take out all the "import __main__" statements and you should be fine.
Python lets you access two namespaces at once: the "local" namespace and the "global" namespace. Were it not for the global namespace, you would need to do something like "import __main__". But since globals are there, everything available at the module level is also available at the function level.
Shane
I did what you suggested, but I am still a bit stuck. Maybe I call them wrong in my code. I use the call below but get an error. <dtml-call expr="createdata('test1','test2','test3')"> <dtml-var expr="returndata()"> Error Type: AttributeError Error Value: data any suggestions what I do wrong, Espen
class Testclass: def setdata(self,val1,val2,val3): self.data = [val1,val2,val3] def updatedata(self, index): self.data[index] = self.data[index]+1 def display(self): return self.data
x = Testclass()
def createdata(var1, var2, var3): x.setdata(var1, var2, var3)
def update(index): x.updatedata(index)
def returndata(): return x.display()
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
On Wed, 24 Jan 2001, Espen Sorbye Frederiksen wrote:
I did what you suggested, but I am still a bit stuck. Maybe I call them wrong in my code. I use the call below but get an error.
<dtml-call expr="createdata('test1','test2','test3')"> <dtml-var expr="returndata()">
Error Type: AttributeError Error Value: data
any suggestions what I do wrong,
I suggest you run Zope in "-D" mode so you can see tracebacks easily. They can pinpoint the exact source of problems like this. Shane
participants (4)
-
Chris McDonough -
Espen S. Frederiksen -
Espen Sorbye Frederiksen -
Shane Hathaway