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

Commit

Permalink
Merge pull request #5 from fedora-infra/feature/fedmsg-messages
Browse files Browse the repository at this point in the history
Some fedmsg notifications.
  • Loading branch information
ralphbean committed May 13, 2014
2 parents a55d5e3 + 532580b commit 1d966a8
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
36 changes: 35 additions & 1 deletion fmn/lib/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,27 @@
from sqlalchemy.orm import relation
from sqlalchemy.orm import backref

import fedmsg
import fedmsg.utils

import fmn.lib.defaults

BASE = declarative_base()

class FMNBase(object):
def notify(self, openid, context, changed):
obj = type(self).__name__.lower()
topic = obj + ".update"
fedmsg.publish(
topic=topic,
msg=dict(
openid=openid,
context=context,
changed=changed,
)
)


BASE = declarative_base(cls=FMNBase)

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -356,6 +372,11 @@ def add_rule(self, session, paths, rule, **kw):
self.rules.append(rule)
session.flush()
session.commit()

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

return rule

def remove_rule(self, session, code_path, **kw):
Expand Down Expand Up @@ -469,6 +490,7 @@ def set_batch_values(self, session, delta, count):
self.batch_count = count
session.add(self)
session.commit()
self.notify(self.openid, self.context_name, "batch_values")

@classmethod
def by_user(cls, session, openid):
Expand Down Expand Up @@ -548,6 +570,7 @@ def delete_details(self, session, detail_value):
session.delete(value)
session.flush()
session.commit()
self.notify(self.openid, self.context_name, "details")

def update_details(self, session, detail_value):
log.debug("Adding %r to %r" % (detail_value, self))
Expand All @@ -556,16 +579,25 @@ def update_details(self, session, detail_value):
self.detail_values.append(value)
session.flush()
session.commit()
self.notify(self.openid, self.context_name, "details")

def set_enabled(self, session, enabled):
self.enabled = enabled
session.flush()
session.commit()
self.notify(self.openid, self.context_name, "enabled")

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

def add_filter(self, session, filter):
self.filters.append(filter)
session.flush()
session.commit()
self.notify(self.openid, self.context_name, "filters")

def has_filter_name(self, session, filter_name):
for filter in self.filters:
Expand Down Expand Up @@ -725,6 +757,7 @@ def set_value(self, session, value):
self.detail_value = value
session.flush()
session.commit()
self.notify(self.openid, self.context_name, "value")

def set_status(self, session, status):
assert status in self.STATUSES
Expand All @@ -738,6 +771,7 @@ def set_status(self, session, status):

session.flush()
session.commit()
self.notify(self.openid, self.context_name, "status")


class QueuedMessage(BASE):
Expand Down
10 changes: 10 additions & 0 deletions fmn/lib/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,20 @@ def setUp(self):
self.valid_paths = fmn.lib.load_rules(
root='fmn.lib.tests.example_rules')

def mock_notify(self, openid, context, changed):
if not hasattr(self, 'notified'):
self.notified = []
self.notified.append([openid, context, changed])

self.original_notify = fmn.lib.models.FMNBase.notify
fmn.lib.models.FMNBase.notify = mock_notify

def tearDown(self):
""" Remove the test.db database if there is one. """
dbfile = DB_PATH.split('///')[1]
if os.path.exists(dbfile):
os.unlink(dbfile)

self.sess.rollback()

fmn.lib.models.FMNBase.notify = self.original_notify

0 comments on commit 1d966a8

Please sign in to comment.