Asphalt is an asyncio based microframework for network oriented applications.
Its highlight features are:
- An ecosystem of components for integrating functionality from third party libraries and external services
- A configuration system where hard-coded defaults can be selectively overridden by external configuration
- A sophisticated signal system that lets you connect different services to create complex event-driven interactions
- Supports uvloop, tokio and aiogevent as event loop policy providers (though YMMV with the last two)
- Elegant handling of blocking APIs through the use of thread pooling
- Run time type checking for development and testing to fail early when functions are called with incompatible arguments (can be disabled with zero overhead for production deployments!)
- Type hints and semantic versioning used throughout the core and all component libraries
Asphalt can be used to make any imaginable kind of networked application, ranging from trivial command line tools to highly complex component hierarchies that start multiple network servers and/or clients using different protocols.
What really sets Asphalt apart from other frameworks is its resource sharing system โ the kind of functionality usually only found in bulky application server software. Asphalt components publish their services as resources in a shared context. Components can build on resources provided by each other, making it possible to create components that offer highly sophisticated functionality with relatively little effort.