diff options
author | Campbell Barton <campbell@blender.org> | 2022-03-11 02:08:25 +0300 |
---|---|---|
committer | Campbell Barton <campbell@blender.org> | 2022-03-11 02:26:27 +0300 |
commit | 27fb63381e9b0963976237c58ca2cfc9bc5ddfd8 (patch) | |
tree | 90570944912ac671dbfcb57c7af68c3f3ad8b0f6 | |
parent | 4a8bd318255e6fe829a93e8cb8039e8e1896fc72 (diff) |
Fix T94121: PyAPI: ID property group returns wrong type with iter()
Regression in 265d97556aa0f0f2a0e4dd7584e3b8573bbddd54.
Where iterating directly on a property group failed, e.g.:
`iter(group)`, tests missed this since only `group.keys()`
was checked.
-rw-r--r-- | source/blender/python/generic/idprop_py_api.c | 11 | ||||
-rw-r--r-- | tests/python/bl_pyapi_idprop.py | 8 |
2 files changed, 18 insertions, 1 deletions
diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c index c05c003b176..2fbb6b8ee05 100644 --- a/source/blender/python/generic/idprop_py_api.c +++ b/source/blender/python/generic/idprop_py_api.c @@ -756,7 +756,16 @@ static int BPy_IDGroup_Map_SetItem(BPy_IDProperty *self, PyObject *key, PyObject static PyObject *BPy_IDGroup_iter(BPy_IDProperty *self) { - return BPy_IDGroup_ViewKeys_CreatePyObject(self); + PyObject *iterable = BPy_IDGroup_ViewKeys_CreatePyObject(self); + PyObject *ret; + if (iterable) { + ret = PyObject_GetIter(iterable); + Py_DECREF(iterable); + } + else { + ret = NULL; + } + return ret; } PyObject *BPy_IDGroup_MapDataToPy(IDProperty *prop) diff --git a/tests/python/bl_pyapi_idprop.py b/tests/python/bl_pyapi_idprop.py index 0e93ba0b690..ac1bd618570 100644 --- a/tests/python/bl_pyapi_idprop.py +++ b/tests/python/bl_pyapi_idprop.py @@ -172,6 +172,14 @@ class TestIdPropertyGroupView(TestHelper, unittest.TestCase): self.assertEqual(list(self.id.items()), [(k, v) for v, k in enumerate(text)]) self.assertEqual(list(reversed(self.id.items())), list(reversed([(k, v) for v, k in enumerate(text)]))) + # Check direct iteration is working as expected. + self.id["group"] = {ch: i for i, ch in enumerate(text)} + group = self.id["group"] + + self.assertEqual(len(group), len(text)) + self.assertEqual(list(iter(group)), text) + + def test_contains(self): # Check `idprop.types.IDPropertyGroupView{Keys/Values/Items}.__contains__` text = ["A", "B", "C"] |