diff --git a/asyncevents/__init__.py b/asyncevents/__init__.py index 78c66ee..2c9156f 100644 --- a/asyncevents/__init__.py +++ b/asyncevents/__init__.py @@ -67,6 +67,14 @@ async def emit(event: str, block: bool = True): await get_current_emitter().emit(event, block) +async def exists(event: str): + """ + Shorthand for get_current_emitter().exists(event) + """ + + return get_current_emitter().exists(event) + + def on_event(event: str, priority: int = 0, emitter: AsyncEventEmitter = get_current_emitter(), oneshot: bool = False): """ Decorator shorthand of emitter.register_event(event, f, priority, oneshot) @@ -94,6 +102,7 @@ __all__ = [ "on_event", "emit", "wait", + "exists", "get_current_emitter", "set_current_emitter", ] diff --git a/tests/priority.py b/tests/priority.py new file mode 100644 index 0000000..21e112c --- /dev/null +++ b/tests/priority.py @@ -0,0 +1,36 @@ +import asyncio +from asyncevents import on_event, emit, wait + + +@on_event("event") # Priority defaults to 0, hence highest +async def first(_, event: str): + print(f"Ran first for {event!r}!") + + +@on_event("event", priority=1) # Higher number = lower priority +async def second(_, event: str): + print(f"Ran second for {event!r}!") + + +@on_event("event", priority=1) # You can add as many handlers as you want at a given priority level +async def also_second(_, event: str): + print(f"Ran second too for {event!r}!") + + +@on_event("event", priority=2) # Higher number = lower priority +async def third(_, event: str): + print(f"Ran third for {event!r}!") + + +async def main(): + print("Firing blocking event 'event'") + await emit("event") + print("Handlers for event 'event' have exited") + print("Firing non-blocking event 'event'") + await emit("event", block=False) + print("Non-blocking event 'event' fired, waiting on it") + await wait("event") + + +if __name__ == "__main__": + asyncio.run(main())