[Checkins] SVN: BTrees/branches/py3k/ Factor out check for missing MERGE_DEFAULT to saner spot.

Tres Seaver cvs-admin at zope.org
Wed Dec 12 14:40:59 UTC 2012


Log message for revision 128614:
  Factor out check for missing MERGE_DEFAULT to saner spot.

Changed:
  _U  BTrees/branches/py3k/
  U   BTrees/branches/py3k/BTrees/_base.py
  U   BTrees/branches/py3k/BTrees/tests/test__base.py

-=-
Modified: BTrees/branches/py3k/BTrees/_base.py
===================================================================
--- BTrees/branches/py3k/BTrees/_base.py	2012-12-12 14:40:58 UTC (rev 128613)
+++ BTrees/branches/py3k/BTrees/_base.py	2012-12-12 14:40:59 UTC (rev 128614)
@@ -1278,14 +1278,10 @@
 
 def _prepMergeIterators(o1, o2):
     MERGE_DEFAULT = getattr(o1, 'MERGE_DEFAULT', None)
+    if MERGE_DEFAULT is None:
+        raise TypeError("invalid set operation")
     i1 = _SetIteration(o1, True, MERGE_DEFAULT)
     i2 = _SetIteration(o2, True, MERGE_DEFAULT)
-    if MERGE_DEFAULT is None:
-        if i1.useValues:
-            if (not i2.useValues):
-                raise TypeError("invalid set operation")
-        else:
-            raise TypeError("invalid set operation")
     return i1, i2
 
 def weightedUnion(set_type, o1, o2, w1=1, w2=1):

Modified: BTrees/branches/py3k/BTrees/tests/test__base.py
===================================================================
--- BTrees/branches/py3k/BTrees/tests/test__base.py	2012-12-12 14:40:58 UTC (rev 128613)
+++ BTrees/branches/py3k/BTrees/tests/test__base.py	2012-12-12 14:40:59 UTC (rev 128614)
@@ -2645,6 +2645,17 @@
         rhs = self._makeSet('a', 'b', 'c')
         self.assertRaises(TypeError, self._callFUT, lhs.__class__, lhs, rhs)
 
+    def test_lhs_mapping_wo_MERGE_rhs_mapping(self):
+        class _MappingWoMerge(dict):
+            def MERGE_DEFAULT(self):
+                return 1
+            def MERGE_WEIGHT(self, v, w):
+                return v
+        lhs = _MappingWoMerge({'a': 13, 'b': 12, 'c': 11})
+        lhs._mapping_type = _MappingWoMerge
+        rhs = self._makeMapping({'a': 1, 'b': 2, 'c': 3})
+        self.assertRaises(TypeError, self._callFUT, lhs.__class__, lhs, rhs)
+
     def test_lhs_set_wo_MERGE_DEFAULT_rhs_mapping(self):
         lhs = self._makeSet('a', 'd')
         lhs.MERGE = lambda v1, w1, v2, w2: (v1 * w1) + (v2 * w2)
@@ -2736,6 +2747,17 @@
         rhs = {'b': 22, 'd': 14}
         self.assertRaises(TypeError, self._callFUT, lhs.__class__, lhs, rhs)
 
+    def test_lhs_mapping_wo_MERGE_rhs_mapping(self):
+        class _MappingWoMerge(dict):
+            def MERGE_DEFAULT(self):
+                return 1
+            def MERGE_WEIGHT(self, v, w):
+                return v
+        lhs = _MappingWoMerge({'a': 13, 'b': 12, 'c': 11})
+        lhs._mapping_type = _MappingWoMerge
+        rhs = self._makeMapping({'a': 1, 'b': 2, 'c': 3})
+        self.assertRaises(TypeError, self._callFUT, lhs.__class__, lhs, rhs)
+
     def test_lhs_set_wo_MERGE_DEFAULT_rhs_set(self):
         lhs = self._makeSet('a', 'd')
         lhs.MERGE = lambda v1, w1, v2, w2: (v1 * w1) + (v2 * w2)



More information about the checkins mailing list