Commit c9f8b68b authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki Committed by Jérome Perrin

py2/py3: rename function attributes.

parent af386fa8
...@@ -67,10 +67,10 @@ class TestRenderViewAPI(ERP5TypeTestCase): ...@@ -67,10 +67,10 @@ class TestRenderViewAPI(ERP5TypeTestCase):
def test_signature(self): def test_signature(self):
for field in FieldRegistry.get_field_classes().itervalues(): # pylint: disable=no-value-for-parameter for field in FieldRegistry.get_field_classes().itervalues(): # pylint: disable=no-value-for-parameter
self.assertEqual(('self', 'value', 'REQUEST', 'render_prefix'), self.assertEqual(('self', 'value', 'REQUEST', 'render_prefix'),
field.render_view.__func__.func_code.co_varnames) field.render_view.__code__.co_varnames)
if field is not ProxyField: if field is not ProxyField:
self.assertEqual(('self', 'field', 'value', 'REQUEST'), self.assertEqual(('self', 'field', 'value', 'REQUEST'),
field.widget.render_view.__func__.func_code.co_varnames[:4], '%s %s' % (field.widget, field.widget.render_view.__func__.func_code.co_varnames[:4])) field.widget.render_view.__code__.co_varnames[:4], '%s %s' % (field.widget, field.widget.render_view.__code__.co_varnames[:4]))
class TestFloatField(ERP5TypeTestCase): class TestFloatField(ERP5TypeTestCase):
......
...@@ -126,8 +126,8 @@ class TestFacebookLogin(ERP5TypeTestCase): ...@@ -126,8 +126,8 @@ class TestFacebookLogin(ERP5TypeTestCase):
'erp5.component.extension.FacebookLoginUtility.getUserEntry', 'erp5.component.extension.FacebookLoginUtility.getUserEntry',
side_effect=getUserEntry side_effect=getUserEntry
) as getUserEntry_mock: ) as getUserEntry_mock:
getAccessTokenFromCode_mock.func_code = getAccessTokenFromCode.func_code getAccessTokenFromCode_mock.__code__ = getAccessTokenFromCode.__code__
getUserEntry_mock.func_code = getUserEntry.func_code getUserEntry_mock.__code__ = getUserEntry.__code__
self.portal.ERP5Site_callbackFacebookLogin(code=CODE) self.portal.ERP5Site_callbackFacebookLogin(code=CODE)
getAccessTokenFromCode_mock.assert_called_once() getAccessTokenFromCode_mock.assert_called_once()
getUserEntry_mock.assert_called_once() getUserEntry_mock.assert_called_once()
...@@ -166,8 +166,8 @@ class TestFacebookLogin(ERP5TypeTestCase): ...@@ -166,8 +166,8 @@ class TestFacebookLogin(ERP5TypeTestCase):
'erp5.component.extension.FacebookLoginUtility.getUserEntry', 'erp5.component.extension.FacebookLoginUtility.getUserEntry',
side_effect=getUserEntry side_effect=getUserEntry
) as getUserEntry_mock: ) as getUserEntry_mock:
getAccessTokenFromCode_mock.func_code = getAccessTokenFromCode.func_code getAccessTokenFromCode_mock.__code__ = getAccessTokenFromCode.__code__
getUserEntry_mock.func_code = getUserEntry.func_code getUserEntry_mock.__code__ = getUserEntry.__code__
self.portal.ERP5Site_callbackFacebookLogin(code=CODE) self.portal.ERP5Site_callbackFacebookLogin(code=CODE)
ac_cookie, = [v for (k, v) in response.listHeaders() if k.lower() == 'set-cookie' and '__ac_facebook_hash=' in v] ac_cookie, = [v for (k, v) in response.listHeaders() if k.lower() == 'set-cookie' and '__ac_facebook_hash=' in v]
...@@ -232,8 +232,8 @@ return credential_request ...@@ -232,8 +232,8 @@ return credential_request
'erp5.component.extension.FacebookLoginUtility.getUserEntry', 'erp5.component.extension.FacebookLoginUtility.getUserEntry',
side_effect=getUserEntry side_effect=getUserEntry
) as getUserEntry_mock: ) as getUserEntry_mock:
getAccessTokenFromCode_mock.func_code = getAccessTokenFromCode.func_code getAccessTokenFromCode_mock.__code__ = getAccessTokenFromCode.__code__
getUserEntry_mock.func_code = getUserEntry.func_code getUserEntry_mock.__code__ = getUserEntry.__code__
response = self.portal.ERP5Site_callbackFacebookLogin(code=CODE) response = self.portal.ERP5Site_callbackFacebookLogin(code=CODE)
facebook_hash = self.portal.REQUEST.RESPONSE.cookies.get("__ac_facebook_hash")["value"] facebook_hash = self.portal.REQUEST.RESPONSE.cookies.get("__ac_facebook_hash")["value"]
self.assertEqual("8cec04e21e927f1023f4f4980ec11a77", facebook_hash) self.assertEqual("8cec04e21e927f1023f4f4980ec11a77", facebook_hash)
......
...@@ -163,8 +163,8 @@ class TestGoogleLogin(GoogleLoginTestCase): ...@@ -163,8 +163,8 @@ class TestGoogleLogin(GoogleLoginTestCase):
'erp5.component.extension.GoogleLoginUtility.getUserEntry', 'erp5.component.extension.GoogleLoginUtility.getUserEntry',
side_effect=getUserEntry side_effect=getUserEntry
) as getUserEntry_mock: ) as getUserEntry_mock:
getAccessTokenFromCode_mock.func_code = getAccessTokenFromCode.func_code getAccessTokenFromCode_mock.__code__ = getAccessTokenFromCode.__code__
getUserEntry_mock.func_code = getUserEntry.func_code getUserEntry_mock.__code__ = getUserEntry.__code__
self.portal.ERP5Site_receiveGoogleCallback(code=CODE) self.portal.ERP5Site_receiveGoogleCallback(code=CODE)
getAccessTokenFromCode_mock.assert_called_once() getAccessTokenFromCode_mock.assert_called_once()
getUserEntry_mock.assert_called_once() getUserEntry_mock.assert_called_once()
...@@ -207,8 +207,8 @@ class TestGoogleLogin(GoogleLoginTestCase): ...@@ -207,8 +207,8 @@ class TestGoogleLogin(GoogleLoginTestCase):
'erp5.component.extension.GoogleLoginUtility.getUserEntry', 'erp5.component.extension.GoogleLoginUtility.getUserEntry',
side_effect=getUserEntry side_effect=getUserEntry
) as getUserEntry_mock: ) as getUserEntry_mock:
getAccessTokenFromCode_mock.func_code = getAccessTokenFromCode.func_code getAccessTokenFromCode_mock.__code__ = getAccessTokenFromCode.__code__
getUserEntry_mock.func_code = getUserEntry.func_code getUserEntry_mock.__code__ = getUserEntry.__code__
self.portal.ERP5Site_receiveGoogleCallback(code=CODE) self.portal.ERP5Site_receiveGoogleCallback(code=CODE)
getAccessTokenFromCode_mock.assert_called_once() getAccessTokenFromCode_mock.assert_called_once()
...@@ -278,8 +278,8 @@ return credential_request ...@@ -278,8 +278,8 @@ return credential_request
'erp5.component.extension.GoogleLoginUtility.getUserEntry', 'erp5.component.extension.GoogleLoginUtility.getUserEntry',
side_effect=getUserEntry side_effect=getUserEntry
) as getUserEntry_mock: ) as getUserEntry_mock:
getAccessTokenFromCode_mock.func_code = getAccessTokenFromCode.func_code getAccessTokenFromCode_mock.__code__ = getAccessTokenFromCode.__code__
getUserEntry_mock.func_code = getUserEntry.func_code getUserEntry_mock.__code__ = getUserEntry.__code__
response = self.portal.ERP5Site_receiveGoogleCallback(code=CODE) response = self.portal.ERP5Site_receiveGoogleCallback(code=CODE)
getAccessTokenFromCode_mock.assert_called_once() getAccessTokenFromCode_mock.assert_called_once()
getUserEntry_mock.assert_called_once() getUserEntry_mock.assert_called_once()
......
...@@ -126,8 +126,8 @@ class TestOpenIdConnectLogin(OpenIdConnectLoginTestCase): ...@@ -126,8 +126,8 @@ class TestOpenIdConnectLogin(OpenIdConnectLoginTestCase):
'erp5.component.extension.OpenIdConnectLoginUtility.getUserEntry', 'erp5.component.extension.OpenIdConnectLoginUtility.getUserEntry',
side_effect=getUserEntry side_effect=getUserEntry
) as getUserEntry_mock: ) as getUserEntry_mock:
getAccessTokenFromCode_mock.func_code = getAccessTokenFromCode.func_code getAccessTokenFromCode_mock.__code__ = getAccessTokenFromCode.__code__
getUserEntry_mock.func_code = getUserEntry.func_code getUserEntry_mock.__code__ = getUserEntry.__code__
self.portal.ERP5Site_receiveOpenIdCallback(code=CODE, state=state) self.portal.ERP5Site_receiveOpenIdCallback(code=CODE, state=state)
getAccessTokenFromCode_mock.assert_called_once() getAccessTokenFromCode_mock.assert_called_once()
...@@ -165,8 +165,8 @@ class TestOpenIdConnectLogin(OpenIdConnectLoginTestCase): ...@@ -165,8 +165,8 @@ class TestOpenIdConnectLogin(OpenIdConnectLoginTestCase):
'erp5.component.extension.OpenIdConnectLoginUtility.getUserEntry', 'erp5.component.extension.OpenIdConnectLoginUtility.getUserEntry',
side_effect=getUserEntry side_effect=getUserEntry
) as getUserEntry_mock: ) as getUserEntry_mock:
getAccessTokenFromCode_mock.func_code = getAccessTokenFromCode.func_code getAccessTokenFromCode_mock.__code__ = getAccessTokenFromCode.__code__
getUserEntry_mock.func_code = getUserEntry.func_code getUserEntry_mock.__code__ = getUserEntry.__code__
self.portal.ERP5Site_receiveOpenIdCallback(code=CODE, state=state) self.portal.ERP5Site_receiveOpenIdCallback(code=CODE, state=state)
getAccessTokenFromCode_mock.assert_called_once() getAccessTokenFromCode_mock.assert_called_once()
getUserEntry_mock.assert_called_once() getUserEntry_mock.assert_called_once()
...@@ -260,8 +260,8 @@ return credential_request ...@@ -260,8 +260,8 @@ return credential_request
'erp5.component.extension.OpenIdConnectLoginUtility.getUserEntry', 'erp5.component.extension.OpenIdConnectLoginUtility.getUserEntry',
side_effect=getUserEntry side_effect=getUserEntry
) as getUserEntry_mock: ) as getUserEntry_mock:
getAccessTokenFromCode_mock.func_code = getAccessTokenFromCode.func_code getAccessTokenFromCode_mock.__code__ = getAccessTokenFromCode.__code__
getUserEntry_mock.func_code = getUserEntry.func_code getUserEntry_mock.__code__ = getUserEntry.__code__
self.portal.ERP5Site_receiveOpenIdCallback(code=CODE, state=state) self.portal.ERP5Site_receiveOpenIdCallback(code=CODE, state=state)
getAccessTokenFromCode_mock.assert_called_once() getAccessTokenFromCode_mock.assert_called_once()
getUserEntry_mock.assert_called_once() getUserEntry_mock.assert_called_once()
......
...@@ -75,7 +75,7 @@ class TestSecurityMixin(ERP5TypeTestCase): ...@@ -75,7 +75,7 @@ class TestSecurityMixin(ERP5TypeTestCase):
allowed_method_id_list = ['om_icons',] allowed_method_id_list = ['om_icons',]
app = self.portal.aq_parent app = self.portal.aq_parent
meta_type_set = set([None]) meta_type_set = set([None])
error_set = set() error_dict = {}
for _, obj in app.ZopeFind(app, search_sub=1): for _, obj in app.ZopeFind(app, search_sub=1):
meta_type = getattr(obj, 'meta_type', None) meta_type = getattr(obj, 'meta_type', None)
if meta_type in meta_type_set: if meta_type in meta_type_set:
...@@ -88,17 +88,20 @@ class TestSecurityMixin(ERP5TypeTestCase): ...@@ -88,17 +88,20 @@ class TestSecurityMixin(ERP5TypeTestCase):
continue continue
method = getattr(obj, method_id) method = getattr(obj, method_id)
if isinstance(method, MethodType) and \ if isinstance(method, MethodType) and \
getattr(method, 'func_name', None) is not None and \ getattr(method, '__name__', None) is not None and \
method.__doc__ and \ method.__doc__ and \
not hasattr(obj, '%s__roles__' % method_id) and \ not hasattr(obj, '%s__roles__' % method_id) and \
not hasattr(method, '__roles__') and \
method.__module__: method.__module__:
if method.__module__ == 'Products.ERP5Type.Accessor.WorkflowState' and method.func_code.co_name == 'serialize': if method.__module__ == 'Products.ERP5Type.Accessor.WorkflowState' and method.__code__.co_name == 'serialize':
continue continue
func_code = method.__code__ func_code = method.__code__
error_set.add((func_code.co_filename, func_code.co_firstlineno, method_id)) if not hasattr(func_code, 'co_filename'): # ERP5 Accessor
func_code = method.__func__.__class__.__init__.__code__
error_dict[(func_code.co_filename, func_code.co_firstlineno)] = method_id
error_list = [] error_list = []
for filename, lineno, method_id in sorted(error_set): for (filename, lineno), method_id in sorted(error_dict.items()):
# ignore security problems with non ERP5 documents, unless running in debug mode. # ignore security problems with non ERP5 documents, unless running in debug mode.
if os.environ.get('erp5_debug_mode') or '/erp5/' in filename or '<portal_components' in filename: if os.environ.get('erp5_debug_mode') or '/erp5/' in filename or '<portal_components' in filename:
error_list.append('%s:%s %s' % (filename, lineno, method_id)) error_list.append('%s:%s %s' % (filename, lineno, method_id))
......
...@@ -82,7 +82,7 @@ class Dummy(Reindex): ...@@ -82,7 +82,7 @@ class Dummy(Reindex):
self._id = id self._id = id
self.__name__ = id self.__name__ = id
self._accessor_id = accessor_id self._accessor_id = accessor_id
# self.__code__ = func_code = getattr(instance, self._accessor_id).func_code # self.__code__ = func_code = getattr(instance, self._accessor_id).__code__
def __call__(self, instance, *args, **kw): def __call__(self, instance, *args, **kw):
method = getattr(instance, self._accessor_id) method = getattr(instance, self._accessor_id)
......
...@@ -353,7 +353,7 @@ def transactional_cached(key_method=_default_key_method): ...@@ -353,7 +353,7 @@ def transactional_cached(key_method=_default_key_method):
def decorator(function): def decorator(function):
# Unfornately, we can only check functions (not other callable like class). # Unfornately, we can only check functions (not other callable like class).
assert (key_method is not _default_key_method or assert (key_method is not _default_key_method or
not getattr(function, 'func_defaults', None)), ( not getattr(function, '__defaults__', None)), (
"default 'key_method' of 'transactional_cached' does not work with" "default 'key_method' of 'transactional_cached' does not work with"
" functions having default values for parameters") " functions having default values for parameters")
key = repr(function) key = repr(function)
......
...@@ -83,14 +83,18 @@ class _(PatchClass(ExternalMethod)): ...@@ -83,14 +83,18 @@ class _(PatchClass(ExternalMethod)):
return _f return _f
except AttributeError: except AttributeError:
pass pass
code = f.func_code code = f.__code__
argument_object = getargs(code) argument_object = getargs(code)
# reconstruct back the original names # reconstruct back the original names
arg_list = argument_object.args[:] arg_list = argument_object.args[:]
if argument_object.varargs: if argument_object.varargs:
arg_list.append('*' + argument_object.varargs) arg_list.append('*' + argument_object.varargs)
if argument_object.keywords: if six.PY2:
arg_list.append('**' + argument_object.keywords) if argument_object.keywords:
arg_list.append('**' + argument_object.keywords)
else:
if argument_object.varkw:
arg_list.append('**' + argument_object.varkw)
i = isinstance(f, MethodType) i = isinstance(f, MethodType)
ff = six.get_unbound_function(f) if i else f ff = six.get_unbound_function(f) if i else f
...@@ -98,7 +102,10 @@ class _(PatchClass(ExternalMethod)): ...@@ -98,7 +102,10 @@ class _(PatchClass(ExternalMethod)):
i += has_self i += has_self
if i: if i:
code = FuncCode(ff, i) code = FuncCode(ff, i)
self._v_f = _f = (f, f.func_defaults, code, has_self, arg_list) try: # This fails with mock function
self._v_f = _f = (f, f.__defaults__, code, has_self, arg_list)
except AttributeError:
self._v_f = _f = (f, f.func_defaults, code, has_self, arg_list)
return _f return _f
def __call__(self, *args, **kw): def __call__(self, *args, **kw):
......
...@@ -59,4 +59,4 @@ try: ...@@ -59,4 +59,4 @@ try:
except TypeError: except TypeError:
# We need to monkey patch in-place, as it is a top-level function and # We need to monkey patch in-place, as it is a top-level function and
# already imported in other places. # already imported in other places.
convertToUnicode.func_code = patched_convertToUnicode.func_code convertToUnicode.__code__ = patched_convertToUnicode.__code__
...@@ -57,7 +57,7 @@ def special_extract_tb(tb, limit = None): ...@@ -57,7 +57,7 @@ def special_extract_tb(tb, limit = None):
else: line = None else: line = None
# display where we failed in the sequence # display where we failed in the sequence
if co == Sequence.play.func_code: if co == Sequence.play.__code__:
if line is None: if line is None:
line = '' line = ''
sequence = f.f_locals['self'] sequence = f.f_locals['self']
......
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