[Zope-Checkins] SVN: Zope/trunk/doc/WHATSNEW.rst Added a chapter about using the IContainer API with object managers
Hanno Schlichting
plone at hannosch.info
Tue Feb 24 17:34:13 EST 2009
Log message for revision 97226:
Added a chapter about using the IContainer API with object managers
Changed:
U Zope/trunk/doc/WHATSNEW.rst
-=-
Modified: Zope/trunk/doc/WHATSNEW.rst
===================================================================
--- Zope/trunk/doc/WHATSNEW.rst 2009-02-24 22:32:19 UTC (rev 97225)
+++ Zope/trunk/doc/WHATSNEW.rst 2009-02-24 22:34:12 UTC (rev 97226)
@@ -247,3 +247,80 @@
understand this. The next time you want to use a package or make your own code
more reusable outside of Zope2, this should be of tremendous help.
+
+Object managers and IContainer
+------------------------------
+
+One of the fundamental parts of Zope2 is the object file system as implemented
+in the `OFS` package. A central part of this package is an underlying class
+called `ObjectManager`. It is a base class of the standard Folder used
+for many container-ish classes inside Zope2.
+
+The API to access objects in an object manager or to add objects to one has
+been written many years ago. Since those times Python itself has gotten
+standard ways to access objects in containers and work with them. Those Python
+API's are most familiar to most developers working with Zope. The Zope
+components libraries have formalized those API's into the general IContainer
+interface in the zope.container package. In this version of Zope2 the standard
+OFS ObjectManager fully implements this IContainer interface in addition to its
+old API.
+
+ >>> from zope.container.interfaces import IContainer
+ >>> from OFS.ObjectManager import ObjectManager
+ >>> IContainer.implementedBy(ObjectManager)
+ True
+
+You can now write any of your code in a way that no longer ties it to object
+managers alone, but can support any class implementing IContainer instead. In
+conjunction with the Acquisition changes above, this will increase your chances
+of being able to reuse existing packages not specifically written for Zope2 in
+a major way.
+
+Here's an example of how you did work with object managers before::
+
+ >>> from OFS.Folder import Folder
+ >>> from OFS.SimpleItem import SimpleItem
+
+ >>> folder = Folder('folder')
+ >>> item1 = SimpleItem('item1')
+ >>> item2 = SimpleItem('item1')
+
+ >>> result = folder._setObject('item1', item1)
+ >>> result = folder._setObject('item2', item2)
+
+ >>> folder.objectIds()
+ ['item1', 'item2']
+
+ >>> folder.objectValues()
+ [<SimpleItem at folder/>, <SimpleItem at folder/>]
+
+ >>> if folder.hasObject('item2')
+ ... folder._delObject('item2')
+
+Instead of this special API, you can now use::
+
+ >>> from OFS.Folder import Folder
+ >>> from OFS.SimpleItem import SimpleItem
+
+ >>> folder = Folder('folder')
+ >>> item1 = SimpleItem('item1')
+ >>> item2 = SimpleItem('item1')
+
+ >>> folder['item1'] = item1
+ >>> folder['item2'] = item2
+
+ >>> folder.keys()
+ ['item1', 'item2']
+
+ >>> folder.values()
+ [<SimpleItem at folder/>, <SimpleItem at folder/>]
+
+ >>> folder.get('item1')
+ <SimpleItem at folder/>
+
+ >>> if 'item2' in folder:
+ ... del folder['item2']
+
+ >>> folder.items()
+ [('item1', <SimpleItem at folder/>)]
+
More information about the Zope-Checkins
mailing list