Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
0.7.1 - 2026-06-10¶
No functional changes to the library — documentation and packaging only.
Added¶
- Documentation site built with MkDocs Material and published to GitHub
Pages at https://andy-takker.github.io/asyncly/ (versioned via
mike): Overview, Installation, Quickstart, a testing-strategies page, usage guides for every subsystem, and an autogenerated API reference (mkdocstrings). - Google-style docstrings across the public API.
DocumentationURL in the project metadata (shown on PyPI).
Changed¶
- Rewrote
README.rstas a slim, friendlyREADME.mdlanding that links to the full documentation.
0.7.0 - 2026-06-10¶
Added¶
- Proxy support in
BaseHttpClient: new keyword-onlyproxyandproxy_autharguments (also onInstrumentableHttpClient). Set them once on the client or override per request; both are forwarded to aiohttp. - Forwarding mock proxy
start_proxy(*, auth=...)andMockProxyServiceinasyncly.srvmocker. Spins up an in-process HTTP proxy that records every request passing through it and forwards it to the real target, so tests can assert a client genuinely routes through a proxy. SupportsProxy-Authorizationvalidation (returns407and does not forward on mismatch). MirrorsMockService's assertion helpers (assert_called,assert_not_called,get_calls,last_call). HTTP targets only (noCONNECT/HTTPS tunnelling). mock_proxypytest fixture exposing a ready-to-use forwarding proxy.
0.6.2 - 2026-05-11¶
Security¶
- Re-release of 0.6.1 with the
aiohttp>=3.13.3constraint actually included in the published wheel. Version 0.6.1 was tagged before the dependency bump from #29 merged, so the uploaded artifact still allowed vulnerableaiohttp<3.13.3. Both 0.6.0 and 0.6.1 are yanked from PyPI. Installasyncly>=0.6.2to receive the CVE-2025-69223 mitigation.
0.6.1 - 2026-05-11¶
Security¶
- Bump minimum
aiohttpto>=3.13.3to address CVE-2025-69223: a zip-bomb DoS inaiohttp's handling of compressed request/response bodies (affects aiohttp<= 3.13.2). Thanks to @loganaden for the report and fix (#29).
0.6.0 - 2026-05-11¶
Added¶
- Pytest plugin (
asyncly.pytest_plugin) auto-registered viapytest11entry-point. Providesmock_routesandmock_servicefixtures so tests no longer need to wire their ownstart_servicecontext manager. - Request matching via the new
Matchbuilder onMockRoute. Multiple routes can share(method, path)and be dispatched by JSON body, headers (subset), query (subset), or raw body. Routes withoutmatch=act as fallbacks within their group. - Assertion helpers on
MockService:get_calls(name),last_call(name),assert_called(name, *, times=, json=, body=, headers=, query=),assert_not_called(name). RawResponsefor returning arbitrary bytes with arbitrary headers — useful for testing client behavior on malformed JSON or unexpected content types.- TLS support in
start_service(routes, *, ssl_context=...)— pass anssl.SSLContextto serve over HTTPS (MockService.url.scheme == "https"). SequenceResponse(on_exhausted=...)with three modes:"raise"(default, new behavior raisesSequenceExhaustedwith a clear message),"cycle","last". Now exported directly fromasyncly.srvmocker.- New exceptions:
SrvMockerError,SequenceExhausted,UnknownHandlerError.
Changed¶
MockService.register()now emitsDeprecationWarningwhen called with ahandler_namenot declared in anyMockRoute. Will becomeUnknownHandlerErrorin 0.7.SequenceResponseon exhaustion now raises a typedSequenceExhaustedinstead of bubblingRuntimeErrorfrom PEP 479. Default behavior otherwise unchanged.Matchdefensively copiesheadersandquerydict arguments at construction time — caller-side mutation of the original dict no longer affects matcher behavior.
Fixed¶
SequenceResponse([])now raisesValueErroreagerly instead of failing on first use.