diff --git a/kubernetes/base/dynamic/resource.py b/kubernetes/base/dynamic/resource.py index ca923a3e7..9a4052c2d 100644 --- a/kubernetes/base/dynamic/resource.py +++ b/kubernetes/base/dynamic/resource.py @@ -389,3 +389,15 @@ class ResourceField(object): def __iter__(self): for k, v in self.__dict__.items(): yield (k, v) + + def to_dict(self): + return self.__serialize(self) + + def __serialize(self, field): + if isinstance(field, ResourceField): + return { + k: self.__serialize(v) for k, v in field.__dict__.items() + } + if isinstance(field, (list, tuple)): + return [self.__serialize(item) for item in field] + return field diff --git a/kubernetes/base/dynamic/test_client.py b/kubernetes/base/dynamic/test_client.py index 1c9fa6d94..2c3155941 100644 --- a/kubernetes/base/dynamic/test_client.py +++ b/kubernetes/base/dynamic/test_client.py @@ -563,5 +563,4 @@ class TestDynamicClientSerialization(unittest.TestCase): res = ResourceField(params=params) self.assertEqual(res["foo"], params["foo"]) self.assertEqual(res["self"], params["self"]) - # method will return original object when it doesn't know how to proceed - self.assertEqual(self.client.serialize_body(res), res) + self.assertEqual(self.client.serialize_body(res), params)