[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