summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrebs <drebs@leap.se>2013-03-20 13:12:50 -0300
committerdrebs <drebs@leap.se>2013-03-22 17:02:56 -0300
commit0e6d6850d3c3df67eba054398fa84cd8b9977ecd (patch)
tree5eb0ce8f17e23e6bd475e94aaef704abd36f252c
parenta16d533125d4fc1c40ee85ad2e626d7373e7719a (diff)
Add callback registering.
-rw-r--r--src/leap/common/events/__init__.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/leap/common/events/__init__.py b/src/leap/common/events/__init__.py
new file mode 100644
index 0000000..27542a9
--- /dev/null
+++ b/src/leap/common/events/__init__.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# __init__.py
+# Copyright (C) 2013 LEAP
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from leap.common.events import (
+ signal_pb2,
+)
+
+
+# the `registered_callbacks` dictionary below should have the following
+# format:
+#
+# { component: [ (uid, callback), ... ], ... }
+#
+registered_callbacks = {}
+
+
+def register(signal, callback, uid=None, replace=False):
+ """
+ Registers `callback` to be called when `signal` is signaled.
+ """
+ if not registered_callbacks.has_key(signal):
+ registered_callbacks[signal] = []
+ cbklist = registered_callbacks[signal]
+ if uid and filter(lambda (x,y): x == uid, cbklist):
+ # TODO: create appropriate exception
+ if not replace:
+ raise Exception("Callback already registered.")
+ else:
+ registered_callbacks[signal] = filter(lambda(x,y): x != uid,
+ cbklist)
+ registered_callbacks[signal].append((uid, callback))
+ return uid
+
+#def get_registered_callbacks():
+# return registered_callbacks
+
+#__all__ = ['signal_pb2', 'service', 'register', 'registered_callbacks']