def on_close(self): for channel in self.channels: channels[channel].remove(self) if len(channels[channel]) == 0: del channels[channel] handlers.remove(self) console('websocket', "Closed") verbs = { 'status': "Status set", 'name': "Renamed", 'goal': "Goal set", 'assigned': "Reassigned", 'hours': "Hours updated", } from Event import EventHandler, addEventHandler class ShareTaskChanges(EventHandler): def newTask(self, handler, task): WebSocket.sendChannel("backlog#%d" % task.sprint.id, {'type': 'new'}); #TODO def taskUpdate(self, handler, task, field, value): if field == 'assigned': # Convert set of Users to list of usernames value = [user.username for user in value] elif field == 'goal': # Convert Goal to goal ID value = value.id if value else 0 description = ("%s by %s" % (verbs[field], task.creator)) if field in verbs else None WebSocket.sendChannel("backlog#%d" % task.sprint.id, {'type': 'update', 'id': task.id, 'revision': task.revision, 'field': field, 'value': value, 'description': description, 'creator': task.creator.username}) addEventHandler(ShareTaskChanges())
from Log import console from Cron import Cron from HTTPServer import server as getServer, ServerError from Settings import PORT, settings from WebSocket import WebSocket from Event import addEventHandler from event_handlers import * from rorn.Session import setSerializer from SessionSerializer import SessionSerializer setSerializer(SessionSerializer()) currentThread().name = 'main' # addEventHandler(DebugLogger.DebugLogger()) addEventHandler(DBLogger.DBLogger()) addEventHandler(ErrorCounter.errorCounter) addEventHandler(MessageDispatcher.MessageDispatcher()) if settings.redis: host, port = settings.redis.split(':', 1) port = int(port) addEventHandler(EventPublisher.EventPublisher(host, port)) # When python is started in the background it ignores SIGINT instead of throwing a KeyboardInterrupt def signal_die(signum, frame): signals = dict((getattr(signal, name), name) for name in dir(signal) if name.startswith('SIG') and '_' not in name) raise SystemExit("Caught %s; exiting" % signals.get(signum, "signal %d" % signum)) signal.signal(signal.SIGINT, signal.default_int_handler) signal.signal(signal.SIGTERM, signal_die) # Daemonize