Skip to content
This repository has been archived by the owner on Jul 24, 2018. It is now read-only.

Commit

Permalink
Implement one-shot filters
Browse files Browse the repository at this point in the history
After being ran one, call fired() to disable them

Signed-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>
  • Loading branch information
puiterwijk committed Mar 18, 2015
1 parent eb749e0 commit 940813f
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 2 deletions.
1 change: 1 addition & 0 deletions fmn/lib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ def recipients(preferences, message, valid_paths, config):
context['detail_name']: detail_value,
'filter_name': filter['name'],
'filter_id': filter['id'],
'filter_oneshot': filter['oneshot'],
'markup_messages': preference['markup_messages'],
'triggered_by_links': preference['triggered_by_links'],
'shorten_links': preference['shorten_links'],
Expand Down
22 changes: 20 additions & 2 deletions fmn/lib/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,7 @@ class Filter(BASE):
created_on = sa.Column(sa.DateTime, default=datetime.datetime.utcnow)
name = sa.Column(sa.String(50))
active = sa.Column(sa.Boolean, default=True, nullable=False)
oneshot = sa.Column(sa.Boolean, default=False, nullable=False)

preference_id = sa.Column(
sa.Integer,
Expand All @@ -329,7 +330,8 @@ def __json__(self, reify=False):
'id': self.id,
'name': self.name,
'created_on': self.created_on,
'rules': [r.__json__(reify=reify) for r in self.rules]
'rules': [r.__json__(reify=reify) for r in self.rules],
'oneshot': self.oneshot
}

def __repr__(self):
Expand All @@ -343,6 +345,16 @@ def create(cls, session, name):
session.commit()
return filter

def fired(self, session):
if self.oneshot:
self.active = False
session.flush()
session.commit()

pref = self.preference
if pref:
self.notify(pref.openid, pref.context_name, "filters")

def add_rule(self, session, paths, rule, **kw):
if isinstance(rule, basestring):
rule = Rule.create_from_code_path(session, paths, rule, **kw)
Expand Down Expand Up @@ -632,7 +644,13 @@ def add_filter(self, session, filter, notify=True):

def set_filter_active(self, session, filter_name, active):
filter = self.get_filter_name(session, filter_name)
filter.active = active;
filter.active = active
session.commit()
self.notify(self.openid, self.context_name, "filters")

def set_filter_oneshot(self, session, filter_name, oneshot):
filter = self.get_filter_name(session, filter_name)
filter.oneshot = oneshot
session.commit()
self.notify(self.openid, self.context_name, "filters")

Expand Down
15 changes: 15 additions & 0 deletions fmn/lib/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,21 @@ def test_context_all(self):
detail_name="registration id", icon="phone")
eq_(len(fmn.lib.models.Context.all(self.sess)), 2)

def test_filter_oneshot(self):
filter = fmn.lib.models.Filter.create(self.sess, name="test filter")
filter.oneshot = True
eq_(filter.active, True)
eq_(filter.oneshot, True)
filter.fired(self.sess)
eq_(filter.active, False)

filter = fmn.lib.models.Filter.create(self.sess, name="test filter 2")
filter.oneshot = False
eq_(filter.active, True)
eq_(filter.oneshot, False)
filter.fired(self.sess)
eq_(filter.active, True)


class TestPreferences(fmn.lib.tests.Base):
def setUp(self):
Expand Down
3 changes: 3 additions & 0 deletions fmn/lib/tests/test_recipients.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ def test_basic_recipients_list(self):
'user': 'ralph.id.fedoraproject.org',
'filter_name': 'test filter',
'filter_id': 1,
'filter_oneshot': False,
})

def test_miss_recipients_list(self):
Expand Down Expand Up @@ -171,6 +172,7 @@ def test_multiple_identical_filters_hit(self):
'user': 'ralph.id.fedoraproject.org',
'filter_name': 'test filter',
'filter_id': 1,
'filter_oneshot': False
}
eq_(recipients['irc'][0], expected)

Expand Down Expand Up @@ -203,6 +205,7 @@ def test_multiple_different_filters_hit(self):
'user': 'ralph.id.fedoraproject.org',
'filter_name': 'test filter',
'filter_id': 1,
'filter_oneshot': False,
})

def test_load_preferences(self):
Expand Down

0 comments on commit 940813f

Please sign in to comment.