If you're looking to make Web3.py do something outside of its native
functionality, you've got at least a few options: middleware, custom methods,
external modules, and custom providers. This post will walk through what each of
those are, when you might reach for them, and how to get started.