Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d81206d

Browse files
committed
Fix the damage to UserDict and its tests.
Clearly this is not the right way to fix this; UserDict and MixinDict ought to be redesigned with the new dict API in mind. But I'm not claiming to be in charge of library redesign, I only want zero failing tests.
1 parent e34cdd1 commit d81206d

3 files changed

Lines changed: 17 additions & 18 deletions

File tree

Lib/UserDict.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ def copy(self):
4242
return c
4343
def keys(self): return self.data.keys()
4444
def items(self): return self.data.items()
45-
def iteritems(self): return self.data.items()
46-
def iterkeys(self): return self.data.keys()
47-
def itervalues(self): return self.data.values()
4845
def values(self): return self.data.values()
4946
def update(self, dict=None, **kwargs):
5047
if dict is None:
@@ -91,6 +88,8 @@ class DictMixin:
9188
# methods, progressively more efficiency comes with defining
9289
# __contains__(), __iter__(), and iteritems().
9390

91+
# XXX It would make more sense to expect __iter__ to be primitive.
92+
9493
# second level definitions support higher levels
9594
def __iter__(self):
9695
for k in self.keys():
@@ -103,20 +102,20 @@ def __contains__(self, key):
103102
return True
104103

105104
# third level takes advantage of second level definitions
105+
def iterkeys(self):
106+
return self.__iter__()
106107
def iteritems(self):
107108
for k in self:
108109
yield (k, self[k])
109-
def iterkeys(self):
110-
return self.__iter__()
111110

112111
# fourth level uses definitions from lower levels
113112
def itervalues(self):
114-
for _, v in self.items():
113+
for _, v in self.iteritems():
115114
yield v
116115
def values(self):
117-
return [v for _, v in self.items()]
116+
return [v for _, v in self.iteritems()]
118117
def items(self):
119-
return list(self.items())
118+
return list(self.iteritems())
120119
def clear(self):
121120
for key in self.keys():
122121
del self[key]
@@ -140,7 +139,7 @@ def pop(self, key, *args):
140139
return value
141140
def popitem(self):
142141
try:
143-
k, v = self.items().next()
142+
k, v = self.iteritems().next()
144143
except StopIteration:
145144
raise KeyError, 'container is empty'
146145
del self[k]
@@ -169,14 +168,14 @@ def get(self, key, default=None):
169168
except KeyError:
170169
return default
171170
def __repr__(self):
172-
return repr(dict(self.items()))
171+
return repr(dict(self.iteritems()))
173172
def __eq__(self, other):
174173
if isinstance(other, DictMixin):
175-
other = dict(other.items())
176-
return dict(self.items()) == other
174+
other = dict(other.iteritems())
175+
return dict(self.iteritems()) == other
177176
def __ne__(self, other):
178177
if isinstance(other, DictMixin):
179-
other = dict(other.items())
180-
return dict(self.items()) != other
178+
other = dict(other.iteritems())
179+
return dict(self.iteritems()) != other
181180
def __len__(self):
182181
return len(self.keys())

Lib/test/mapping_tests.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ def test_bool(self):
317317
def test_keys(self):
318318
BasicTestMappingProtocol.test_keys(self)
319319
d = self._empty_mapping()
320-
self.assertEqual(d.keys(), [])
320+
self.assertEqual(list(d.keys()), [])
321321
d = self._full_mapping({'a': 1, 'b': 2})
322322
k = d.keys()
323323
self.assert_('a' in k)
@@ -327,13 +327,13 @@ def test_keys(self):
327327
def test_values(self):
328328
BasicTestMappingProtocol.test_values(self)
329329
d = self._full_mapping({1:2})
330-
self.assertEqual(d.values(), [2])
330+
self.assertEqual(list(d.values()), [2])
331331

332332
def test_items(self):
333333
BasicTestMappingProtocol.test_items(self)
334334

335335
d = self._full_mapping({1:2})
336-
self.assertEqual(d.items(), [(1, 2)])
336+
self.assertEqual(list(d.items()), [(1, 2)])
337337

338338
def test_contains(self):
339339
d = self._empty_mapping()

Lib/test/test_userdict.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def display(self): print(self)
9292
# Test keys, items, values
9393
self.assertEqual(u2.keys(), d2.keys())
9494
self.assertEqual(u2.items(), d2.items())
95-
self.assertEqual(u2.values(), d2.values())
95+
self.assertEqual(list(u2.values()), list(d2.values()))
9696

9797
# Test "in".
9898
for i in u2.keys():

0 commit comments

Comments
 (0)