return self
def __or__(self, other):
- if not isinstance(other, dict):
+ if not isinstance(other, (dict, frozendict)):
return NotImplemented
new = self.__class__(self)
new.update(other)
return new
def __ror__(self, other):
- if not isinstance(other, dict):
+ if not isinstance(other, (dict, frozendict)):
return NotImplemented
new = self.__class__(other)
new.update(self)
d |= list(b.items())
expected = OrderedDict({0: 0, 1: 1, 2: 2, 3: 3})
self.assertEqual(a | dict(b), expected)
+ self.assertEqual(a | frozendict(b), expected)
self.assertEqual(a | b, expected)
self.assertEqual(c, expected)
self.assertEqual(d, expected)
c |= a
expected = OrderedDict({1: 1, 2: 1, 3: 3, 0: 0})
self.assertEqual(dict(b) | a, expected)
+ self.assertEqual(frozendict(b) | a, expected)
+ self.assertEqual(a.__ror__(frozendict(b)), expected)
self.assertEqual(b | a, expected)
self.assertEqual(c, expected)
self.assertIs(type(a | b), OrderedDict)
self.assertIs(type(dict(a) | b), OrderedDict)
+ self.assertIs(type(frozendict(a) | b), frozendict)
+ self.assertIs(type(b.__ror__(frozendict(a))), OrderedDict)
self.assertIs(type(a | dict(b)), OrderedDict)
+ self.assertIs(type(a | frozendict(b)), OrderedDict)
expected = a.copy()
a |= ()
type = Py_TYPE(right);
other = left;
}
- if (!PyDict_Check(other)) {
+ if (!PyAnyDict_Check(other)) {
Py_RETURN_NOTIMPLEMENTED;
}
PyObject *new = PyObject_CallOneArg((PyObject*)type, left);
mutablemapping_update_arg(PyObject *self, PyObject *arg)
{
int res = 0;
- if (PyDict_CheckExact(arg)) {
+ if (PyAnyDict_CheckExact(arg)) {
PyObject *items = PyDict_Items(arg);
if (items == NULL) {
return -1;