From: Benoît Pin Date: Sun, 7 Jul 2013 15:57:02 +0000 (+0200) Subject: getUtilityByInterfaceName a créé un bug assez sournois : reindexObject est capable... X-Git-Url: https://scm.cri.ensmp.fr/git/Portfolio.git/commitdiff_plain/945dc8fead8d07513d4b0116e93072d820bd38dd?hp=c7599d6b4346a2f288412186a878562daf9e672b getUtilityByInterfaceName a créé un bug assez sournois : reindexObject est capable de récupérer le catalogue, avant l'achèvement de la construction. Le bug était auparavant silencieux (voire n'existait pas) car la récupération du catalogue par CMFCatalogAware.reindexObject retournait None, et donc il n'y avait pas – de fait – d'indexation prématurée. --- diff --git a/photo.py b/photo.py index e66f8eb..c0c92c6 100755 --- a/photo.py +++ b/photo.py @@ -21,11 +21,9 @@ from Products.CMFCore.permissions import View, AccessContentsInformation, \ from permissions import ViewRawImage from zope.component.factory import Factory from zope.interface import implements -#from webdav.WriteLockInterface import WriteLockInterface as z2IWriteLock from webdav.interfaces import IWriteLock from Products.CMFCore.interfaces import IContentish from Products.CMFCore.interfaces import IDynamicType -#from Products.CMFCore.interfaces.Contentish import Contentish as z2IContentish from Products.CMFCore.DynamicType import DynamicType from Products.CMFCore.CMFCatalogAware import CMFCatalogAware @@ -40,7 +38,6 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) : """ Photo CMF aware """ implements(IPhoto, IContentish, IWriteLock, IDynamicType) - #__implements__ = (z2IContentish, IWriteLock, DynamicType.__implements__) meta_type = BasePhoto.meta_type manage_options = BasePhoto.manage_options @@ -61,7 +58,10 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) : def update_data(self, data, content_type=None) : BasePhoto.update_data(self, data, content_type=content_type) - self.reindexObject() + # update_data can be invoked during construction + # in this case, reindexObject put a parasite catalag entry. + if self.getParentNode() : + self.reindexObject() def _getAfterResizingHooks(self) : @@ -193,14 +193,6 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) : return getattr(self, '_hiddenForAnon', False) -# security.declareProtected(AccessContentsInformation, 'position') -# def position(self): -# " returns position of self in parent container " -# parent = self.getParentNode() -# position = parent.getObjectPosition(self.getId()) -# return position - - # # SimpleItem interface #