Getting REQUEST in product method by default
I am writing a Zope product that wraps a non-Zope Python class. I would like to mirror some of the methods of this class in the Zope wrapper class, but have them only accept the REQUEST and RESPONSE variables. For example, class MyClass: """ Normal class """ def getData(self, user, field): ... class ZMyClass(MyClass, Folder): """ Zope Folder subclass """ def getData(self, REQUEST, RESPONSE=None): ... validate REQUEST variables ... return MyClass.getData(REQUEST['user'], REQUEST['field']) I want to do this because I thought that I could then do a simple <dtml-var getData> to get the result of the ZMyClass.getData method, but this doesn't seem to work. I don't know how the innards of Zope work, but I thought that methods called in this way were always given the REQUEST varible. I keep getting REQUEST=None. Is it possible to do this? Kevin Smith
I am writing a Zope product that wraps a non-Zope Python class. I would like to mirror some of the methods of this class in the Zope wrapper class, but have them only accept the REQUEST and RESPONSE variables. For example,
class MyClass: """ Normal class """ def getData(self, user, field): ...
class ZMyClass(MyClass, Folder): """ Zope Folder subclass """ def getData(self, REQUEST, RESPONSE=None): ... validate REQUEST variables ... return MyClass.getData(REQUEST['user'], REQUEST['field'])
I want to do this because I thought that I could then do a simple
<dtml-var getData>
to get the result of the ZMyClass.getData method, but this doesn't seem to work. I don't know how the innards of Zope work, but I thought that methods called in this way were always given the REQUEST varible. I keep getting REQUEST=None. Is it possible to do this?
REQUEST / RESPONSE (or any method arguments) are only passed 'automatically' when a method is directly traversed to through the Web (or some other protocol). Note that as long as your ZMyClass supports Acquisition (which it would if it is a subclass of Folder), you can always get the request via acquisition. So your class would look like: class ZMyClass(MyClass, Folder): """ Zope Folder subclass """ def getData(self): REQUEST = self.REQUEST RESPONSE = REQUEST.RESPONSE ... validate REQUEST variables ... return MyClass.getData(REQUEST['user'], REQUEST['field']) This way you can use <dtml-var getData> without passing any arguments. Hope this helps! Brian Lloyd brian@zope.com Software Engineer 540.361.1716 Zope Corporation http://www.zope.com
participants (2)
-
Brian Lloyd -
Kevin Smith