gh-145056: Add support for merging collections.UserDict and frozendict (GH-146465)

This commit is contained in:
Serhiy Storchaka 2026-03-30 22:07:28 +03:00 committed by GitHub
parent 727890410b
commit ec2bc12e54
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 5 additions and 4 deletions

View file

@ -1216,14 +1216,14 @@ def __repr__(self):
def __or__(self, other):
if isinstance(other, UserDict):
return self.__class__(self.data | other.data)
if isinstance(other, dict):
if isinstance(other, (dict, frozendict)):
return self.__class__(self.data | other)
return NotImplemented
def __ror__(self, other):
if isinstance(other, UserDict):
return self.__class__(other.data | self.data)
if isinstance(other, dict):
if isinstance(other, (dict, frozendict)):
return self.__class__(other | self.data)
return NotImplemented

View file

@ -245,7 +245,7 @@ class G(collections.UserDict):
test_repr_deep = mapping_tests.TestHashMappingProtocol.test_repr_deep
def test_mixed_or(self):
for t in UserDict, dict, types.MappingProxyType:
for t in UserDict, dict, frozendict, types.MappingProxyType:
with self.subTest(t.__name__):
u = UserDict({0: 'a', 1: 'b'}) | t({1: 'c', 2: 'd'})
self.assertEqual(u, {0: 'a', 1: 'c', 2: 'd'})
@ -276,7 +276,7 @@ def test_mixed_or(self):
self.assertIs(type(u), UserDictSubclass)
def test_mixed_ior(self):
for t in UserDict, dict, types.MappingProxyType:
for t in UserDict, dict, frozendict, types.MappingProxyType:
with self.subTest(t.__name__):
u = u2 = UserDict({0: 'a', 1: 'b'})
u |= t({1: 'c', 2: 'd'})

View file

@ -0,0 +1 @@
Add support for merging :class:`collections.UserDict` and :class:`frozendict`.