[Checkins] SVN: Sandbox/faassen/iface/src/iface/ fixed up MultiMap	handling except for the back-tracking part
    Thomas Lotze 
    tl at gocept.com
       
    Wed Jan  6 18:39:24 EST 2010
    
    
  
Log message for revision 107756:
  fixed up MultiMap handling except for the back-tracking part
Changed:
  U   Sandbox/faassen/iface/src/iface/__init__.py
  U   Sandbox/faassen/iface/src/iface/mapping.py
  U   Sandbox/faassen/iface/src/iface/mapping.txt
-=-
Modified: Sandbox/faassen/iface/src/iface/__init__.py
===================================================================
--- Sandbox/faassen/iface/src/iface/__init__.py	2010-01-06 22:55:47 UTC (rev 107755)
+++ Sandbox/faassen/iface/src/iface/__init__.py	2010-01-06 23:39:24 UTC (rev 107756)
@@ -1,2 +1,2 @@
-from iface.mapping import Map, MapKey
+from iface.mapping import Map, MultiMap, MapKey
 
Modified: Sandbox/faassen/iface/src/iface/mapping.py
===================================================================
--- Sandbox/faassen/iface/src/iface/mapping.py	2010-01-06 22:55:47 UTC (rev 107755)
+++ Sandbox/faassen/iface/src/iface/mapping.py	2010-01-06 23:39:24 UTC (rev 107756)
@@ -53,21 +53,21 @@
         key = (arity,) + tuple(key)
         map = self._by_arity
         for k in key[:-1]:
-           submap = map.get(k)
+           submap = dict(map).get(k)
            if submap is None:
                submap = map[k] = Map()
            map = submap
         map[key[-1]] = value
-                    
-    def __delitem__(self, key, value):
+
+    def __delitem__(self, key):
         arity = len(key)
         key = (arity,) + tuple(key)
         map = self._by_arity
         for k in key[:-1]:
             map = dict(map)[k]
         del map[key[-1]]
-    
-    def __getitem__(self, key, value):
+
+    def __getitem__(self, key):
         arity = len(key)
         key = (arity,) + tuple(key)
         map = self._by_arity
Modified: Sandbox/faassen/iface/src/iface/mapping.txt
===================================================================
--- Sandbox/faassen/iface/src/iface/mapping.txt	2010-01-06 22:55:47 UTC (rev 107755)
+++ Sandbox/faassen/iface/src/iface/mapping.txt	2010-01-06 23:39:24 UTC (rev 107756)
@@ -169,8 +169,46 @@
   >>> two = MapKey('two', [one])
   >>> three = MapKey('three', [two])
 
-Now we create a MultiMap
+Now we create a MultiMap and register a few values by MultiMapKeys::
 
+  >>> from iface import MultiMap
+  >>> multimap = MultiMap()
+
+  >>> multimap[(alpha, three)] = u'Value for alpha, three'
+  >>> multimap[(beta, two)] = u'Value for beta, two'
+
+When looking up any of these two MultiMapKeys, we'll get back the respective
+values::
+
+  >>> multimap[(alpha, three)]
+  u'Value for alpha, three'
+  >>> multimap[(beta, two)]
+  u'Value for beta, two'
+
+We'll also be able to look up MultiMapKeys that are more specific than
+anything registered in at least one component. When a look-up could find two
+less specific MultiMapKeys, the one with the more specific first component is
+preferred::
+
+  >>> multimap[(gamma, two)]
+  u'Value for beta, two'
+  >>> multimap[(beta, three)]
+  u'Value for beta, two'
+  >>> multimap[(gamma, three)]
+  u'Value for beta, two'
+
+However, we cannot look up MultiMapKeys that are less specific than anything
+registered in at least one component::
+
+  >>> multimap[(alpha, one)]
+  Traceback (most recent call last):
+    ...
+  KeyError: <MapKey: 'one'>
+  >>> multimap[(alpha, two)]
+  Traceback (most recent call last):
+    ...
+  KeyError: <MapKey: 'two'>
+
 next: multi lookup. What is the behavior of zope.interface? Do earlier
 entries in the lookup list always weigh more heavily than the second
 one? We need backtracking in case we don't find anything for the next
    
    
More information about the checkins
mailing list