[Zope-Checkins] CVS: Zope/lib/python/Products/ZCatalog -
CatalogBrains.py:1.8.44.1
Casey Duncan
casey at zope.com
Tue Mar 23 15:27:55 EST 2004
Update of /cvs-repository/Zope/lib/python/Products/ZCatalog
In directory cvs.zope.org:/tmp/cvs-serv28423/lib/python/Products/ZCatalog
Modified Files:
Tag: Zope-2_7-branch
CatalogBrains.py
Log Message:
Reduce catalog brains tendancy to eat conflict errors which could result in rand
om loss of valid results in high-concurrency situations. This problem is especially bad for applications (like CMF) that rely on catalog results as a way to get
a list of objects to act on.
=== Zope/lib/python/Products/ZCatalog/CatalogBrains.py 1.8 => 1.8.44.1 ===
--- Zope/lib/python/Products/ZCatalog/CatalogBrains.py:1.8 Mon Sep 30 14:05:40 2002
+++ Zope/lib/python/Products/ZCatalog/CatalogBrains.py Tue Mar 23 15:27:23 2004
@@ -30,25 +30,24 @@
return self.aq_parent.getpath(self.data_record_id_)
def getURL(self, relative=0):
- """Try to generate a URL for this record"""
- try:
- return self.REQUEST.physicalPathToURL(self.getPath(), relative)
- except:
- return self.getPath()
+ """Generate a URL for this record"""
+ # XXX The previous implementation attempted to eat errors coming from
+ # REQUEST.physicalPathToURL. Unfortunately it also ate
+ # ConflictErrors (from getPath), which is bad. Staring at the
+ # relevent code in HTTPRequest.py it's unclear to me what could be
+ # raised by it so I'm removing the exception handling here all
+ # together. If undesired exceptions get raised somehow we should
+ # avoid bare except band-aids and find a real solution.
+ return self.REQUEST.physicalPathToURL(self.getPath(), relative)
def getObject(self, REQUEST=None):
- """Try to return the object for this record"""
- try:
- obj = self.aq_parent.unrestrictedTraverse(self.getPath())
- if not obj:
- if REQUEST is None:
- REQUEST = self.REQUEST
- obj = self.aq_parent.resolve_url(self.getPath(), REQUEST)
- return obj
- except:
- zLOG.LOG('CatalogBrains', zLOG.INFO, 'getObject raised an error',
- error=sys.exc_info())
- pass
+ """Return the object for this record
+
+ Will return None if the object cannot be found via its cataloged path
+ (i.e., it was deleted or moved without recataloging), or if the user is
+ not authorized to access an object along the path.
+ """
+ return self.aq_parent.restrictedTraverse(self.getPath(), None)
def getRID(self):
"""Return the record ID for this object."""
More information about the Zope-Checkins
mailing list