From 41c886155629e176608af8c9d7cbe47059eb3807 Mon Sep 17 00:00:00 2001 From: Vincent Pelletier <vincent@nexedi.com> Date: Wed, 6 Sep 2006 15:26:39 +0000 Subject: [PATCH] Implement getBaseCategoryDict, a cached version of getBaseCategoryList which should be used to check if a base category is present (dict key searching is O(1), which is always better than list searching, even if sorted). git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@9709 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/Tool/CategoryTool.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/product/ERP5/Tool/CategoryTool.py b/product/ERP5/Tool/CategoryTool.py index deb92445c3..da0be6ae2e 100644 --- a/product/ERP5/Tool/CategoryTool.py +++ b/product/ERP5/Tool/CategoryTool.py @@ -41,6 +41,7 @@ from Products.CMFCore.PortalFolder import PortalFolder from Products.ERP5Type.CopySupport import CopyContainer from Products.CMFCore.utils import getToolByName from Products.ERP5Type.Document import newTempBase +from Products.ERP5Type.Cache import CachingMethod from zLOG import LOG @@ -121,6 +122,16 @@ class CategoryTool(CopyContainer, CMFCategoryTool, BaseTool): security.declareProtected(Permissions.AccessContentsInformation, 'getUids') getUids = getCategoryParentUidList + def getBaseCategoryDict(self): + """ + Cached method to which resturns a dict with category names as keys, and None as values. + This allows to search for an element existence in the list faster. + ie: if x in self.getPortalObject().portal_categories.getBaseCategoryDict() + """ + def getBaseCategoryDict(self): + return dict.fromkeys(self.getBaseCategoryList(), None) + return CachingMethod(getBaseCategoryDict, 'portal_categories.getBaseCategoryDict', cache_duration=None)(self) + def updateRelatedContent(self, context, previous_category_url, new_category_url): """See CMFCategory.CategoryTool.updateRelatedContent -- 2.30.9