RE: [Zope-dev] ZFormulator review...
-----Original Message----- From: Chris McDonough [mailto:chrism@digicool.com]
I'm working on a product that does a similar thing (except the object is a "font manager"). I'd be very interested to see how you're doing it Martijn...
Here's what I do: def initialize(context): # Add the scheduler to the Zope root, and make it undeletable. # I know, this is an extreme hack. But supplying a patch for # OFS/Application.py is just not practical. # We also add a hook to the Product object, so we can make # the scheduler object removable again when this Product is deleted. app = context._ProductContext__app # Don't you love private name mangling if not hasattr(app, 'Scheduler'): oScheduler = ZScheduler.ZScheduler() app._setObject('Scheduler', oScheduler) prod = context._ProductContext__prod setattr(prod, 'manage_beforeDelete', beforeDeleteHook()) get_transaction().note('Added Scheduler') get_transaction().commit() if 'Scheduler' not in app._reserved_names: app._reserved_names = app._reserved_names + ('Scheduler',) # initialize ZEvent objects context.registerClass( ZEvent.OneTimeZEvent, permission = 'Add ZEvent', constructors = ( ZEvent.manage_addOneTimeZEventForm, ZEvent.manage_addOneTimeZEvent), icon = 'www/OneTimeZEvent.gif') class beforeDeleteHook(Persistent): """ Make sure that the Scheduler object can be deleted This should be persistent.... """ def __call__(self, prod, products): app = products.aq_parent.aq_parent rn = list(app._reserved_names) try: rn.remove('Scheduler') app._reserved_names = tuple(rn) except ValueError: pass The beforeDeleteHook object makes sure that if you _manually_ delete the ZScheduler Product in the management interface, the protection on the Scheduler object is removed. As this code is removed when you delete the actual Product subdir from the filesystem this does not get executed when you uninstall your Product that way. -- Martijn Pieters, Software Engineer | Digital Creations http://www.digicool.com | Creators of Zope http://www.zope.org | mailto:mj@digicool.com ICQ: 4532236 | PGP: http://wwwkeys.nl.pgp.net:11371/pks/lookup?op=get&search=0xA8A32149 -------------------------------------------
participants (1)
-
Martijn Pieters