diff --git a/product/ZSQLCatalog/Extensions/__init__.py b/product/ZSQLCatalog/Extensions/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/product/ZSQLCatalog/Extensions/zsqlbrain.py b/product/ZSQLCatalog/Extensions/zsqlbrain.py new file mode 100644 index 0000000000000000000000000000000000000000..49f8a330cf35abcf9a858a61c11973c1ea3b99ca --- /dev/null +++ b/product/ZSQLCatalog/Extensions/zsqlbrain.py @@ -0,0 +1,107 @@ +############################################################################## +# +# Copyright (c) 2002 Nexedi SARL. All Rights Reserved. +# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE +# +############################################################################## + +import string +import Acquisition +import sys +from ZODB.POSException import ConflictError + +from AccessControl import ClassSecurityInfo +from AccessControl.SecurityInfo import allow_class + +from zLOG import LOG + +class ZSQLBrain(Acquisition.Implicit): + security = ClassSecurityInfo() + security.declareObjectPublic() + + def _aq_dynamic(self, name): + """Acquire an attribute from a real object. + """ + if name.startswith('__') : + return None + o = self.getObject() + return getattr(o, name, None) + + def getURL(self): + return self.path + + def getUrl(self): + return self.path + + def getPath(self): + return self.path + + def getUid(self): + return self.uid + + getRID = getUid + + def getObject(self, REQUEST=None): + """Try to return the object for this record""" + if 'path' not in dir(self) and 'PATH' not in dir(self): + raise ValueError, "Unable to getObject from ZSQLBrain if ZSQL Method "\ + "does not retrieves the `path` column from catalog table." + try: + obj = self.aq_parent.unrestrictedTraverse(self.getPath()) + if obj is None: + if REQUEST is None: + REQUEST = self.REQUEST + obj = self.aq_parent.portal_catalog.resolve_url( + self.getPath(), REQUEST) + return obj + except ConflictError: + raise + except: + LOG("ZCatalog WARNING", 0, + "Could not access object path %s" % self.getPath(), + error=sys.exc_info() ) + return None + + def absolute_url(self, relative=0): + """ + Default method used to return the path stored in the Catalog. + However, if virtual hosting is implemented, we must return + a value which is compatible with the standard absolute_url + behaviour + + And if absolute_url is invoked within a Web Site, + additional Web Site behaviour is required + + Implementation of absolute_url therefore consists in using + physicalPathToURL defined in the REQUEST so that absolute_url + is consistent with HTTPRequest implementation. + """ + return self.REQUEST.physicalPathToURL(self.path, relative=relative) + + def resolve_url(self, path, REQUEST): + """ + Taken from ZCatalog + + Attempt to resolve a url into an object in the Zope + namespace. The url may be absolute or a catalog path + style url. If no object is found, None is returned. + No exceptions are raised. + """ + script=REQUEST.script + if string.find(path, script) != 0: + path='%s/%s' % (script, path) + try: + return REQUEST.resolve_url(path) + except ConflictError: + raise + except: + pass + +allow_class(ZSQLBrain) diff --git a/product/ZSQLCatalog/zsqlbrain.py b/product/ZSQLCatalog/zsqlbrain.py index 49f8a330cf35abcf9a858a61c11973c1ea3b99ca..e7fc7052ca4086e6a0758a77b5672706b2e23927 100644 --- a/product/ZSQLCatalog/zsqlbrain.py +++ b/product/ZSQLCatalog/zsqlbrain.py @@ -1,7 +1,6 @@ ############################################################################## # -# Copyright (c) 2002 Nexedi SARL. All Rights Reserved. -# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. +# Copyright (c) 2006 Nexedi SARL. All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. @@ -12,96 +11,8 @@ # ############################################################################## -import string -import Acquisition -import sys -from ZODB.POSException import ConflictError +# This file is only for backward compatibility. Now the zsqlbrain.py resides +# in the directory Extensions, but the class ZSQLBrain is referred to based on +# the Product directory from other Products. -from AccessControl import ClassSecurityInfo -from AccessControl.SecurityInfo import allow_class - -from zLOG import LOG - -class ZSQLBrain(Acquisition.Implicit): - security = ClassSecurityInfo() - security.declareObjectPublic() - - def _aq_dynamic(self, name): - """Acquire an attribute from a real object. - """ - if name.startswith('__') : - return None - o = self.getObject() - return getattr(o, name, None) - - def getURL(self): - return self.path - - def getUrl(self): - return self.path - - def getPath(self): - return self.path - - def getUid(self): - return self.uid - - getRID = getUid - - def getObject(self, REQUEST=None): - """Try to return the object for this record""" - if 'path' not in dir(self) and 'PATH' not in dir(self): - raise ValueError, "Unable to getObject from ZSQLBrain if ZSQL Method "\ - "does not retrieves the `path` column from catalog table." - try: - obj = self.aq_parent.unrestrictedTraverse(self.getPath()) - if obj is None: - if REQUEST is None: - REQUEST = self.REQUEST - obj = self.aq_parent.portal_catalog.resolve_url( - self.getPath(), REQUEST) - return obj - except ConflictError: - raise - except: - LOG("ZCatalog WARNING", 0, - "Could not access object path %s" % self.getPath(), - error=sys.exc_info() ) - return None - - def absolute_url(self, relative=0): - """ - Default method used to return the path stored in the Catalog. - However, if virtual hosting is implemented, we must return - a value which is compatible with the standard absolute_url - behaviour - - And if absolute_url is invoked within a Web Site, - additional Web Site behaviour is required - - Implementation of absolute_url therefore consists in using - physicalPathToURL defined in the REQUEST so that absolute_url - is consistent with HTTPRequest implementation. - """ - return self.REQUEST.physicalPathToURL(self.path, relative=relative) - - def resolve_url(self, path, REQUEST): - """ - Taken from ZCatalog - - Attempt to resolve a url into an object in the Zope - namespace. The url may be absolute or a catalog path - style url. If no object is found, None is returned. - No exceptions are raised. - """ - script=REQUEST.script - if string.find(path, script) != 0: - path='%s/%s' % (script, path) - try: - return REQUEST.resolve_url(path) - except ConflictError: - raise - except: - pass - -allow_class(ZSQLBrain) +from Products.ZSQLCatalog.Extensions.zsqlbrain import ZSQLBrain