Author: Philip Jenvey <[email protected]>
Branch:
Changeset: r64271:32dd588a5e23
Date: 2013-05-17 16:41 -0700
http://bitbucket.org/pypy/pypy/changeset/32dd588a5e23/
Log: add missing __sub__ to viewitems/keys and kill the set like methods
from viewvalues which aren't supported
diff --git a/pypy/objspace/std/dictmultiobject.py
b/pypy/objspace/std/dictmultiobject.py
--- a/pypy/objspace/std/dictmultiobject.py
+++ b/pypy/objspace/std/dictmultiobject.py
@@ -1273,6 +1273,14 @@
def descr_len(self, space):
return space.len(self.w_dict)
+class SetLikeDictView(object):
+ _mixin_ = True
+
+ def descr_sub(self, space, w_otherview):
+ w_set = space.call_function(space.w_set, self)
+ space.call_method(w_set, "difference_update", w_otherview)
+ return w_set
+
def descr_and(self, space, w_otherview):
w_set = space.call_function(space.w_set, self)
space.call_method(w_set, "intersection_update", w_otherview)
@@ -1288,11 +1296,11 @@
space.call_method(w_set, "symmetric_difference_update", w_otherview)
return w_set
-class W_DictViewItemsObject(W_DictViewObject):
+class W_DictViewItemsObject(W_DictViewObject, SetLikeDictView):
def descr_iter(self, space):
return W_DictMultiIterItemsObject(space, self.w_dict.iteritems())
-class W_DictViewKeysObject(W_DictViewObject):
+class W_DictViewKeysObject(W_DictViewObject, SetLikeDictView):
def descr_iter(self, space):
return W_DictMultiIterKeysObject(space, self.w_dict.iterkeys())
@@ -1306,6 +1314,7 @@
__eq__ = interp2app(W_DictViewItemsObject.descr_eq),
__len__ = interp2app(W_DictViewItemsObject.descr_len),
__iter__ = interp2app(W_DictViewItemsObject.descr_iter),
+ __sub__ = interp2app(W_DictViewItemsObject.descr_sub),
__and__ = interp2app(W_DictViewItemsObject.descr_and),
__or__ = interp2app(W_DictViewItemsObject.descr_or),
__xor__ = interp2app(W_DictViewItemsObject.descr_xor)
@@ -1317,6 +1326,7 @@
__eq__ = interp2app(W_DictViewKeysObject.descr_eq),
__len__ = interp2app(W_DictViewKeysObject.descr_len),
__iter__ = interp2app(W_DictViewKeysObject.descr_iter),
+ __sub__ = interp2app(W_DictViewKeysObject.descr_sub),
__and__ = interp2app(W_DictViewKeysObject.descr_and),
__or__ = interp2app(W_DictViewKeysObject.descr_or),
__xor__ = interp2app(W_DictViewKeysObject.descr_xor)
@@ -1328,7 +1338,4 @@
__eq__ = interp2app(W_DictViewValuesObject.descr_eq),
__len__ = interp2app(W_DictViewValuesObject.descr_len),
__iter__ = interp2app(W_DictViewValuesObject.descr_iter),
- __and__ = interp2app(W_DictViewValuesObject.descr_and),
- __or__ = interp2app(W_DictViewValuesObject.descr_or),
- __xor__ = interp2app(W_DictViewValuesObject.descr_xor)
)
diff --git a/pypy/objspace/std/test/test_dictmultiobject.py
b/pypy/objspace/std/test/test_dictmultiobject.py
--- a/pypy/objspace/std/test/test_dictmultiobject.py
+++ b/pypy/objspace/std/test/test_dictmultiobject.py
@@ -774,6 +774,13 @@
assert d1.viewkeys() ^ set(d2.viewkeys()) == set('ac')
assert d1.viewkeys() ^ set(d3.viewkeys()) == set('abde')
+ assert d1.viewkeys() - d1.viewkeys() == set()
+ assert d1.viewkeys() - d2.viewkeys() == set('a')
+ assert d1.viewkeys() - d3.viewkeys() == set('ab')
+ assert d1.viewkeys() - set(d1.viewkeys()) == set()
+ assert d1.viewkeys() - set(d2.viewkeys()) == set('a')
+ assert d1.viewkeys() - set(d3.viewkeys()) == set('ab')
+
def test_items_set_operations(self):
d1 = {'a': 1, 'b': 2}
d2 = {'a': 2, 'b': 2}
@@ -802,6 +809,10 @@
assert (d1.viewitems() ^ d3.viewitems() ==
set([('a', 1), ('b', 2), ('d', 4), ('e', 5)]))
+ assert d1.viewitems() - d1.viewitems() == set()
+ assert d1.viewitems() - d2.viewitems() == set([('a', 1)])
+ assert d1.viewitems() - d3.viewitems() == set([('a', 1), ('b', 2)])
+
class AppTestStrategies(object):
def setup_class(cls):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit