Skip to content

Commit a812873

Browse files
CPython Developersyouknowone
authored andcommitted
Fully update collections and test_ordered_dict from CPython 3.11.2
1 parent 5fd72c5 commit a812873

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

Lib/collections/__init__.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ def __repr__(self):
271271
'od.__repr__() <==> repr(od)'
272272
if not self:
273273
return '%s()' % (self.__class__.__name__,)
274-
return '%s(%r)' % (self.__class__.__name__, list(self.items()))
274+
return '%s(%r)' % (self.__class__.__name__, dict(self.items()))
275275

276276
def __reduce__(self):
277277
'Return state information for pickling'
@@ -511,9 +511,12 @@ def __getnewargs__(self):
511511
# specified a particular module.
512512
if module is None:
513513
try:
514-
module = _sys._getframe(1).f_globals.get('__name__', '__main__')
515-
except (AttributeError, ValueError):
516-
pass
514+
module = _sys._getframemodulename(1) or '__main__'
515+
except AttributeError:
516+
try:
517+
module = _sys._getframe(1).f_globals.get('__name__', '__main__')
518+
except (AttributeError, ValueError):
519+
pass
517520
if module is not None:
518521
result.__module__ = module
519522

@@ -1015,8 +1018,8 @@ def __len__(self):
10151018

10161019
def __iter__(self):
10171020
d = {}
1018-
for mapping in reversed(self.maps):
1019-
d.update(dict.fromkeys(mapping)) # reuses stored hash values if possible
1021+
for mapping in map(dict.fromkeys, reversed(self.maps)):
1022+
d |= mapping # reuses stored hash values if possible
10201023
return iter(d)
10211024

10221025
def __contains__(self, key):
@@ -1136,10 +1139,17 @@ def __delitem__(self, key):
11361139
def __iter__(self):
11371140
return iter(self.data)
11381141

1139-
# Modify __contains__ to work correctly when __missing__ is present
1142+
# Modify __contains__ and get() to work like dict
1143+
# does when __missing__ is present.
11401144
def __contains__(self, key):
11411145
return key in self.data
11421146

1147+
def get(self, key, default=None):
1148+
if key in self:
1149+
return self[key]
1150+
return default
1151+
1152+
11431153
# Now, add the methods in dicts but not in MutableMapping
11441154
def __repr__(self):
11451155
return repr(self.data)

Lib/test/test_ordered_dict.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ def test_repr(self):
370370
OrderedDict = self.OrderedDict
371371
od = OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])
372372
self.assertEqual(repr(od),
373-
"OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])")
373+
"OrderedDict({'c': 1, 'b': 2, 'a': 3, 'd': 4, 'e': 5, 'f': 6})")
374374
self.assertEqual(eval(repr(od)), od)
375375
self.assertEqual(repr(OrderedDict()), "OrderedDict()")
376376

@@ -380,7 +380,7 @@ def test_repr_recursive(self):
380380
od = OrderedDict.fromkeys('abc')
381381
od['x'] = od
382382
self.assertEqual(repr(od),
383-
"OrderedDict([('a', None), ('b', None), ('c', None), ('x', ...)])")
383+
"OrderedDict({'a': None, 'b': None, 'c': None, 'x': ...})")
384384

385385
def test_repr_recursive_values(self):
386386
OrderedDict = self.OrderedDict
@@ -1019,6 +1019,7 @@ class PySimpleLRUCacheTests(SimpleLRUCacheTests, unittest.TestCase):
10191019
class type2test(SimpleLRUCache, py_coll.OrderedDict):
10201020
pass
10211021

1022+
10221023
@unittest.skipUnless(c_coll, 'requires the C version of the collections module')
10231024
class CSimpleLRUCacheTests(SimpleLRUCacheTests, unittest.TestCase):
10241025

0 commit comments

Comments
 (0)