'Tries a waiting callback.
Calls the callback, removes from _waiters, and returns True if
all are satisfied.'

def _try_waiter(self, entry):

    if (entry not in self._waiters):
        return
    (callback, name, components, args_, kw_) = entry
    for c in components:
        if (not self.hasComponent(c)):
            return False
    self._waiters.remove(entry)
    try:
        if (callback is not None):
            callback(*args_, **kw_)
    except:
        import traceback
        msg = ('Exception    while    trying    to    notify    ' + name)
        import inspect
        try:
            msg += ('    at    ' + inspect.getfile(callback))
            msg += (':' + str(inspect.getsourcelines(callback)[1]))
        except:
            pass
        log.exception(msg)
    return True
