'Subclassing' another product
I think I read somewhere that it was, from version 2.2 of Zope, possible to 'subclass' products. Is this just somebody janking my chain, or is it actually possible? If it is possible, would someone care to explain? Thanks. -Morten
Hi Morten, There are two ways to subclass products. You can use straightforward Python subclassing: e.g.,In your custom Product.. here is an example from Zwiff:
import Products.PythonMethod.Guarded
from Globals import HTMLFile, MessageDialog from App import Common
manage_addZwiffForm = HTMLFile('addForm',globals())
def manage_addZwiff(self, id, title, params, body, REQUEST=None): """Add A Zwiff to a folder .... just like PythonMethod.. """ it = Zwiff(id, title, params, body) self._setObject(id, it) return self.manage_main(self, REQUEST)
def handleMovieOutput(movie, RESPONSE):
fname = tempfile.mktemp()
movie.save(fname)
f = open(fname) s = f.read() f.close()
RESPONSE.setHeader('Content-type', 'application/x-shockwave-flash')
os.remove(fname)
return s
class Zwiff (Products.PythonMethod.PythonMethod.PythonMethod ):
meta_type = 'Zwiff'
def makeFunction(self, compile=0): from Products.PythonMethod.Guarded import GuardedBlock, safefuncs, theGuard if compile: self._checkCBlock(GuardedBlock) if self.errors: raise "Python Method Error", string.join(self.errors, '\n') return self._newfun(compile, {'$guard': theGuard}, __builtins__=mysafebin, _=safefuncs)
So the class Zwiff is a subclass of PythonMethod. Look at Zwiff for the full source: http://www.zope.org/Members/sspickle/Zwiff Or you can create a ZClass that subclasses from a 'base class'. To do this you've got to register the base class with the ZClass machinery (e.g., here is the code for ZCVSMixin that does this.... ZCVSMixin is a base class... CVSFolder is a full blown product that happens to be a subclass of ZCVSMixin... )
import ZCVSMixin import CVSFolder
__doc__ = ZCVSMixin.__doc__ __version__ = ZCVSMixin.__version__
def initialize(context): context.registerClass( CVSFolder.CVSFolder, constructors=(CVSFolder.manage_addCVSFolderForm, CVSFolder.manage_addCVSFolder), icon='fish.gif', ) context.registerBaseClass(ZCVSMixin.ZCVSMixin)
does that help? take care, -steve
[Steve Spicklemire] | does that help? Yep. Thanks & Cheers, Morten
participants (2)
-
morten@esol.no -
Steve Spicklemire