diff options
author | Lars Wirzenius <liw@liw.fi> | 2017-10-05 17:29:07 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2017-10-05 18:02:54 +0300 |
commit | eda98f9953edc5b6493bfde6ebc379f63e08195a (patch) | |
tree | a6de90260a8cc2f43d9c9e7067e7c0018e9b68d6 | |
parent | 5efef307703b24e6fc8fbc520501911d9bfd113b (diff) | |
download | qvisqve-eda98f9953edc5b6493bfde6ebc379f63e08195a.tar.gz |
Fix: when deleting a listner, delete all its notifications
-rw-r--r-- | qvarn/api.py | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/qvarn/api.py b/qvarn/api.py index a134da8..cbb055c 100644 --- a/qvarn/api.py +++ b/qvarn/api.py @@ -441,13 +441,29 @@ class QvarnAPI: return ok_response(pairs[0][1]) return wrapper - def delete_listener_callback(self, coll): # pragma: no cover + def delete_listener_callback(self, listeners): # pragma: no cover def wrapper(content_type, body, **kwargs): - obj_id = kwargs['id'] - coll.delete(obj_id) + listener_id = kwargs['id'] + listeners.delete(listener_id) + for obj_id in self.find_notifications(listener_id): + self._store.remove_objects(obj_id=obj_id) return ok_response({}) return wrapper + def find_notifications(self, listener_id): # pragma: no cover + cond = qvarn.All( + qvarn.Equal('type', 'notification'), + qvarn.Equal('listener_id', listener_id), + ) + obj_ids = [ + keys['obj_id'] + for keys, _ in self._store.find_objects(cond) + ] + qvarn.log.log( + 'trace', msg_text='Found notifications', + notifications=obj_ids) + return obj_ids + def notify(self, rid, rrev, change): # pragma: no cover rt = self.get_notification_resource_type() notifs = qvarn.CollectionAPI() @@ -619,9 +635,8 @@ class QvarnAPI: def delete_resource_callback(self, coll): # pragma: no cover def wrapper(content_type, body, **kwargs): obj_id = kwargs['id'] - obj = coll.get(obj_id) coll.delete(obj_id) - self.notify(obj_id, obj['revision'], 'deleted') + self.notify(obj_id, None, 'deleted') return ok_response({}) return wrapper |