docs: def bind(topic, signal=None, kind=MIDDLE, nice=-1):
      """
      This is a decorator function, so you should use it as:
          
          @bind('init')
          def process_init(a, b):
              ...
      """
      def f(func):
          if not topic in _receivers:
              receivers = _receivers[topic] = []
          else:
              receivers = _receivers[topic]
          
          if nice == -1:
              if kind == MIDDLE:
                  n = 500
              elif kind == HIGH:
                  n = 100
              else:
                  n = 900
          else:
              n = nice
          if callable(func):
              func_name = func.__module__ + '.' + func.__name__
              func = func
          else:
              func_name = func
              func = None
          _f = (n, {'func':func, 'signal':signal, 'func_name':func_name})
          receivers.append(_f)
          return func
      return f