[Erp5-report] r38639 jm - /erp5/trunk/products/ERP5Type/patches/getSite.py

nobody at svn.erp5.org nobody at svn.erp5.org
Sat Sep 25 23:18:02 CEST 2010


Author: jm
Date: Sat Sep 25 23:18:01 2010
New Revision: 38639

URL: http://svn.erp5.org?rev=38639&view=rev
Log:
Fixes to zope.site.hooks.getSite for Zope 2.8 and unit tests

Modified:
    erp5/trunk/products/ERP5Type/patches/getSite.py

Modified: erp5/trunk/products/ERP5Type/patches/getSite.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/patches/getSite.py?rev=38639&r1=38638&r2=38639&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/patches/getSite.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/patches/getSite.py [utf8] Sat Sep 25 23:18:01 2010
@@ -1,9 +1,9 @@
-from zLOG import LOG
+from Products.ERP5Type import Globals
 module_name = 'zope.site.hooks'
-native_setsite = False
 try:
   hooks = __import__(module_name, {}, {}, module_name)
-  native = True
+  _getSite = hooks.getSite
+  _setSite = hooks.setSite
 except ImportError:
   # backwards compatibility for Zope < 2.12
   import imp, sys
@@ -12,49 +12,29 @@ except ImportError:
     site = zope.site
   except:
     sys.modules['zope.site'] = zope.site = imp.new_module('zope.site')
-
   sys.modules[module_name] = hooks = imp.new_module(module_name)
-  def setSite(foo=None):
-    pass
-  hooks.setSite = setSite
-  def getSite(foo=None):
+
+  def _getSite():
     return None
-  hooks.getSite = getSite
+  def _setSite(site=None):
+    request = Globals.get_request()
+    if site is not None and site not in request.get('PARENTS', ()):
+      request['PARENTS'] = [site]
 
 # patch getSite so that it works everywhere
-from Products.ERP5Type.Globals import get_request
-
-oldgetsite = hooks.getSite
 def getSite():
-  try:
-    x = oldgetsite()
-    # this should be enough for Zope 2.12
-    if x is not None:
-      return x
-  except:
-    if native_setsite:
-      # this should not happen on 2.12, log it
-      import traceback; traceback.print_stack()
-      LOG('getSite() cant retrieve the site', 100,
-          'setSite() should have been called earlier on')
-    pass
-  # and Zope 2.8 needs to use the request
-  parents = get_request()['PARENTS']
-
-  portal = None
-  for item in parents:
-    if item.meta_type == 'ERP5 Site':
-      portal = item
-      break
-
-  if portal is None:
-    # not perfect?
-    try:
-      portal = parents[-1].getPortalObject()
-    except:
-      import traceback; traceback.print_stack()
-      raise AttributeError("getSite() cant retrieve the site.")
-
-  return portal
+  site = _getSite()
+  if site is None:
+    parents = Globals.get_request()['PARENTS']
+    for site in parents[::-1]:
+      if getattr(site, 'getPortalObject', None) is not None:
+        break
+    else:
+      raise AttributeError("getSite() can't retrieve the site")
+  return site
 hooks.getSite = getSite
 
+def setSite(site=None):
+  _setSite(site)
+  # TODO: check if caches related to portal types as classes must be invalidated
+hooks.setSite = setSite




More information about the Erp5-report mailing list