diff --git a/shade/meta.py b/shade/meta.py index 3f2567049..0cc82bcdd 100644 --- a/shade/meta.py +++ b/shade/meta.py @@ -186,6 +186,7 @@ def warlock_to_dict(obj): # deep black magic to attribute look up to support validation things that # means we cannot use normal obj_to_dict obj_dict = {} - for key in obj.keys(): - obj_dict[key] = obj[key] + for (key, value) in obj.items(): + if isinstance(value, NON_CALLABLES) and not key.startswith('_'): + obj_dict[key] = value return obj_dict diff --git a/shade/tests/unit/test_meta.py b/shade/tests/unit/test_meta.py index 3071f3113..885c8a77d 100644 --- a/shade/tests/unit/test_meta.py +++ b/shade/tests/unit/test_meta.py @@ -14,6 +14,7 @@ import mock import testtools +import warlock from shade import exc from shade import meta @@ -26,6 +27,7 @@ class FakeCloud(object): region_name = 'test-region' name = 'test-name' private = False + _unused = "useless" def get_flavor_name(self, id): return 'test-flavor-name' @@ -173,3 +175,29 @@ class TestMeta(testtools.TestCase): self.assertRaises( FakeException, meta.get_hostvars_from_server, mock_cloud, FakeServer()) + + def test_obj_to_dict(self): + cloud = FakeCloud() + cloud.server = FakeServer() + cloud_dict = meta.obj_to_dict(cloud) + self.assertEqual(FakeCloud.name, cloud_dict['name']) + self.assertNotIn('_unused', cloud_dict) + self.assertNotIn('get_flavor_name', cloud_dict) + self.assertNotIn('server', cloud_dict) + + def test_warlock_to_dict(self): + schema = { + 'name': 'Test', + 'properties': { + 'id': {'type': 'string'}, + 'name': {'type': 'string'}, + '_unused': {'type': 'string'}, + } + } + test_model = warlock.model_factory(schema) + test_obj = test_model( + id='471c2475-da2f-47ac-aba5-cb4aa3d546f5', + name='test-image') + test_dict = meta.warlock_to_dict(test_obj) + self.assertNotIn('_unused', test_dict) + self.assertEqual('test-image', test_dict['name']) diff --git a/test-requirements.txt b/test-requirements.txt index b6a09015e..0efea2b0a 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -10,3 +10,4 @@ sphinx>=1.1.2,!=1.2.0,!=1.3b1,<1.3 testrepository>=0.0.17 testscenarios>=0.4,<0.5 testtools>=0.9.32 +warlock>=1.0.1,<2