From 769f9fb21febbda7be34fe058fada4d0d834cd45 Mon Sep 17 00:00:00 2001 From: Sebastien Robin <seb@nexedi.com> Date: Fri, 17 Nov 2006 15:46:11 +0000 Subject: [PATCH] added method isIndexable and beforeUncatalogObject git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@11359 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ZSQLCatalog/SQLCatalog.py | 90 ++++++++++++++++++++----------- 1 file changed, 60 insertions(+), 30 deletions(-) diff --git a/product/ZSQLCatalog/SQLCatalog.py b/product/ZSQLCatalog/SQLCatalog.py index 6ff1dea6e1..6ba576b46d 100644 --- a/product/ZSQLCatalog/SQLCatalog.py +++ b/product/ZSQLCatalog/SQLCatalog.py @@ -288,6 +288,11 @@ class Catalog(Folder, Persistent, Acquisition.Implicit, ExtensionClass.Base): 'type' : 'selection', 'select_variable' : 'getCatalogMethodIds', 'mode' : 'w' }, + { 'id' : 'sql_catalog_delete_uid', + 'description' : 'A method to delete a uid value', + 'type' : 'selection', + 'select_variable' : 'getCatalogMethodIds', + 'mode' : 'w' }, { 'id' : 'sql_catalog_object_list', 'description' : 'Methods to be called to catalog the list of objects', 'type' : 'multiple selection', @@ -410,6 +415,7 @@ class Catalog(Folder, Persistent, Acquisition.Implicit, ExtensionClass.Base): ) sql_catalog_produce_reserved = '' + sql_catalog_delete_uid = '' sql_catalog_clear_reserved = '' sql_catalog_reserve_uid = '' sql_catalog_object_list = () @@ -835,6 +841,40 @@ class Catalog(Folder, Persistent, Acquisition.Implicit, ExtensionClass.Base): uid_list = [x.uid for x in method(count = UID_BUFFER_SIZE, instance_id = instance_id) if x.uid != 0] self._v_uid_buffer.extend(uid_list) + def isIndexable(self): + """ + This is required to check in many methods that + the site root and zope root are indexable + """ + zope_root = self.getZopeRoot() + site_root = self.getSiteRoot() + + root_indexable = int(getattr(zope_root, 'isIndexable', 1)) + site_indexable = int(getattr(site_root, 'isIndexable', 1)) + if not (root_indexable and site_indexable): + return False + return True + + def getSiteRoot(self): + """ + Returns the root of the site + """ + if withCMF: + site_root = getToolByName(self, 'portal_url').getPortalObject() + else: + site_root = self.aq_parent + return site_root + + def getZopeRoot(self): + """ + Returns the root of the zope + """ + if withCMF: + zope_root = getToolByName(self, 'portal_url').getPortalObject().aq_parent + else: + zope_root = self.getPhysicalRoot() + return zope_root + def newUid(self): """ This is where uid generation takes place. We should consider a multi-threaded environment @@ -854,16 +894,7 @@ class Catalog(Folder, Persistent, Acquisition.Implicit, ExtensionClass.Base): Similar problems may happen with relations and acquisition of uid values (ex. order_uid) with the risk of graph loops """ - if withCMF: - zope_root = getToolByName(self, 'portal_url').getPortalObject().aq_parent - site_root = getToolByName(self, 'portal_url').getPortalObject() - else: - zope_root = self.getPhysicalRoot() - site_root = self.aq_parent - - root_indexable = int(getattr(zope_root, 'isIndexable', 1)) - site_indexable = int(getattr(site_root, 'isIndexable', 1)) - if not (root_indexable and site_indexable): + if not self.isIndexable(): return None klass = self.__class__ @@ -1020,17 +1051,10 @@ class Catalog(Folder, Persistent, Acquisition.Implicit, ExtensionClass.Base): LOG('SQLCatalog', TRACE, 'catalogging %d objects' % len(object_list)) #LOG('catalogObjectList', 0, 'called with %r' % (object_list,)) - if withCMF: - zope_root = getToolByName(self, 'portal_url').getPortalObject().aq_parent - site_root = getToolByName(self, 'portal_url').getPortalObject() - else: - zope_root = self.getPhysicalRoot() - site_root = self.aq_parent + if not self.isIndexable(): + return None - root_indexable = int(getattr(zope_root, 'isIndexable', 1)) - site_indexable = int(getattr(site_root, 'isIndexable', 1)) - if not (root_indexable and site_indexable): - return + site_root = self.getSiteRoot() for object in object_list: path = object.getPath() @@ -1192,6 +1216,21 @@ class Catalog(Folder, Persistent, Acquisition.Implicit, ExtensionClass.Base): if psyco is not None: psyco.bind(catalogObjectList) + def beforeUncatalogObject(self, path=None,uid=None): + """ + Set the path as deleted + """ + if not self.isIndexable(): + return None + + if uid is None and path is not None: + uid = self.getUidForPath(path) + method_name = self.sql_catalog_delete_uid + if uid is None: + return None + method = getattr(self, method_name) + method(uid = uid) + def uncatalogObject(self, path=None,uid=None): """ Uncatalog and object from the Catalog. @@ -1205,16 +1244,7 @@ class Catalog(Folder, Persistent, Acquisition.Implicit, ExtensionClass.Base): XXX Add filter of methods """ - if withCMF: - zope_root = getToolByName(self, 'portal_url').getPortalObject().aq_parent - site_root = getToolByName(self, 'portal_url').getPortalObject() - else: - zope_root = self.getPhysicalRoot() - site_root = self.aq_parent - - root_indexable = int(getattr(zope_root, 'isIndexable', 1)) - site_indexable = int(getattr(site_root, 'isIndexable', 1)) - if not (root_indexable and site_indexable): + if not self.isIndexable(): return None if uid is None and path is not None: -- 2.30.9