diff --git a/tuskarclient/openstack/common/apiclient/base.py b/tuskarclient/openstack/common/apiclient/base.py index 7a02aeb..cf9f98e 100644 --- a/tuskarclient/openstack/common/apiclient/base.py +++ b/tuskarclient/openstack/common/apiclient/base.py @@ -216,12 +216,19 @@ class BaseManager(HookableMixin): else: return self.resource_class(self, body) - def _delete(self, url): + def _delete(self, url, response_key=None): """Delete an object. :param url: a partial URL, e.g., '/servers/my-server' """ - return self.client.delete(url) + resp = self.client.delete(url) + # DELETE requests may not return a body + if resp.content: + body = resp.json() + if response_key is not None: + return self.resource_class(self, body[response_key]) + else: + return self.resource_class(self, body) @six.add_metaclass(abc.ABCMeta) diff --git a/tuskarclient/tests/v2/test_plans.py b/tuskarclient/tests/v2/test_plans.py index 36ec237..0c76fa6 100644 --- a/tuskarclient/tests/v2/test_plans.py +++ b/tuskarclient/tests/v2/test_plans.py @@ -110,16 +110,16 @@ class PlanManagerTest(tutils.TestCase): def test_remove_role(self): """Test assigning Role to a Plan.""" self.assertThat('delete', tutils.IsMethodOn(self.api)) - self.api.delete = mock.Mock(return_value=( - 'resp', - 'fake_plan_data')) + api_delete_return_mock = mock.Mock() + self.api.delete = mock.Mock(return_value=api_delete_return_mock) self.assertThat('resource_class', tutils.IsMethodOn(self.pm)) self.pm.resource_class = mock.Mock(return_value='fake_plan') self.assertEqual(self.pm.remove_role('42', role_uuid='qwert12345'), 'fake_plan') self.api.delete.assert_called_with('/plans/42/roles/qwert12345') - self.pm.resource_class.assert_called_with(self.pm, 'fake_plan_data') + self.pm.resource_class.assert_called_with( + self.pm, api_delete_return_mock.json()) def test_templates_path(self): self.assertEqual(self.pm._templates_path('42'), diff --git a/tuskarclient/v2/plans.py b/tuskarclient/v2/plans.py index baa562a..77410e9 100644 --- a/tuskarclient/v2/plans.py +++ b/tuskarclient/v2/plans.py @@ -150,9 +150,7 @@ class PlanManager(base.BaseManager): :rtype: tuskarclient.v2.plans.Plan """ - rep, body = self._delete(self._roles_path(plan_uuid, role_uuid)) - - return self.resource_class(self, body) + return self._delete(self._roles_path(plan_uuid, role_uuid)) def templates(self, plan_uuid): """Gets template files from a Plan.