[Zope-CMF] Re: monkey patching CMFCore.utils isn't working?!?
Florent Guillaume
fg at nuxeo.com
Fri Jun 2 20:08:09 EDT 2006
Tres Seaver wrote:
> Matt Hahnfeld wrote:
>> I am using Plone 2.1.2, w/ CMF 1.5.5. I'm having trouble using
>> the overridden _checkPermission function in 1.5.5 to handle proxy
>> roles on
>> a FSPythonScript. After hacking around, I've determined the best method
>> to repair this issue is to "backport" CMF 1.6.0's function and make
>> _checkPermission call SecurityManager's _checkPermission. I don't really
>> want to change the core libraries, so my idea was to do it as a monkey
>> patch.
>>
>> So, I added this monkey patch to one of my custom zope products:
>>
>> -----
>> from AccessControl import getSecurityManager
>>
>> def _checkPermission(permission, obj):
>> return getSecurityManager().checkPermission(permission, obj)
>>
>> import Products.CMFCore.utils
>> Products.CMFCore.utils._checkPermission = _checkPermission
>> -----
>>
>> But every time I use _checkPermission from Products.CMFCore.utils I'm
>> still getting the old one... Is it possible to monkey patch functions
>> (as
>> opposed to methods)? Any idea why this monkey patch wouldn't be working?
>
> Other modules may have already imported it, using:
>
> from Products.CMFCore.utils import _checkPermission
>
> Those modules *also* need monkey patching, because they are holding onto
> a reference to the original object, even though you have bound a new
> reference to that name with your monkey.
It might be possible to monkey patch only _checkPermission.func_code,
which seems to work on simple tests, but I've never tried it in real life:
>>> def f(a):
... print a+1
>>> def g(b):
... print b+2
>>> f(0)
1
>>> f.func_code = g.func_code
>>> f(0)
2
Florent
--
Florent Guillaume, Nuxeo (Paris, France) Director of R&D
+33 1 40 33 71 59 http://nuxeo.com fg at nuxeo.com
More information about the Zope-CMF
mailing list