[common] DictModel get does not raise errors as in Python

getr raises an error if the key does not exist
This commit is contained in:
Fabien Castan 2024-06-15 17:10:46 +02:00
parent 09525a364e
commit c986b4a134
4 changed files with 42 additions and 25 deletions

View file

@ -9,6 +9,9 @@ class CoreDictModel:
def __len__(self):
return len(self._objects)
def __bool__(self):
return bool(self._objects)
def __iter__(self):
""" Enables iteration over the list of objects. """
return iter(self._objects.values())
@ -26,12 +29,18 @@ class CoreDictModel:
def objects(self):
return self._objects
# TODO: operator[]
def get(self, key):
"""
Raises a KeyError if key is not in the map.
:param key:
:return:
:return: the value or None if not found
"""
return self._objects.get(key)
def getr(self, key):
"""
Get or raise an error if the key does not exists.
:param key:
:return: the value
"""
return self._objects[key]

View file

@ -43,7 +43,9 @@ class QObjectListModel(QtCore.QAbstractListModel):
return self.size() > 0
def __getitem__(self, index):
""" Enables the [] operator """
""" Enables the [] operator.
Only accepts index (integer).
"""
return self._objects[index]
def data(self, index, role):
@ -96,9 +98,17 @@ class QObjectListModel(QtCore.QAbstractListModel):
@QtCore.Slot(str, result=QtCore.QObject)
def get(self, key):
"""
Raises a KeyError if key is not in the map.
:param key:
:return:
:return: the value or None if not found
"""
return self._objectByKey.get(key)
@QtCore.Slot(str, result=QtCore.QObject)
def getr(self, key):
"""
Get or raise an error if the key does not exists.
:param key:
:return: the value
"""
return self._objectByKey[key]

View file

@ -608,7 +608,7 @@ class BaseNode(BaseObject):
assert isinstance(att, ListAttribute)
att = att.value.at(int(idx))
else:
att = self._attributes.get(name)
att = self._attributes.getr(name)
return att
@Slot(str, result=Attribute)

View file

@ -18,26 +18,24 @@ class DummyNode(QObject):
name = Property(str, getName)
def test_coreModel_add_remove():
m = CoreDictModel(keyAttrName='name')
node = DummyNode("DummyNode_1")
m.add(node)
assert len(m) == 1
assert m.get("DummyNode_1") == node
def test_DictModel_add_remove():
for DictModel in (CoreDictModel, QObjectListModel):
m = DictModel(keyAttrName='name')
node = DummyNode("DummyNode_1")
m.add(node)
assert len(m) == 1
assert len(m.keys()) == 1
assert len(m.values()) == 1
assert m.get("DummyNode_1") == node
m.pop("DummyNode_1")
assert len(m) == 0
assert m.get("something") == None
with pytest.raises(KeyError):
m.getr("something")
def test_listModel_add_remove():
m = QObjectListModel(keyAttrName='name')
node = DummyNode("DummyNode_1")
m.add(node)
assert len(m) == 1
assert m.get("DummyNode_1") == node
m.remove(node)
assert len(m) == 0
m.pop("DummyNode_1")
assert len(m) == 0
assert len(m.keys()) == 0
assert len(m.values()) == 0
def test_listModel_typed_add():