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.4.0 - 2024-11-24#
Added#
- Support for local scoped injection contexts.
- Provisional support for Python 3.14.
Removed#
- Support for Python 3.9 and 3.10.
0.3.3 - 2024-10-13#
Fixed#
- Correctly mark
ctxandcallbackas positional only in the call_with methods and functions to avoid conflicting with passed-through keyword arguments.
0.3.2 - 2024-10-07#
Changed#
- Support Python 3.13.
0.3.1 - 2024-06-24#
Changed#
- alluka.abc.Client.auto_inject_async now returns a real asynchronous function to improve compatibility with some third party libraries which use
asyncio.iscoroutinefunctionor inspect.iscoroutinefunction to validate callbacks.
0.3.0 - 2024-05-09#
Added#
- alluka.local is now directly exported on alluka.
- alluka.Context implementation of alluka.abc.Context which is a basic DI context implementation with no callback dependency result caching.
- alluka.CachingContext which extends alluka.Context to add callback dependency result caching.
- alluka.OverridingContext shallow DI context implementation for adding context specific type dependencies to an existing context.
- alluka.Client.set_make_context method for setting the callback used by the client to make DI contexts.
Changed#
- Callback dependency results are no-longer cached by default. To return this behaviour set alluka.CachingContext as the context maker.
Deprecated#
alluka.BasicContexthas been replaced by alluka.CachingContext.
Fixed#
- Injected callback results are now properly cached when alluka.CachingContext is set as the context.
0.2.0 - 2024-04-29#
Added#
- Transparent auto injection methods on
ClientatClient.auto_injectandClient.auto_inject_async. These wrap functions to make calls to them automatically inject dependencies and are transparent replacements for the self injecting system. More information on these can be found here. - A system for setting the injection client for a local scope (as defined by contextvars) and making dependency injection calls based on said context. More information on this can be found here.
- alluka.abc.Client.make_context method for creating a client bound context.
Changed#
get_type_dependencyandget_cached_valueboth now raise a KeyError when no value is found and no default was provided.- alluka.abc.Client.call_with_di and alluka.abc.Client.call_with_async_di now provide default implementations which use Client.make_context.
- alluka.abc.Context.call_with_di and alluka.abc.Context.call_with_async_di now provide default implementations which use Context.injection_client.
Deprecated#
Client.as_self_injectingin favour ofClient.auto_inject.Client.as_async_self_injectingin favour ofClient.auto_inject_async.alluka.SelfInjectingin favour ofClient.auto_inject.alluka.AsyncSelfInjectingin favour ofClient.auto_inject_async.
Removed#
alluka.abc.UNDEFINEDandalluka.abc.Undefined.
0.1.5 - 2024-04-22#
- Improve error message when attempting to use alluka.inject without DI.
0.1.4 - 2023-12-27#
Added#
- Python 3.12 support.
0.1.3 - 2022-11-12#
Added#
alluka.abc.Clientis now set as a type dependency by default.
Changed#
- Renamed
AsyncOnlyErrortoSyncOnlyError(AsyncOnlyErrorhas been kept as a deprecated alias). - Relaxed typing around DI for async callbacks to allow for returning a union of
Coroutine[Any, Any, T] | T.
Fixed#
- Don't error on async callbacks which return a coroutine after being awaited during DI when assertions are enabled.
Removed#
- The project metadata dunder attributes from alluka. importlib.metadata should be used to get this metadata instead.
0.1.2 - 2022-07-06#
Changed#
- The optional
introspect_annotationsparameter foralluka.Client.__init__is now keyword only. tanjun.abc.Clientis now a realabc.ABC.
Deprecated#
alluka.abc.Undefinedandalluka.abc.UNDEFINEDfor removal inv0.2.0as these will no-longer be used.get_type_dependencyandget_cached_resultreturningUNDEFINEDas the default when no default is passed will be replaced by aKeyErrorraise inv0.2.0.
0.1.1 - 2022-03-20#
Fixed#
- Regression around handling of "signature-less" builtin functions. A ValueError will no longer be raised in these cases.
0.1.0 - 2022-02-25#
All of the 0.1.0 entries are relative to the feature set exposed while this was a part of Tanjun.
Added#
- Support for synchronous dependency injection (this comes with
SyncOnlyError) - Abstract interface for the client with limited functionality.
call_with_diandcall_with_async_ditoalluka.abc.Contextas a shorthand for executing a callback with that context.call_with_di,call_with_async_di,call_with_ctxandcall_with_ctx_asyncmethods to the injection client for executing callbacks with DI.- Support for inferring the type of a parameter from its type hint when no
typeorcallbackis explicitly provided. - Support for using
typing.Annotatedto declare parameter DI. This takes two forms:parameter: alluka.Inject[Type]to infer specifically a type dependency.parameter: typing.Annotated(Type, alluka.inject(type=.../callback=...)).
Changed#
- Passed keyword arguments are now prioritised over dependency injection.
Removed#
- The public
CallackDescriptorandTypeDescriptorclasses as callbacks are now processed within the client and any necessary caching is kept internal.