Re: [Zope-dev] multiple monkeypatches
On Thu, Jun 06, 2002 at 09:24:58AM -0400, Casey Duncan wrote: > > I am going to experiment with ExternalEditor to see if I can dynamically > patch manage_main reliably rather than replacing it outright. If I work > out a reliable scheme, I'll write a how-to on it. Then maybe other > products can then use the same technique. Couldn't there be a plugin mechanism for the management interface ? I can see three sort of plugins : Top plugin : * will be displayed once at the top of the ZMI (below tabs) e.g. ZShell Line plugin : * will be displayed once for each object (on each line) e.g. ExternalEditor Bottom plugin : * will be displayed once on the buttons line e.g. Your_product_of_choice Then every product would just have to register itself as a ZMITopPlugin, ZMILinePlugin, or ZMIBottomPlugin, or both. then the ZMI (main.dtml in fact) would just have to loop for each list of registered plugins whenever its needed : once at the top, once for each line listing objects, and once for the bottom. and if ZMILinePlugins could set a filter to be called only for some metatypes this would be really cool ! Any comment ? BTW Casey and others, if you need some help then I'd be pleased to do whatever I can, with a small amount of free time though... > The problem is somewhat easier to solve for methods since you can detect > whether they have already been replaced (with func_globals) and you can > do the old "run my code and call the old one" trick. agreed, unfortunately... bye, Jerome Alet ___ Zope-Dev maillist - [EMAIL PROTECTED] 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 )
Re: [Zope-dev] multiple monkeypatches
I really think the only way to make this work is to design the products with this in mind. Perhaps by developing a defacto standard for doing monkey patches nicely. I am going to experiment with ExternalEditor to see if I can dynamically patch manage_main reliably rather than replacing it outright. If I work out a reliable scheme, I'll write a how-to on it. Then maybe other products can then use the same technique. The problem is somewhat easier to solve for methods since you can detect whether they have already been replaced (with func_globals) and you can do the old "run my code and call the old one" trick. -Casey On Wed, 2002-06-05 at 18:37, Jim Penny wrote: > On Wed, Jun 05, 2002 at 10:51:45PM +0100, Adrian Hungate wrote: > > PatchKit handles this for you (If you ask it to). > > > > :) > > > > Adrian... > > I am not sure that I understand. I need to be able to do a > "cumulative monkey patch". Suppose that there were two independent > products which both modified manage_main (without loss of generality, > say ExternalEditor and ZShell). Most people use neither, some people > use one, some use the other, and some use both. > > It is the case of people using both that I am interested in. To do > this appears to me to require that I have access to the DTML form of > any previous monkey patches to manage_main so that I can decide > if I can safely patch the running version to meet the needs of both > products. > > Is this possible? > > If both products were using PatchKit would it be possible? How about > if only one used PatchKit? > > Thanks > > Jim > > > > -- > > > ___ > Zope-Dev maillist - [EMAIL PROTECTED] > 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 - [EMAIL PROTECTED] 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 )
Re: [Zope-dev] multiple monkeypatches
PatchKit allows the replacement of entire methods, with the ability to backup the original when the first replacement is done - This means that the patches are (Or at least can be) refreshable. PatchKit does not allow for small changes to be made within a method (Such as a DTML/HTML object) but there is a patch that puts the ZMI in the ZODB. Adrian... -- Adrian Hungate EMail: [EMAIL PROTECTED] Web: http://www.haqa.co.uk Computers are like air conditioners -- they stop working properly if you open WINDOWS - Original Message - From: "Jim Penny" <[EMAIL PROTECTED]> To: "Adrian Hungate" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]> Sent: Wednesday, June 05, 2002 11:37 PM Subject: Re: [Zope-dev] multiple monkeypatches > On Wed, Jun 05, 2002 at 10:51:45PM +0100, Adrian Hungate wrote: > > PatchKit handles this for you (If you ask it to). > > > > :) > > > > Adrian... > > I am not sure that I understand. I need to be able to do a > "cumulative monkey patch". Suppose that there were two independent > products which both modified manage_main (without loss of generality, > say ExternalEditor and ZShell). Most people use neither, some people > use one, some use the other, and some use both. > > It is the case of people using both that I am interested in. To do > this appears to me to require that I have access to the DTML form of > any previous monkey patches to manage_main so that I can decide > if I can safely patch the running version to meet the needs of both > products. > > Is this possible? > > If both products were using PatchKit would it be possible? How about > if only one used PatchKit? > > Thanks > > Jim > > > > -- > ___ Zope-Dev maillist - [EMAIL PROTECTED] 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 )
Re: [Zope-dev] multiple monkeypatches
On Wed, Jun 05, 2002 at 10:51:45PM +0100, Adrian Hungate wrote: > PatchKit handles this for you (If you ask it to). > > :) > > Adrian... I am not sure that I understand. I need to be able to do a "cumulative monkey patch". Suppose that there were two independent products which both modified manage_main (without loss of generality, say ExternalEditor and ZShell). Most people use neither, some people use one, some use the other, and some use both. It is the case of people using both that I am interested in. To do this appears to me to require that I have access to the DTML form of any previous monkey patches to manage_main so that I can decide if I can safely patch the running version to meet the needs of both products. Is this possible? If both products were using PatchKit would it be possible? How about if only one used PatchKit? Thanks Jim > > -- ___ Zope-Dev maillist - [EMAIL PROTECTED] 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 )
Re: [Zope-dev] multiple monkeypatches
PatchKit handles this for you (If you ask it to). :) Adrian... -- Adrian Hungate EMail: [EMAIL PROTECTED] Web: http://www.haqa.co.uk Computers are like air conditioners -- they stop working properly if you open WINDOWS - Original Message - From: "Florent Guillaume" <[EMAIL PROTECTED]> Newsgroups: local.lists.zope.zope-dev To: <[EMAIL PROTECTED]> Sent: Wednesday, June 05, 2002 6:15 PM Subject: Re: [Zope-dev] multiple monkeypatches > Jim Penny <[EMAIL PROTECTED]> wrote: > > Is there a safe way to handle multiple monkeypatches? > > Without an existing framework (I haven't looked at Adrian's PatchKit), > it's the same old problem as "intercepting interrupts" on good old 8-bit > computers. You just have to save and call the previous one. > > What I do is this: > > # 1. define my method > def manage_main(...): > # ... > ... > res = self._myproduct_old_manage_main(...) > ... > return res > # 2. put the old version in a private variable > ObjectManager._myproduct_old_manage_main = ObjectManager.manage_main > # 3. patch > ObjectManager.manage_main = manage_main > > If you want to play nice with refresh, you have to be a bit more > careful, because then you don't want to do step 2. A simple test for > absence of the _myproduct_old_manage_main attribute before doing it is > enough. > > Florent > > -- > Florent Guillaume, Nuxeo (Paris, France) > +33 1 40 33 79 87 http://nuxeo.com mailto:[EMAIL PROTECTED] > > > ___ > Zope-Dev maillist - [EMAIL PROTECTED] > 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 - [EMAIL PROTECTED] 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 )
Re: [Zope-dev] multiple monkeypatches
Hmm there is a patch for the PatchKit that puts the ZMI in the ZODB, is that what you need? :) >From the Doc String:- """ Zope Management Interface Style Sheet Patch == = = = = The patch adds a ZStyleSheet to the root of your Zope with its contents set to the contents of the standard manage_page_style.css and points the ZMI at it. It also adds two DTML Methods initially containing the default ZMI header and ZMI menu. Everything can then be modified using the ZMI. """ # $Id: ZMImanagePatch.py,v 1.1.1.1 2002/02/03 17:07:16 root Exp $ If this is not in the PatchKit you have, you can get it from my CVS at http://cvs.haqa.co.uk/viewcvs/Products/PatchKit (there is a tarball option there to, which should work). Adrian... -- Adrian Hungate EMail: [EMAIL PROTECTED] Web: http://www.haqa.co.uk Computers are like air conditioners -- they stop working properly if you open WINDOWS - Original Message - From: "Jerome Alet" <[EMAIL PROTECTED]> To: "Florent Guillaume" <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]> Sent: Wednesday, June 05, 2002 8:02 PM Subject: Re: [Zope-dev] multiple monkeypatches > On Wed, Jun 05, 2002 at 05:15:10PM +, Florent Guillaume wrote: > > Jim Penny <[EMAIL PROTECTED]> wrote: > > > Is there a safe way to handle multiple monkeypatches? > > > > Without an existing framework (I haven't looked at Adrian's PatchKit), > > it's the same old problem as "intercepting interrupts" on good old 8-bit > > computers. You just have to save and call the previous one. > > > > What I do is this: > > > > # 1. define my method > > def manage_main(...): > > # ... > > ... > > res = self._myproduct_old_manage_main(...) > > Yes, I remember ;-) > > except that what we want to patch there is the user interface > HTML code itself. I think parsing the HTML code to insert > some tags where needed would do it, but this seems > somewhat complicated to do for a simple thing like that. > > Would be fine if the main.dtml file would allow a plugin system... > > bye, > > Jerome Alet > > > > > ___ > Zope-Dev maillist - [EMAIL PROTECTED] > 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 - [EMAIL PROTECTED] 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 )
Re: [Zope-dev] multiple monkeypatches
On Wed, Jun 05, 2002 at 05:15:10PM +, Florent Guillaume wrote: > Jim Penny <[EMAIL PROTECTED]> wrote: > > Is there a safe way to handle multiple monkeypatches? > > Without an existing framework (I haven't looked at Adrian's PatchKit), > it's the same old problem as "intercepting interrupts" on good old 8-bit > computers. You just have to save and call the previous one. > > What I do is this: > > # 1. define my method > def manage_main(...): > # ... > ... > res = self._myproduct_old_manage_main(...) Yes, I remember ;-) except that what we want to patch there is the user interface HTML code itself. I think parsing the HTML code to insert some tags where needed would do it, but this seems somewhat complicated to do for a simple thing like that. Would be fine if the main.dtml file would allow a plugin system... bye, Jerome Alet ___ Zope-Dev maillist - [EMAIL PROTECTED] 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 )
Re: [Zope-dev] multiple monkeypatches
Jim Penny <[EMAIL PROTECTED]> wrote: > Is there a safe way to handle multiple monkeypatches? Without an existing framework (I haven't looked at Adrian's PatchKit), it's the same old problem as "intercepting interrupts" on good old 8-bit computers. You just have to save and call the previous one. What I do is this: # 1. define my method def manage_main(...): # ... ... res = self._myproduct_old_manage_main(...) ... return res # 2. put the old version in a private variable ObjectManager._myproduct_old_manage_main = ObjectManager.manage_main # 3. patch ObjectManager.manage_main = manage_main If you want to play nice with refresh, you have to be a bit more careful, because then you don't want to do step 2. A simple test for absence of the _myproduct_old_manage_main attribute before doing it is enough. Florent -- Florent Guillaume, Nuxeo (Paris, France) +33 1 40 33 79 87 http://nuxeo.com mailto:[EMAIL PROTECTED] ___ Zope-Dev maillist - [EMAIL PROTECTED] 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 )
Re: [Zope-dev] multiple monkeypatches
Look at my PatchKit product. It provides a framework that allows multiple patches to be applied to any combination of products. Drop me a line if you need the api clarified. Adrian... -- Adrian Hungate EMail: [EMAIL PROTECTED] Web: http://www.haqa.co.uk Computers are like air conditioners -- they stop working properly if you open WINDOWS - Original Message - From: "Jim Penny" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, June 04, 2002 10:09 PM Subject: [Zope-dev] multiple monkeypatches > Is there a safe way to handle multiple monkeypatches? > > Here is the problem. External editor monkeypatches > ObjectManager.manage_main. There are some other products that also > need to monkeypatch this object. > > For example, if Jerome Alet's Zshell were turned into a python product, > it would be natural for it to monkeypatch this same object. > > But, if it does so, whichever monkeypatch is applied last will destroy > the previous. Any ideas on a reasonably simple way to solve this > problem. > > Thanks > > Jim Penny > > > ___ > Zope-Dev maillist - [EMAIL PROTECTED] > 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 - [EMAIL PROTECTED] 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] multiple monkeypatches
Is there a safe way to handle multiple monkeypatches? Here is the problem. External editor monkeypatches ObjectManager.manage_main. There are some other products that also need to monkeypatch this object. For example, if Jerome Alet's Zshell were turned into a python product, it would be natural for it to monkeypatch this same object. But, if it does so, whichever monkeypatch is applied last will destroy the previous. Any ideas on a reasonably simple way to solve this problem. Thanks Jim Penny ___ Zope-Dev maillist - [EMAIL PROTECTED] 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 )