[Checkins] SVN: Products.BTreeFolder2/trunk/ Implement the full dictionary protocol including `__getitem__`, `__delitem__`, `__setitem__`, `__nonzero__`, `__iter__` and `__contains__`.

Hanno Schlichting hannosch at hannosch.eu
Sun Jul 11 08:36:23 EDT 2010


Log message for revision 114587:
  Implement the full dictionary protocol including `__getitem__`, `__delitem__`, `__setitem__`, `__nonzero__`, `__iter__` and `__contains__`.
  

Changed:
  U   Products.BTreeFolder2/trunk/CHANGES.txt
  U   Products.BTreeFolder2/trunk/src/Products/BTreeFolder2/BTreeFolder2.py

-=-
Modified: Products.BTreeFolder2/trunk/CHANGES.txt
===================================================================
--- Products.BTreeFolder2/trunk/CHANGES.txt	2010-07-11 12:27:54 UTC (rev 114586)
+++ Products.BTreeFolder2/trunk/CHANGES.txt	2010-07-11 12:36:23 UTC (rev 114587)
@@ -4,4 +4,7 @@
 2.13.0 (unreleased)
 -------------------
 
+- Implement the full dictionary protocol including `__getitem__`,
+  `__delitem__`, `__setitem__`, `__nonzero__`, `__iter__` and `__contains__`.
+
 - Released as separate package.

Modified: Products.BTreeFolder2/trunk/src/Products/BTreeFolder2/BTreeFolder2.py
===================================================================
--- Products.BTreeFolder2/trunk/src/Products/BTreeFolder2/BTreeFolder2.py	2010-07-11 12:27:54 UTC (rev 114586)
+++ Products.BTreeFolder2/trunk/src/Products/BTreeFolder2/BTreeFolder2.py	2010-07-11 12:36:23 UTC (rev 114587)
@@ -311,6 +311,12 @@
         """Returns the number of items in the folder."""
         return self._count()
 
+    def __len__(self):
+        return self.objectCount()
+
+    def __nonzero__(self):
+        return True
+
     security.declareProtected(access_contents_information, 'has_key')
     def has_key(self, id):
         """Indicates whether the folder has an item by ID.
@@ -339,6 +345,12 @@
         else:
             return set.keys()
 
+    def __contains__(self, name):
+        return name in self.objectIds()
+
+    def __iter__(self):
+        return iter(self.objectIds())
+
     security.declareProtected(access_contents_information, 'objectValues')
     def objectValues(self, spec=None):
         # Returns a list of actual subobjects of the current object.
@@ -421,6 +433,9 @@
 
         return id
 
+    def __setitem__(self, key, value):
+        return self._setObject(key, value)
+
     def _delObject(self, id, dp=1, suppress_events=False):
         ob = self._getOb(id)
 
@@ -435,8 +450,10 @@
             notify(ObjectRemovedEvent(ob, self, id))
             notifyContainerModified(self)
 
+    def __delitem__(self, name):
+        return self._delObject(id=name)
+
     # Aliases for mapping-like access.
-    __len__ = objectCount
     keys = objectIds
     values = objectValues
     items = objectItems
@@ -448,6 +465,9 @@
     def get(self, name, default=None):
         return self._getOb(name, default)
 
+    def __getitem__(self, name):
+        return self._getOb(name)
+
     # Utility for generating unique IDs.
 
     security.declareProtected(access_contents_information, 'generateId')



More information about the checkins mailing list