Newer pylint versions complain that QmpMessage is not a proper container because
it does not implement the __len__() and __delitem__() methods. This commit
implements them.

Also, tests are added.

Signed-off-by: Michele Tartara <[email protected]>
---
 lib/hypervisor/hv_kvm.py                     |   12 ++++++++++++
 test/py/ganeti.hypervisor.hv_kvm_unittest.py |   14 ++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py
index b4acee3..91a3b35 100644
--- a/lib/hypervisor/hv_kvm.py
+++ b/lib/hypervisor/hv_kvm.py
@@ -194,6 +194,18 @@ class QmpMessage:
     """
     self.data[field_name] = field_value
 
+  def __len__(self):
+    """Return the number of fields stored in this QmpMessage.
+
+    """
+    return len(self.data)
+
+  def __delitem__(self, key):
+    """Delete the specified element from the QmpMessage.
+
+    """
+    del(self.data[key])
+
   @staticmethod
   def BuildFromJsonString(json_string):
     """Build a QmpMessage from a JSON encoded string.
diff --git a/test/py/ganeti.hypervisor.hv_kvm_unittest.py 
b/test/py/ganeti.hypervisor.hv_kvm_unittest.py
index b3d3f79..c8eaffc 100755
--- a/test/py/ganeti.hypervisor.hv_kvm_unittest.py
+++ b/test/py/ganeti.hypervisor.hv_kvm_unittest.py
@@ -135,6 +135,20 @@ class TestQmpMessage(testutils.GanetiTestCase):
 
     rebuilt_message = hv_kvm.QmpMessage.BuildFromJsonString(serialized)
     self.assertEqual(rebuilt_message, message)
+    self.assertEqual(len(rebuilt_message), len(test_data))
+
+  def testDelete(self):
+    toDelete = "execute"
+    test_data = {
+      toDelete: "command",
+      "arguments": ["a", "b", "c"],
+      }
+    message = hv_kvm.QmpMessage(test_data)
+
+    oldLen = len(message)
+    del(message[toDelete])
+    newLen = len(message)
+    self.assertEqual(oldLen - 1, newLen)
 
 
 class TestQmp(testutils.GanetiTestCase):
-- 
1.7.10.4

Reply via email to