[pypy-commit] pypy py3k: Remove dict.has_key, and switch dict.{keys, values, items} to return views and remove the view* methods.
alex_gaynor
noreply at buildbot.pypy.org
Mon Nov 7 21:01:02 CET 2011
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: py3k
Changeset: r48873:866494936d4f
Date: 2011-11-07 15:00 -0500
http://bitbucket.org/pypy/pypy/changeset/866494936d4f/
Log: Remove dict.has_key, and switch dict.{keys,values,items} to return
views and remove the view* methods.
diff --git a/lib_pypy/_structseq.py b/lib_pypy/_structseq.py
--- a/lib_pypy/_structseq.py
+++ b/lib_pypy/_structseq.py
@@ -43,7 +43,7 @@
field.__name__ = name
dict['n_fields'] = len(fields_by_index)
- extra_fields = fields_by_index.items()
+ extra_fields = list(fields_by_index.items())
extra_fields.sort()
n_sequence_fields = 0
while extra_fields and extra_fields[0][0] == n_sequence_fields:
diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -199,11 +199,11 @@
def int_w(self, space):
raise OperationError(space.w_TypeError,
typed_unwrap_error_msg(space, "integer", self))
-
+
def uint_w(self, space):
raise OperationError(space.w_TypeError,
typed_unwrap_error_msg(space, "integer", self))
-
+
def bigint_w(self, space):
raise OperationError(space.w_TypeError,
typed_unwrap_error_msg(space, "integer", self))
@@ -543,9 +543,15 @@
def export_builtin_exceptions(self):
"""NOT_RPYTHON"""
w_dic = self.exceptions_module.getdict(self)
- w_keys = self.call_method(w_dic, "keys")
exc_types_w = {}
- for w_name in self.unpackiterable(w_keys):
+ w_iter = self.iter(w_dic)
+ while True:
+ try:
+ w_name = self.next(w_iter)
+ except OperationError, e:
+ if not e.match(self, self.w_StopIteration):
+ raise
+ break
name = self.str_w(w_name)
if not name.startswith('__'):
excname = name
diff --git a/pypy/interpreter/mixedmodule.py b/pypy/interpreter/mixedmodule.py
--- a/pypy/interpreter/mixedmodule.py
+++ b/pypy/interpreter/mixedmodule.py
@@ -57,7 +57,7 @@
if self.w_initialdict is None:
Module.init(self, space)
if not self.lazy and self.w_initialdict is None:
- self.w_initialdict = space.call_method(self.w_dict, 'items')
+ self.w_initialdict = space.call_method(self.w_dict, 'copy')
def get_applevel_name(cls):
@@ -121,7 +121,7 @@
w_value = self.get(name)
space.setitem(self.w_dict, space.new_interned_str(name), w_value)
self.lazy = False
- self.w_initialdict = space.call_method(self.w_dict, 'items')
+ self.w_initialdict = space.call_method(self.w_dict, 'copy')
return self.w_dict
def _freeze_(self):
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
@@ -477,7 +477,7 @@
class _UnwrappedIteratorMixin:
_mixin_ = True
-
+
def __init__(self, space, strategy, dictimplementation):
IteratorImplementation.__init__(self, space, dictimplementation)
self.iterator = strategy.unerase(dictimplementation.dstorage).iteritems()
@@ -601,8 +601,6 @@
def contains__DictMulti_ANY(space, w_dict, w_key):
return space.newbool(w_dict.getitem(w_key) is not None)
-dict_has_key__DictMulti_ANY = contains__DictMulti_ANY
-
def iter__DictMulti(space, w_dict):
return W_DictMultiIterObject(space, w_dict.iter(), KEYSITER)
@@ -672,14 +670,15 @@
update1_dict_dict(space, w_new, w_self)
return w_new
+
def dict_items__DictMulti(space, w_self):
- return space.newlist(w_self.items())
+ return W_DictViewItemsObject(space, w_self)
def dict_keys__DictMulti(space, w_self):
- return space.newlist(w_self.keys())
+ return W_DictViewKeysObject(space, w_self)
def dict_values__DictMulti(space, w_self):
- return space.newlist(w_self.values())
+ return W_DictViewValuesObject(space, w_self)
def dict_iteritems__DictMulti(space, w_self):
return W_DictMultiIterObject(space, w_self.iter(), ITEMSITER)
@@ -690,15 +689,6 @@
def dict_itervalues__DictMulti(space, w_self):
return W_DictMultiIterObject(space, w_self.iter(), VALUESITER)
-def dict_viewitems__DictMulti(space, w_self):
- return W_DictViewItemsObject(space, w_self)
-
-def dict_viewkeys__DictMulti(space, w_self):
- return W_DictViewKeysObject(space, w_self)
-
-def dict_viewvalues__DictMulti(space, w_self):
- return W_DictViewValuesObject(space, w_self)
-
def dict_clear__DictMulti(space, w_self):
w_self.clear()
diff --git a/pypy/objspace/std/dicttype.py b/pypy/objspace/std/dicttype.py
--- a/pypy/objspace/std/dicttype.py
+++ b/pypy/objspace/std/dicttype.py
@@ -7,14 +7,11 @@
dict_copy = SMM('copy', 1,
doc='D.copy() -> a shallow copy of D')
dict_items = SMM('items', 1,
- doc="D.items() -> list of D's (key, value) pairs, as"
- ' 2-tuples')
+ doc="D.items() -> a set-like object providing a view on D's item")
dict_keys = SMM('keys', 1,
- doc="D.keys() -> list of D's keys")
+ doc="D.keys() -> a set-like object providing a view on D's keys")
dict_values = SMM('values', 1,
- doc="D.values() -> list of D's values")
-dict_has_key = SMM('has_key', 2,
- doc='D.has_key(k) -> True if D has a key k, else False')
+ doc="D.values() -> an object providing a view on D's values")
dict_clear = SMM('clear', 1,
doc='D.clear() -> None. Remove all items from D.')
dict_get = SMM('get', 3, defaults=(None,),
@@ -43,12 +40,6 @@
doc='D.iterkeys() -> an iterator over the keys of D')
dict_itervalues = SMM('itervalues', 1,
doc='D.itervalues() -> an iterator over the values of D')
-dict_viewkeys = SMM('viewkeys', 1,
- doc="D.viewkeys() -> a set-like object providing a view on D's keys")
-dict_viewitems = SMM('viewitems', 1,
- doc="D.viewitems() -> a set-like object providing a view on D's items")
-dict_viewvalues = SMM('viewvalues', 1,
- doc="D.viewvalues() -> an object providing a view on D's values")
dict_reversed = SMM('__reversed__', 1)
def dict_reversed__ANY(space, w_dict):
@@ -81,10 +72,10 @@
currently_in_repr[dict_id] = 1
try:
items = []
- # XXX for now, we cannot use iteritems() at app-level because
- # we want a reasonable result instead of a RuntimeError
+ # XXX for now, we cannot use items() withut list at app-level
+ # because we want a reasonable result instead of a RuntimeError
# even if the dict is mutated by the repr() in the loop.
- for k, v in dict.items(d):
+ for k, v in list(dict.items(d)):
items.append(repr(k) + ": " + repr(v))
return "{" + ', '.join(items) + "}"
finally:
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
@@ -175,14 +175,9 @@
assert len(dd) == 1
raises(KeyError, dd.pop, 33)
- def test_has_key(self):
- d = {1: 2, 3: 4}
- assert d.has_key(1)
- assert not d.has_key(33)
-
def test_items(self):
d = {1: 2, 3: 4}
- its = d.items()
+ its = list(d.items())
its.sort()
assert its == [(1, 2), (3, 4)]
@@ -206,11 +201,11 @@
values = []
for k in d.itervalues():
values.append(k)
- assert values == d.values()
+ assert values == list(d.values())
def test_keys(self):
d = {1: 2, 3: 4}
- kys = d.keys()
+ kys = list(d.keys())
kys.sort()
assert kys == [1, 3]
@@ -323,9 +318,9 @@
def test_values(self):
d = {1: 2, 3: 4}
- vals = d.values()
+ vals = list(d.values())
vals.sort()
- assert vals == [2,4]
+ assert vals == [2, 4]
def test_eq(self):
d1 = {1: 2, 3: 4}
@@ -551,9 +546,9 @@
def test_empty_dict(self):
d = {}
raises(KeyError, d.popitem)
- assert d.items() == []
- assert d.values() == []
- assert d.keys() == []
+ assert list(d.items()) == []
+ assert list(d.values()) == []
+ assert list(d.keys()) == []
class AppTest_DictMultiObject(AppTest_DictObject):
@@ -570,7 +565,7 @@
a = A()
s = S("abc")
setattr(a, s, 42)
- key = a.__dict__.keys()[0]
+ key = next(iter(a.__dict__.keys()))
assert key == s
assert key is not s
assert type(key) is str
@@ -590,24 +585,24 @@
class AppTestDictViews:
def test_dictview(self):
d = {1: 2, 3: 4}
- assert len(d.viewkeys()) == 2
- assert len(d.viewitems()) == 2
- assert len(d.viewvalues()) == 2
+ assert len(d.keys()) == 2
+ assert len(d.items()) == 2
+ assert len(d.values()) == 2
def test_constructors_not_callable(self):
- kt = type({}.viewkeys())
+ kt = type({}.keys())
raises(TypeError, kt, {})
raises(TypeError, kt)
- it = type({}.viewitems())
+ it = type({}.items())
raises(TypeError, it, {})
raises(TypeError, it)
- vt = type({}.viewvalues())
+ vt = type({}.values())
raises(TypeError, vt, {})
raises(TypeError, vt)
def test_dict_keys(self):
d = {1: 10, "a": "ABC"}
- keys = d.viewkeys()
+ keys = d.keys()
assert len(keys) == 2
assert set(keys) == set([1, "a"])
assert keys == set([1, "a"])
@@ -619,15 +614,15 @@
assert "a" in keys
assert 10 not in keys
assert "Z" not in keys
- assert d.viewkeys() == d.viewkeys()
+ assert d.keys() == d.keys()
e = {1: 11, "a": "def"}
- assert d.viewkeys() == e.viewkeys()
+ assert d.keys() == e.keys()
del e["a"]
- assert d.viewkeys() != e.viewkeys()
+ assert d.keys() != e.keys()
def test_dict_items(self):
d = {1: 10, "a": "ABC"}
- items = d.viewitems()
+ items = d.items()
assert len(items) == 2
assert set(items) == set([(1, 10), ("a", "ABC")])
assert items == set([(1, 10), ("a", "ABC")])
@@ -642,36 +637,36 @@
assert () not in items
assert (1,) not in items
assert (1, 2, 3) not in items
- assert d.viewitems() == d.viewitems()
+ assert d.items() == d.items()
e = d.copy()
- assert d.viewitems() == e.viewitems()
+ assert d.items() == e.items()
e["a"] = "def"
- assert d.viewitems() != e.viewitems()
+ assert d.items() != e.items()
def test_dict_mixed_keys_items(self):
d = {(1, 1): 11, (2, 2): 22}
e = {1: 1, 2: 2}
- assert d.viewkeys() == e.viewitems()
- assert d.viewitems() != e.viewkeys()
+ assert d.keys() == e.items()
+ assert d.items() != e.keys()
def test_dict_values(self):
d = {1: 10, "a": "ABC"}
- values = d.viewvalues()
+ values = d.values()
assert set(values) == set([10, "ABC"])
assert len(values) == 2
def test_dict_repr(self):
d = {1: 10, "a": "ABC"}
assert isinstance(repr(d), str)
- r = repr(d.viewitems())
+ r = repr(d.items())
assert isinstance(r, str)
assert (r == "dict_items([('a', 'ABC'), (1, 10)])" or
r == "dict_items([(1, 10), ('a', 'ABC')])")
- r = repr(d.viewkeys())
+ r = repr(d.keys())
assert isinstance(r, str)
assert (r == "dict_keys(['a', 1])" or
r == "dict_keys([1, 'a'])")
- r = repr(d.viewvalues())
+ r = repr(d.values())
assert isinstance(r, str)
assert (r == "dict_values(['ABC', 10])" or
r == "dict_values([10, 'ABC'])")
@@ -680,53 +675,53 @@
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 2}
d3 = {'d': 4, 'e': 5}
- assert d1.viewkeys() & d1.viewkeys() == set('ab')
- assert d1.viewkeys() & d2.viewkeys() == set('b')
- assert d1.viewkeys() & d3.viewkeys() == set()
- assert d1.viewkeys() & set(d1.viewkeys()) == set('ab')
- assert d1.viewkeys() & set(d2.viewkeys()) == set('b')
- assert d1.viewkeys() & set(d3.viewkeys()) == set()
+ assert d1.keys() & d1.keys() == set('ab')
+ assert d1.keys() & d2.keys() == set('b')
+ assert d1.keys() & d3.keys() == set()
+ assert d1.keys() & set(d1.keys()) == set('ab')
+ assert d1.keys() & set(d2.keys()) == set('b')
+ assert d1.keys() & set(d3.keys()) == set()
- assert d1.viewkeys() | d1.viewkeys() == set('ab')
- assert d1.viewkeys() | d2.viewkeys() == set('abc')
- assert d1.viewkeys() | d3.viewkeys() == set('abde')
- assert d1.viewkeys() | set(d1.viewkeys()) == set('ab')
- assert d1.viewkeys() | set(d2.viewkeys()) == set('abc')
- assert d1.viewkeys() | set(d3.viewkeys()) == set('abde')
+ assert d1.keys() | d1.keys() == set('ab')
+ assert d1.keys() | d2.keys() == set('abc')
+ assert d1.keys() | d3.keys() == set('abde')
+ assert d1.keys() | set(d1.keys()) == set('ab')
+ assert d1.keys() | set(d2.keys()) == set('abc')
+ assert d1.keys() | set(d3.keys()) == set('abde')
- assert d1.viewkeys() ^ d1.viewkeys() == set()
- assert d1.viewkeys() ^ d2.viewkeys() == set('ac')
- assert d1.viewkeys() ^ d3.viewkeys() == set('abde')
- assert d1.viewkeys() ^ set(d1.viewkeys()) == set()
- assert d1.viewkeys() ^ set(d2.viewkeys()) == set('ac')
- assert d1.viewkeys() ^ set(d3.viewkeys()) == set('abde')
+ assert d1.keys() ^ d1.keys() == set()
+ assert d1.keys() ^ d2.keys() == set('ac')
+ assert d1.keys() ^ d3.keys() == set('abde')
+ assert d1.keys() ^ set(d1.keys()) == set()
+ assert d1.keys() ^ set(d2.keys()) == set('ac')
+ assert d1.keys() ^ set(d3.keys()) == set('abde')
def test_items_set_operations(self):
d1 = {'a': 1, 'b': 2}
d2 = {'a': 2, 'b': 2}
d3 = {'d': 4, 'e': 5}
- assert d1.viewitems() & d1.viewitems() == set([('a', 1), ('b', 2)])
- assert d1.viewitems() & d2.viewitems() == set([('b', 2)])
- assert d1.viewitems() & d3.viewitems() == set()
- assert d1.viewitems() & set(d1.viewitems()) == set([('a', 1), ('b', 2)])
- assert d1.viewitems() & set(d2.viewitems()) == set([('b', 2)])
- assert d1.viewitems() & set(d3.viewitems()) == set()
+ assert d1.items() & d1.items() == set([('a', 1), ('b', 2)])
+ assert d1.items() & d2.items() == set([('b', 2)])
+ assert d1.items() & d3.items() == set()
+ assert d1.items() & set(d1.items()) == set([('a', 1), ('b', 2)])
+ assert d1.items() & set(d2.items()) == set([('b', 2)])
+ assert d1.items() & set(d3.items()) == set()
- assert d1.viewitems() | d1.viewitems() == set([('a', 1), ('b', 2)])
- assert (d1.viewitems() | d2.viewitems() ==
+ assert d1.items() | d1.items() == set([('a', 1), ('b', 2)])
+ assert (d1.items() | d2.items() ==
set([('a', 1), ('a', 2), ('b', 2)]))
- assert (d1.viewitems() | d3.viewitems() ==
+ assert (d1.items() | d3.items() ==
set([('a', 1), ('b', 2), ('d', 4), ('e', 5)]))
- assert (d1.viewitems() | set(d1.viewitems()) ==
+ assert (d1.items() | set(d1.items()) ==
set([('a', 1), ('b', 2)]))
- assert (d1.viewitems() | set(d2.viewitems()) ==
+ assert (d1.items() | set(d2.items()) ==
set([('a', 1), ('a', 2), ('b', 2)]))
- assert (d1.viewitems() | set(d3.viewitems()) ==
+ assert (d1.items() | set(d3.items()) ==
set([('a', 1), ('b', 2), ('d', 4), ('e', 5)]))
- assert d1.viewitems() ^ d1.viewitems() == set()
- assert d1.viewitems() ^ d2.viewitems() == set([('a', 1), ('a', 2)])
- assert (d1.viewitems() ^ d3.viewitems() ==
+ assert d1.items() ^ d1.items() == set()
+ assert d1.items() ^ d2.items() == set([('a', 1), ('a', 2)])
+ assert (d1.items() ^ d3.items() ==
set([('a', 1), ('b', 2), ('d', 4), ('e', 5)]))
@@ -841,6 +836,7 @@
w_float = float
StringObjectCls = FakeString
w_dict = W_DictMultiObject
+ w_text = str
iter = iter
fixedview = list
listview = list
More information about the pypy-commit
mailing list