Skip to content

Synchronous handlers #98

@danielknell

Description

@danielknell

Description

Allow registering regular functions as handlers.

Motivation

Sometimes asynchronous options are not available for handling a request, to handle these cases it would be useful to be able to register regular functions as handlers instead of co-routines.

@registry.subscribe_to(CreateWidget)
def handler(command: CreateWidget, bus: banshee.SyncBus) -> None:
    # synchronous task here
    ...

    bus.handle(WidgetCreated(id=command.id))

Possible implementation

Update the Registry class to allow synchronous functions to be subscribed to requests, and wrap them in a thread pool before registering via loop.run_in_executor.

These synchronous handlers would also need a synchronous wrapper around the MessageBus class to then further publish events.

This will need additional work and documentation around the injector integration to minimise problems with sharing resources between threads.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions