Releases: curioswitch/pyvoy
v0.3.0
This release updates Envoy to 1.37.0. This allows us to use new dynamic modules ABIs to implement response backpressure with Envoy's flow control, the last remaining feature for full production-readiness. With this, pyvoy should generally be complete, with full implementations of ASGI and WSGI and features and controls needed for production. There are also a few additional enhancements and small bug fixes.
📈 Enhancements
- Implements response backpressure by delaying completion of application write / send requests when above the response buffer watermark
- Exposes quic listener port programatically, generally for cases where
tls_port = 0for automatic detection, resulting in separate ports for TCP and UDP - If TLS keys passed to the CLI do not correspond to a filesystem path, they are handled as raw certificates instead of as paths
- Programmatic setup of pyvoy will fail if Envoy fails to startup. To access logs for this failure case, it becomes necessary to setup
PyvoyServerwithout a context manager. Accessing logs programmatically will usually only be useful for pyvoy's own unit tests.
🛠️ Bug fixes
- IPv6 addresses are properly handled for scope values like
server - WSGI header values containing unicode are now presented with latin1 bytes as required rather than utf-8
Full Changelog: v0.2.2...v0.3.0
v0.2.2
This release fixes a typo in the platform tag used for free-threaded Python wheels, preventing their installation.
Full Changelog: v0.2.1...v0.2.2
v0.2.1
This release fixes a minor issue where asyncio shutdown would produce an error on older Python versions.
Full Changelog: v0.2.0...v0.2.1
v0.2.0
This is a large release. While previously, pyvoy was ready to serve production with fully implemented ASGI and WSGI specifications, we now have also aimed to add features to make it even easier to use. Most notably, pyvoy now supports Windows - we hope this can make it even easier to adopt pyvoy in existing flows. There have also been significant performance improvements, especially to WSGI.
Also, check out our new docs site at https://pyvoy.dev.
📈 Enhancements
- Support for Windows on amd64
- Support for free-threaded Python. Apps that enable the GIL at runtime should also continue to work.
- Support for IDE debugging
- Simple routing layer built into pyvoy, for example to allow hosting multiple applications
- Support worker pool for ASGI applications too and allow configuration of number of threads. This should only be used with ASGI when using free-threaded Python.
- A WSGI extension,
wsgi.ext.http.send_trailershas been implemented to allow WSGI applications to send trailers - ASGI2 double-callable applications are now supported
--print-envoy-entrypointcan be used to print a script to invoke Envoy with correct env variables, generally for Docker- Many performance improvements
🛠️ Bug fixes
- Requests with trailers no longer hang
Full Changelog: v0.1.3...v0.2.0
v0.1.3
This releases fixes a major issue that the host header was not populated in request data. It also allows validating client certificates without requiring it and adds a --reload flag to the CLI to automatically restart the server on changes to Python files in the current directory.
Full Changelog: v0.1.2...v0.1.3
v0.1.2
This release fixes an issue where occasionally request body would fail to be read potentially causing requests to hang for WSGI applications since they block waiting for request body.
v0.1.1
This release fixes a bug with loading pyvoy with macOS framework Python, which is notably what GitHub Actions setup-python uses by default. uv managed Python is unaffected.
v0.1.0
Welcome to pyvoy, the Python application server built on Envoy, one of the most robust HTTP servers around.
This is the first full-featured release - the intention is for all features of ASGI, including the trailers and tls extensions, and WSGI as per PEP3333 are implemented. We have a fairly large suite of unit tests that covers all known reachable code paths and can reliably pass some large external test suites such as for connect-python. However, especially with WSGI's open-ended nature, we need more verification with real-world apps. If you are interested, please give it a try and report any issues or potential improvements you find.
Special thanks to
- Envoy authors, especially @mathetake and @wbpcode for providing this excellent SDK that "just works" and helping me make some tweaks to enable pyvoy
- PyO3 for creating amazing bindings from Python to Rust, very easy to use and be confident in avoiding GIL and ref-count issues. I have written extensions in C++ in the past and it is a completely different ballgame thanks to this project.
v0.0.8
Fix missing uvloop dependency (#44)
v0.0.7
Bump version and update benchmark numbers (#43)