Commit 569c3097 authored by Arnaud Fontaine's avatar Arnaud Fontaine

Patch ExternalMethod Zope class for erp5.component.extension.

parent 832970fc
...@@ -69,6 +69,7 @@ from Products.ERP5Type.patches import ZODBConnection ...@@ -69,6 +69,7 @@ from Products.ERP5Type.patches import ZODBConnection
from Products.ERP5Type.patches import ZopePageTemplateUtils from Products.ERP5Type.patches import ZopePageTemplateUtils
from Products.ERP5Type.patches import OFSHistory from Products.ERP5Type.patches import OFSHistory
from Products.ERP5Type.patches import OFSItem from Products.ERP5Type.patches import OFSItem
from Products.ERP5Type.patches import ExternalMethod
# These symbols are required for backward compatibility # These symbols are required for backward compatibility
from Products.ERP5Type.patches.PropertyManager import ERP5PropertyManager from Products.ERP5Type.patches.PropertyManager import ERP5PropertyManager
......
from Products.ExternalMethod.ExternalMethod import ExternalMethod
from App.Extensions import FuncCode, getObject
def getFunction(self, reload=False, f=None):
if f is None:
import erp5.component.extension
try:
f = getattr(getattr(erp5.component.extension, self._module),
self._function)
except AttributeError:
f = getObject(self._module, self._function, reload)
# From ExternalMethod.getFunction
ff = getattr(f, 'im_func', f)
self._v_func_defaults = ff.func_defaults
self._v_func_code = FuncCode(ff, f is not ff)
self._v_f = f
return f
ExternalMethod.getFunction = getFunction
ExternalMethod__call__ = ExternalMethod.__call__
def __call__(self, *args, **kw):
import erp5.component.extension
try:
f = getattr(getattr(erp5.component.extension, self._module),
self._function)
except AttributeError:
return ExternalMethod__call__(self, *args, **kw)
else:
_v_f = getattr(self, '_v_f', None)
if not _v_f or f is not _v_f:
f = self.getFunction(f=f)
# From ExternalMethod.__call__
__traceback_info__ = args, kw, self._v_func_defaults
try:
return f(*args, **kw)
except TypeError, v:
import sys
tb = sys.exc_info()[2]
try:
if ((self._v_func_code.co_argcount -
len(self._v_func_defaults or ()) - 1 == len(args)) and
self._v_func_code.co_varnames[0] == 'self'):
return f(self.aq_parent.this(), *args, **kw)
raise TypeError, v, tb
finally:
tb = None
ExternalMethod.__call__ = __call__
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment