A command dispatcher and message bus implementation for python.
By decoupling domain logic from interface, both can evolve without impacting the other. You can add, remove, or change handlers without having to change the interface. You can also swap the interface out completely without touching the domain logic.
Though not required, the library functions well in a hexagonal or clean architecture. It can isolate the external services and allows a clean domain model. Defining the interface of the domain as a set of Commands and Events.