[Checkins] SVN: zope.site/trunk/ Don't fail when changing component registry bases while moving ISite object to non-ISite object.

Dan Korostelev nadako at gmail.com
Sat Feb 28 01:30:55 EST 2009


Log message for revision 97366:
  Don't fail when changing component registry bases while moving ISite object to non-ISite object.
  
  Allow specify whether to create 'default' SiteManagementFolder on initializing LocalSiteManager. Use the ``default_folder`` argument.

Changed:
  U   zope.site/trunk/CHANGES.txt
  U   zope.site/trunk/src/zope/site/site.py
  U   zope.site/trunk/src/zope/site/site.txt

-=-
Modified: zope.site/trunk/CHANGES.txt
===================================================================
--- zope.site/trunk/CHANGES.txt	2009-02-28 06:20:43 UTC (rev 97365)
+++ zope.site/trunk/CHANGES.txt	2009-02-28 06:30:54 UTC (rev 97366)
@@ -8,6 +8,12 @@
 - Import symbols moved from zope.traversing to zope.location from the new
   location.
 
+- Don't fail when changing component registry bases while moving ISite
+  object to non-ISite object.
+
+- Allow specify whether to create 'default' SiteManagementFolder on
+  initializing LocalSiteManager. Use the ``default_folder`` argument.
+
 3.6.0 (2009-1-31)
 -----------------
 

Modified: zope.site/trunk/src/zope/site/site.py
===================================================================
--- zope.site/trunk/src/zope/site/site.py	2009-02-28 06:20:43 UTC (rev 97365)
+++ zope.site/trunk/src/zope/site/site.py	2009-02-28 06:30:54 UTC (rev 97366)
@@ -161,7 +161,7 @@
 
         super(LocalSiteManager, self)._setBases(bases)
 
-    def __init__(self, site):
+    def __init__(self, site, default_folder=True):
         # Locate the site manager
         self.__parent__ = site
         self.__name__ = '++etc++site'
@@ -174,10 +174,11 @@
             next = zope.component.getGlobalSiteManager()
         self.__bases__ = (next, )
 
-        # Setup default site management folder
-        folder = SiteManagementFolder()
-        zope.event.notify(ObjectCreatedEvent(folder))
-        self['default'] = folder
+        # Setup default site management folder if requested
+        if default_folder:
+            folder = SiteManagementFolder()
+            zope.event.notify(ObjectCreatedEvent(folder))
+            self['default'] = folder
 
     def _init_registries(self):
         self.adapters = _LocalAdapterRegistry()
@@ -253,4 +254,6 @@
     """After a site is moved, its site manager links have to be updated."""
     if event.newParent is not None:
         next = _findNextSiteManager(site)
+        if next is None:
+            next = zope.component.getGlobalSiteManager()
         site.getSiteManager().__bases__ = (next, )

Modified: zope.site/trunk/src/zope/site/site.txt
===================================================================
--- zope.site/trunk/src/zope/site/site.txt	2009-02-28 06:20:43 UTC (rev 97365)
+++ zope.site/trunk/src/zope/site/site.txt	2009-02-28 06:30:54 UTC (rev 97366)
@@ -116,6 +116,13 @@
   >>> default.__class__
   <class 'zope.site.site.SiteManagementFolder'>
 
+However, you can tell not to create the default site manager folder on
+LocalSiteManager creation:
+
+  >>> nodefault = site.LocalSiteManager(myfolder, default_folder=False)
+  >>> 'default' in nodefault
+  False
+
 You can easily create a new site management folder:
 
   >>> sm['mySMF'] = site.SiteManagementFolder()
@@ -314,7 +321,7 @@
   >>> myfolder.getSiteManager().subs
   ()
 
-Finally, we make a copy of `myfolder21` and add it as `myfolder11` to
+Now, we make a copy of `myfolder21` and add it as `myfolder11` to
 `myfolder`:
 
   # Make sure that our interfaces and classes are picklable.
@@ -325,8 +332,8 @@
   >>> sys.modules['zope.site.tests'].MyUtility = MyUtility
   >>> MyUtility.__module__ = 'zope.site.tests'
 
-  >>> from zope.location.pickling import locationCopy
-  >>> myfolder['myfolder11'] = locationCopy(myfolder2['myfolder21'])
+  >>> from zope.copy import copy
+  >>> myfolder['myfolder11'] = copy(myfolder2['myfolder21'])
 
   >>> myfolder11 = myfolder['myfolder11']
   >>> myfolder11.getSiteManager().__bases__ == (myfolder.getSiteManager(), )
@@ -335,3 +342,15 @@
   True
   >>> myfolder2.getSiteManager().subs[0] is myfolder21.getSiteManager()
   True
+
+Finally, let's check that everything works fine when our folder is moved
+to the folder that doesn't contain any site manager. Our folder's
+sitemanager's bases should be set to global site manager.
+
+  >>> myfolder11.getSiteManager().__bases__ == (myfolder.getSiteManager(), )
+  True
+
+  >>> nosm = folder.Folder()
+  >>> nosm['root'] = myfolder11
+  >>> myfolder11.getSiteManager().__bases__ == (gsm, )
+  True



More information about the Checkins mailing list