From c2f6c590d21f37e111d459911661d2d04a564436 Mon Sep 17 00:00:00 2001 From: Ayush Tiwari <ayush.tiwari@nexedi.com> Date: Tue, 6 Mar 2018 17:13:11 +0100 Subject: [PATCH] Catalog, Business Template: Remove expression_instance property from CatalogFilter property sheets Also, while exporting catalog methods, explicitly check for `expression_instance` property. Now we keep expression_instance property in a volatile attribute, so we should prefer using it. --- product/ERP5/Document/BusinessTemplate.py | 18 +++++----- .../expression_instance_property.xml | 34 ------------------- product/ERP5Catalog/CatalogTool.py | 1 - product/ERP5Type/tests/testERP5Type.py | 1 - 4 files changed, 9 insertions(+), 45 deletions(-) delete mode 100644 product/ERP5/bootstrap/erp5_core/PropertySheetTemplateItem/portal_property_sheets/CatalogFilter/expression_instance_property.xml diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py index 01abc9c0ee..5e05371419 100644 --- a/product/ERP5/Document/BusinessTemplate.py +++ b/product/ERP5/Document/BusinessTemplate.py @@ -116,7 +116,6 @@ catalog_method_list = ('_is_catalog_list_method_archive', '_is_filtered_archive',) catalog_method_filter_list = ('_filter_expression_archive', - '_filter_expression_instance_archive', '_filter_expression_cache_key_archive', '_filter_type_archive',) @@ -616,8 +615,12 @@ class BaseTemplateItem(Implicit, Persistent): # PythonScript covers both Zope Python scripts # and ERP5 Python Scripts if isinstance(obj, PythonScript): + # `expression_instance` is included so as to add compatibility for + # exporting older catalog methods which might have them as their + # properties or in their attribute dict. attr_set.update(('func_code', 'func_defaults', '_code', - '_lazy_compilation', 'Python_magic')) + '_lazy_compilation', 'Python_magic', + 'expression_instance')) for attr in 'errors', 'warnings', '_proxy_roles': if not obj.__dict__.get(attr, 1): delattr(obj, attr) @@ -625,7 +628,10 @@ class BaseTemplateItem(Implicit, Persistent): attr_set.update(('_EtagSupport__etag', 'size')) # SQL covers both ZSQL Methods and ERP5 SQL Methods elif isinstance(obj, SQL): - attr_set.update(('_arg', 'template')) + # `expression_instance` is included so as to add compatibility for + # exporting older catalog methods which might have them as their + # properties or in their attribute dict. + attr_set.update(('_arg', 'template', 'expression_instance')) elif interfaces.IIdGenerator.providedBy(obj): attr_set.update(('last_max_id_dict', 'last_id_dict')) elif classname == 'Types Tool' and klass.__module__ == 'erp5.portal_type': @@ -3068,14 +3074,8 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): # migration. if self._is_filtered_archive.get(method_id, 0): expression = self._filter_expression_archive[method_id] - if expression and expression.strip(): - # only compile non-empty expressions - expr_instance = Expression(expression) - else: - expr_instance = None method.setFiltered(1) method.setExpression(expression) - method.setExpressionInstance(expr_instance) method.setExpressionCacheKey( self._filter_expression_cache_key_archive.get(method_id, ())) method.setTypeList(self._filter_type_archive.get(method_id, ())) diff --git a/product/ERP5/bootstrap/erp5_core/PropertySheetTemplateItem/portal_property_sheets/CatalogFilter/expression_instance_property.xml b/product/ERP5/bootstrap/erp5_core/PropertySheetTemplateItem/portal_property_sheets/CatalogFilter/expression_instance_property.xml deleted file mode 100644 index 25e4abf5a1..0000000000 --- a/product/ERP5/bootstrap/erp5_core/PropertySheetTemplateItem/portal_property_sheets/CatalogFilter/expression_instance_property.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Standard Property" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>elementary_type/object</string> - </tuple> - </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>expression_instance_property</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Standard Property</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/product/ERP5Catalog/CatalogTool.py b/product/ERP5Catalog/CatalogTool.py index 7b3677ea62..f8c84a1915 100644 --- a/product/ERP5Catalog/CatalogTool.py +++ b/product/ERP5Catalog/CatalogTool.py @@ -423,7 +423,6 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject): new_method.setTypeList(filter_['type']) new_method.setExpressionCacheKeyList(filter_['expression_cache_key']) new_method.setExpression(filter_['expression']) - new_method.setExpressionInstance(filter_['expression_instance']) # Delete filter_dict before migration of catalog object(s) del obj.filter_dict diff --git a/product/ERP5Type/tests/testERP5Type.py b/product/ERP5Type/tests/testERP5Type.py index 28a0a5d084..c9918752a3 100644 --- a/product/ERP5Type/tests/testERP5Type.py +++ b/product/ERP5Type/tests/testERP5Type.py @@ -3261,7 +3261,6 @@ class TestAccessControl(ERP5TypeTestCase): method = self.getCatalogTool().getSQLCatalog()._getOb('z_catalog_object_list') method.setFiltered(1) method.setExpression(self.expression) - method.setExpressionInstance(Expression(self.expression)) createZODBPythonScript(self.getSkinsTool().custom, 'Base_immediateReindexObject', -- 2.30.9