[lxc-devel] [pylxd/master] Allow models to be iterable.

ltrager on Github lxc-bot at linuxcontainers.org
Fri May 15 21:59:15 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 302 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200515/6519859e/attachment.bin>
-------------- next part --------------
From 1cab2d1fdd23b670b8e5d66dc258bf13fe98afd0 Mon Sep 17 00:00:00 2001
From: Lee Trager <lee.trager at canonical.com>
Date: Fri, 15 May 2020 21:58:31 +0000
Subject: [PATCH] Allow models to be iterable.

Signed-off-by: Lee Trager <lee.trager at canonical.com>
---
 pylxd/models/_model.py           | 4 ++++
 pylxd/tests/models/test_model.py | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/pylxd/models/_model.py b/pylxd/models/_model.py
index 8702f62c..ce8b7025 100644
--- a/pylxd/models/_model.py
+++ b/pylxd/models/_model.py
@@ -162,6 +162,10 @@ def __setattr__(self, name, value):
             self.__dirty__.add(name)
         return super(Model, self).__setattr__(name, value)
 
+    def __iter__(self):
+        for attr in self.__attributes__.keys():
+            yield attr, getattr(self, attr)
+
     @property
     def dirty(self):
         return len(self.__dirty__) > 0
diff --git a/pylxd/tests/models/test_model.py b/pylxd/tests/models/test_model.py
index 24ecb147..f25cbc8d 100644
--- a/pylxd/tests/models/test_model.py
+++ b/pylxd/tests/models/test_model.py
@@ -150,6 +150,14 @@ def test_unset_attribute_sync(self):
 
         self.assertEqual(1000, item.age)
 
+    def test_iter(self):
+        """Test models can be iterated over."""
+        item = Item(self.client, name='an-item')
+
+        self.assertDictEqual(
+            {'name': 'an-item', 'age': 1000, 'data': {'key': 'val'}},
+            dict(item))
+
     def test_sync(self):
         """A sync will update attributes from the server."""
         item = Item(self.client, name='an-item')


More information about the lxc-devel mailing list