diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 8a31d8ea09..ab2290c96b 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -4987,7 +4987,6 @@ class Inside: self.assertEqual(Y.__qualname__, 'Y') self.assertEqual(Y.Inside.__qualname__, 'Y.Inside') - @unittest.expectedFailure # TODO: RUSTPYTHON def test_qualname_dict(self): ns = {'__qualname__': 'some.name'} tp = type('Foo', (), ns) diff --git a/crates/vm/src/builtins/type.rs b/crates/vm/src/builtins/type.rs index 5f351afca3..64801a1de5 100644 --- a/crates/vm/src/builtins/type.rs +++ b/crates/vm/src/builtins/type.rs @@ -1868,14 +1868,16 @@ impl Constructor for PyType { }; let qualname = dict - .pop_item(identifier!(vm, __qualname__).as_object(), vm)? + .get_item_opt(identifier!(vm, __qualname__), vm)? .map(|obj| downcast_qualname(obj, vm)) .transpose()? .unwrap_or_else(|| { // If __qualname__ is not provided, we can use the name as default name.clone().into_wtf8() }); + let mut attributes = dict.to_attributes(vm); + attributes.shift_remove(identifier!(vm, __qualname__)); // Check __doc__ for surrogates - raises UnicodeEncodeError during type creation if let Some(doc) = attributes.get(identifier!(vm, __doc__))