summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-10-05 17:29:07 +0300
committerLars Wirzenius <liw@liw.fi>2017-10-05 18:02:54 +0300
commiteda98f9953edc5b6493bfde6ebc379f63e08195a (patch)
treea6de90260a8cc2f43d9c9e7067e7c0018e9b68d6
parent5efef307703b24e6fc8fbc520501911d9bfd113b (diff)
downloadqvisqve-eda98f9953edc5b6493bfde6ebc379f63e08195a.tar.gz
Fix: when deleting a listner, delete all its notifications
-rw-r--r--qvarn/api.py25
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