mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-05-02 03:37:13 +02:00
[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:
parent
09525a364e
commit
c986b4a134
4 changed files with 42 additions and 25 deletions
|
@ -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]
|
||||||
|
|
||||||
|
|
|
@ -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]
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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():
|
||||||
|
|
Loading…
Add table
Reference in a new issue