[Zope-Checkins] CVS: Zope/lib/python/Products/ZCatalog -
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
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 => 220.127.116.11 ===
--- 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 @@
def getURL(self, relative=0):
- """Try to generate a URL for this record"""
- return self.REQUEST.physicalPathToURL(self.getPath(), relative)
- 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"""
- 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
- zLOG.LOG('CatalogBrains', zLOG.INFO, 'getObject raised an error',
+ """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)
"""Return the record ID for this object."""
More information about the Zope-Checkins