diff --git a/hawkular/alerts.py b/hawkular/alerts.py index 4a9f0f7..18923ad 100644 --- a/hawkular/alerts.py +++ b/hawkular/alerts.py @@ -155,6 +155,16 @@ def create_group_trigger(self, trigger): data = self._serialize_object(trigger) return Trigger(self._post(self._service_url(['triggers', 'groups']), data)) + def delete_group_trigger(self, group_id, keep_non_orphans=False, keep_orphans=False): + """ + Delete a group trigger + :param group_id: ID of the group trigger to delete + :param keep_non_orphans: if True converts the non-orphan member triggers to standard triggers + :param keep_orphans: if True converts the orphan member triggers to standard triggers + """ + params = {'keepNonOrphans': str(keep_non_orphans).lower(), 'keepOrphans': str(keep_orphans).lower()} + self._delete(self._service_url(['triggers', 'groups', group_id], params=params)) + def create_group_member(self, member): data = self._serialize_object(member) return Trigger(self._post(self._service_url(['triggers', 'groups', 'members']), data)) diff --git a/hawkular/client.py b/hawkular/client.py index d3874d5..4260b31 100644 --- a/hawkular/client.py +++ b/hawkular/client.py @@ -165,7 +165,7 @@ def _get_status_url(self): def tenant(self, tenant_id): self.tenant_id = tenant_id - def _http(self, url, method, data=None, decoder=None): + def _http(self, url, method, data=None, decoder=None, parse_json=True): res = None req = Request(url=url) req.add_header('Content-Type', 'application/json') @@ -193,10 +193,13 @@ def _http(self, url, method, data=None, decoder=None): req.get_method = lambda: method res = urlopen(req, context=self.context) - if res.getcode() == 200: - data = json.load(reader(res), cls=decoder) - elif res.getcode() == 204: - data = {} + if parse_json: + if res.getcode() == 200: + data = json.load(reader(res), cls=decoder) + elif res.getcode() == 204: + data = {} + else: + data = reader(res).read() return data @@ -211,7 +214,7 @@ def _put(self, url, data): return self._http(url, 'PUT', data) def _delete(self, url): - return self._http(url, 'DELETE') + return self._http(url, 'DELETE', parse_json=False) def _post(self, url, data): return self._http(url, 'POST', data) diff --git a/tests/test_alerts.py b/tests/test_alerts.py index e6ab918..91ceed6 100644 --- a/tests/test_alerts.py +++ b/tests/test_alerts.py @@ -22,6 +22,13 @@ import os from tests import base +try: + # Python 3 + from urllib.error import HTTPError +except ImportError: + # Fall back to Python 2's urllib2 + from urllib2 import HTTPError + class TestAlertsFunctionsBase(unittest.TestCase): def setUp(self): @@ -125,6 +132,23 @@ def test_create_group_trigger(self): self.assertEqual(created_group_trigger.id, trigger.id) self.assertEqual(created_group_trigger.name, trigger.name) + def test_delete_group_trigger(self): + # Create a group trigger + gt = Trigger() + gt.id = 'delete_group_trigger' + gt.name = 'group_trigger_to_delete' + self.client.create_group_trigger(gt) + + group_count = len(self.client.list_triggers()) + # Delete the created group trigger + self.client.delete_group_trigger('delete_group_trigger') + + # Compare number of remaining triggers and query the deleted trigger id + self.assertEqual(len(self.client.list_triggers()), group_count-1) + with self.assertRaises(HTTPError) as e: + self.client.get_trigger('delete_group_trigger') + self.assertEqual(e.getcode(), 404) + def test_create_groups(self): # Create a group trigger t = Trigger()