[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): def __len__(self):
return len(self._objects) return len(self._objects)
def __bool__(self):
return bool(self._objects)
def __iter__(self): def __iter__(self):
""" Enables iteration over the list of objects. """ """ Enables iteration over the list of objects. """
return iter(self._objects.values()) return iter(self._objects.values())
@ -26,12 +29,18 @@ class CoreDictModel:
def objects(self): def objects(self):
return self._objects return self._objects
# TODO: operator[]
def get(self, key): def get(self, key):
""" """
Raises a KeyError if key is not in the map.
:param key: :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] return self._objects[key]

View file

@ -43,7 +43,9 @@ class QObjectListModel(QtCore.QAbstractListModel):
return self.size() > 0 return self.size() > 0
def __getitem__(self, index): def __getitem__(self, index):
""" Enables the [] operator """ """ Enables the [] operator.
Only accepts index (integer).
"""
return self._objects[index] return self._objects[index]
def data(self, index, role): def data(self, index, role):
@ -96,9 +98,17 @@ class QObjectListModel(QtCore.QAbstractListModel):
@QtCore.Slot(str, result=QtCore.QObject) @QtCore.Slot(str, result=QtCore.QObject)
def get(self, key): def get(self, key):
""" """
Raises a KeyError if key is not in the map.
:param key: :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] return self._objectByKey[key]

View file

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

View file

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