mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-09 22:49:57 +09:00
Merge pull request #1717 from palaviv/dict_iterator-repr
Add repr for dict_keys, dict_values and dict_items
This commit is contained in:
@@ -45,7 +45,6 @@ class DictTest(unittest.TestCase):
|
||||
self.assertIs(bool({}), False)
|
||||
self.assertIs(bool({1: 2}), True)
|
||||
|
||||
@unittest.skip("TODO: RUSTPYTHON")
|
||||
def test_keys(self):
|
||||
d = {}
|
||||
self.assertEqual(set(d.keys()), set())
|
||||
@@ -59,7 +58,6 @@ class DictTest(unittest.TestCase):
|
||||
self.assertRaises(TypeError, d.keys, None)
|
||||
self.assertEqual(repr(dict(a=1).keys()), "dict_keys(['a'])")
|
||||
|
||||
@unittest.skip("TODO: RUSTPYTHON")
|
||||
def test_values(self):
|
||||
d = {}
|
||||
self.assertEqual(set(d.values()), set())
|
||||
@@ -68,7 +66,6 @@ class DictTest(unittest.TestCase):
|
||||
self.assertRaises(TypeError, d.values, None)
|
||||
self.assertEqual(repr(dict(a=1).values()), "dict_values([1])")
|
||||
|
||||
@unittest.skip("TODO: RUSTPYTHON")
|
||||
def test_items(self):
|
||||
d = {}
|
||||
self.assertEqual(set(d.items()), set())
|
||||
|
||||
@@ -516,6 +516,22 @@ macro_rules! dict_iterator {
|
||||
fn len(&self, vm: &VirtualMachine) -> usize {
|
||||
self.dict.clone().len(vm)
|
||||
}
|
||||
|
||||
#[pymethod(name = "__repr__")]
|
||||
#[allow(clippy::redundant_closure_call)]
|
||||
fn repr(zelf: PyRef<Self>, vm: &VirtualMachine) -> PyResult<String> {
|
||||
let s = if let Some(_guard) = ReprGuard::enter(zelf.as_object()) {
|
||||
let mut str_parts = vec![];
|
||||
for (key, value) in zelf.dict.clone() {
|
||||
let s = vm.to_repr(&$result_fn(vm, &key, &value))?;
|
||||
str_parts.push(s.as_str().to_string());
|
||||
}
|
||||
format!("{}([{}])", $class_name, str_parts.join(", "))
|
||||
} else {
|
||||
"{...}".to_string()
|
||||
};
|
||||
Ok(s)
|
||||
}
|
||||
}
|
||||
|
||||
impl PyValue for $name {
|
||||
@@ -589,7 +605,7 @@ dict_iterator! {
|
||||
PyDictKeyIterator,
|
||||
dictkeys_type,
|
||||
dictkeyiterator_type,
|
||||
"dictkeys",
|
||||
"dict_keys",
|
||||
"dictkeyiterator",
|
||||
|_vm: &VirtualMachine, key: &PyObjectRef, _value: &PyObjectRef| key.clone()
|
||||
}
|
||||
@@ -599,7 +615,7 @@ dict_iterator! {
|
||||
PyDictValueIterator,
|
||||
dictvalues_type,
|
||||
dictvalueiterator_type,
|
||||
"dictvalues",
|
||||
"dict_values",
|
||||
"dictvalueiterator",
|
||||
|_vm: &VirtualMachine, _key: &PyObjectRef, value: &PyObjectRef| value.clone()
|
||||
}
|
||||
@@ -609,7 +625,7 @@ dict_iterator! {
|
||||
PyDictItemIterator,
|
||||
dictitems_type,
|
||||
dictitemiterator_type,
|
||||
"dictitems",
|
||||
"dict_items",
|
||||
"dictitemiterator",
|
||||
|vm: &VirtualMachine, key: &PyObjectRef, value: &PyObjectRef|
|
||||
vm.ctx.new_tuple(vec![key.clone(), value.clone()])
|
||||
|
||||
Reference in New Issue
Block a user