Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions hawkular/alerts.py
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
15 changes: 9 additions & 6 deletions hawkular/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down Expand Up @@ -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

Expand All @@ -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)
Expand Down
24 changes: 24 additions & 0 deletions tests/test_alerts.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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()
Expand Down