diff --git a/attract_server/__init__.py b/attract_server/__init__.py index c947e4d..d935e32 100644 --- a/attract_server/__init__.py +++ b/attract_server/__init__.py @@ -1,12 +1,16 @@ from pillar.extension import PillarExtension from .modules import blueprint +from . import task_manager class AttractExtension(PillarExtension): + def __init__(self): + self.task_manager = task_manager.TaskManager() + @property def name(self): - return 'Attract' + return 'attract' def flask_config(self): """Returns extension-specific defaults for the Flask configuration. @@ -52,3 +56,10 @@ class AttractExtension(PillarExtension): :rtype: list of flask.Blueprint objects. """ return [blueprint] + + def setup_app(self, app): + """Connects Blinker signals.""" + + from . import subversion + + subversion.task_logged.connect(self.task_manager.task_logged_in_svn) diff --git a/attract_server/task_manager.py b/attract_server/task_manager.py new file mode 100644 index 0000000..ad98840 --- /dev/null +++ b/attract_server/task_manager.py @@ -0,0 +1,21 @@ +"""Task management.""" + +import attr + +from . import attrs_extra + + +@attr.s +class TaskManager(object): + _log = attrs_extra.log('%s.TaskManager' % __name__) + + def task_logged_in_svn(self, sender, task_id, log_entry): + """Blinker signal receiver; connects the logged commit with the task. + + :param sender: sender of the signal + :type sender: attract_server.subversion.CommitLogObserver + :param task_info: {'task_id': '123', 'log_entry': LogEntry} dict. + :type task_info: dict + """ + + self._log.info("Task '%s' logged in SVN: %s", task_id, log_entry)