From df59c6c6440a36aedb4c671e189484db629c8b96 Mon Sep 17 00:00:00 2001 From: Arnaud Fontaine Date: Tue, 18 Jun 2019 18:28:53 +0900 Subject: [PATCH] WIP: ERP5Type: Avoid patching Portal Type in customer project for init_script (very common) by having an afterClone-like getTypeBasedMethod(). --- .../erp5_administration/ERP5Site_dumpPortalTypeList.py | 1 - product/ERP5Type/ERP5Type.py | 8 ++++++-- product/ERP5Type/tests/testERP5Type.py | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/ERP5Site_dumpPortalTypeList.py b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/ERP5Site_dumpPortalTypeList.py index 1afd8f72b58..8695adaf81f 100644 --- a/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/ERP5Site_dumpPortalTypeList.py +++ b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/ERP5Site_dumpPortalTypeList.py @@ -3,7 +3,6 @@ for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lam print " ", "\n ".join([x for x in ( "Short Title: %s" % ti.getShortTitle(), "Class: %s" % ti.getTypeClass(), - "Init Script: %s" % ti.getTypeInitScriptId(), "Add Permission: %s" % ti.getTypeAddPermission(), "Acquire Local Roles: %s" % ti.getTypeAcquireLocalRole(), "Property Sheets: %r" % sorted(ti.getTypePropertySheetList()), diff --git a/product/ERP5Type/ERP5Type.py b/product/ERP5Type/ERP5Type.py index 4f86cfda3de..5180f342ca4 100644 --- a/product/ERP5Type/ERP5Type.py +++ b/product/ERP5Type/ERP5Type.py @@ -438,8 +438,13 @@ class ERP5TypeInformation(XMLObject, init_script = self.getTypeInitScriptId() if init_script: # Acquire the init script in the context of this object + deprecated("'type_init_script_id' deprecated in favor of getTypeBasedMethod()") getattr(ob, init_script)(created_by_builder=created_by_builder, edit_kw=kw) + else: + init_script = self._getTypeBasedMethod('init') + if init_script is not None and callable(init_script): + init_script(created_by_builder=created_by_builder, edit_kw=kw) if kw: ob._edit(force_update=1, **kw) @@ -654,8 +659,7 @@ class ERP5TypeInformation(XMLObject, """Return keywords for "Find" tab in ZMI""" search_source_list = [self.getId(), self.getTypeFactoryMethodId(), - self.getTypeAddPermission(), - self.getTypeInitScriptId()] + self.getTypeAddPermission()] search_source_list += self.getTypePropertySheetList() search_source_list += self.getTypeBaseCategoryList() return ' '.join(filter(None, search_source_list)) diff --git a/product/ERP5Type/tests/testERP5Type.py b/product/ERP5Type/tests/testERP5Type.py index d478ec9f3e6..c1ee17f8ca9 100644 --- a/product/ERP5Type/tests/testERP5Type.py +++ b/product/ERP5Type/tests/testERP5Type.py @@ -501,6 +501,10 @@ class TestERP5Type(PropertySheetTestCase, LogInterceptor): self.portal.portal_caches.clearCache() self.assertEqual(cache(), cached_var) + def test_07_initScript(self): + """TODO: Similar to test_07_afterCloneScript""" + pass + def test_07_afterCloneScript(self): """manage_afterClone can call a type based script.""" # setup the script for Person portal type -- 2.30.9