Repository navigation
0.80.0
Breaking
- Only the class a decorator was applied to is provided.
is_providedread__provided__withhasattr, and a subclass inherits it, socontainer.scan()registered classes nobody marked, an inheritedaliasregistered the same interface twice, and an inheritedfrom_contextclaimed a registration nobody made. A subclass that used to resolve by inheriting its base's scope now raisesLookupErrornaming the class, so decorate it too. by @antonrh in #331
@singleton
class BaseSender: ...
@singleton
class SmtpSender(BaseSender): ...Lifespan
- Closing a container drops the instances whose finalisers ran, so reopening it makes the resources again. An instance with no resource of its own stays. by @antonrh in #328
container.release(T)closes the resource by @antonrh in #316container.release(T)drops the instance even when the finaliser raises, andcontainer.reset()releases everything before re-raising the first failure by @antonrh in #327- A scope whose entry fails closes what it had already opened, which Python skips when
__enter__raises by @antonrh in #312 - Exiting a context with
withwhile it holds an async resource raises, instead of leaving the resource open by @antonrh in #315
Resolution
- A module subclass keeps the providers its base declared, and replaces the ones it redefines by @antonrh in #331
- A
TypeVarrenamed by a base class resolves, including nested in an argument likeRepo[Box[T]]by @antonrh in #329 - A scoped instance is created once when tasks share the scope by @antonrh in #313
Extensions
FastAPI: routes in a mounted application are wired, and a route added afterinstall()is validated as it is added.FastStream: every handler of a subscriber is injected, not only the first.pydantic_settings.install()can run twice withoverride=True, and names the model and the field on a clash. by @antonrh in #330- An extension whose package is missing says what to install by @antonrh in #323
- The
pytestplugin no longer breaks every test run whenanyiorenames a helper by @antonrh in #325
Documentation
- A getting started page, a reference generated from the docstrings, and every snippet checked to run by @antonrh in #322
- The pages say it plainly, and how they are written and checked is written down by @antonrh in #321
Dependencies
wrapt>=1.17.3.container.ref()builds on the pure-PythonObjectProxy, whichwrapt.wrappersexposes from that version, because the C one ignores the__wrapped__override that makes a reference lazy. by @antonrh in #314
What's changed
- Run the tests on the Python the matrix names by @antonrh in #311
- Fix scope entry unwind by @antonrh in #312
- Create a scoped instance once when tasks share the scope by @antonrh in #313
- Require the wrapt that has the proxy Ref needs by @antonrh in #314
- Refuse to close a context that holds async resources by @antonrh in #315
- Close the resource when an instance is released by @antonrh in #316
- Docs fix broken snippets by @antonrh in #318
- Say it plainly in the extension pages by @antonrh in #319
- Write down how the documentation is written and checked by @antonrh in #321
- Correct the docs, and give them a getting started and a reference by @antonrh in #322
- Say what to install when an extension's package is missing by @antonrh in #323
- Add release job and skill by @antonrh in #324
- Keep a renamed anyio helper from breaking every test run by @antonrh in #325
- Open the testing page with what a test does by @antonrh in #326
- Forget an instance even when its finaliser raises by @antonrh in #327
- Forget an instance whose resource the context closed by @antonrh in #328
- Resolve generic parameters that a base class renamed by @antonrh in #329
- Fix injection in mounted apps, late routes and stacked subscribers by @antonrh in #330
- Keep the base module providers on a subclass by @antonrh in #331
- Release 0.80.0 by @antonrh in #332
Full Changelog: 0.79.1...0.80.0