__callbacks = {}

def register(event, callback, *args, **kwargs):
    cb = callback
    if len(args) + len(kwargs) > 0:
        cb = lambda: callback(*args, **kwargs)

    __callbacks.setdefault(event, []).append(cb)

def clear():
    __callbacks.clear()

def trigger(event, *args, **kwargs):
    for callback in __callbacks.get(event, []):
        if len(args) + len(kwargs) == 0:
            callback()
        else:
            callback(*args, **kwargs)

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4