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.3.3 - 2024-10-13#
Fixed#
- Correctly mark
ctx
andcallback
as 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.iscoroutinefunction or 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.BasicContext
has 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
Client
atClient.auto_inject
andClient.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_dependency
andget_cached_value
both 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_injecting
in favour ofClient.auto_inject
.Client.as_async_self_injecting
in favour ofClient.auto_inject_async
.alluka.SelfInjecting
in favour ofClient.auto_inject
.alluka.AsyncSelfInjecting
in favour ofClient.auto_inject_async
.
Removed#
alluka.abc.UNDEFINED
andalluka.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.Client
is now set as a type dependency by default.
Changed#
- Renamed
AsyncOnlyError
toSyncOnlyError
(AsyncOnlyError
has 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_annotations
parameter foralluka.Client.__init__
is now keyword only. tanjun.abc.Client
is now a realabc.ABC
.
Deprecated#
alluka.abc.Undefined
andalluka.abc.UNDEFINED
for removal inv0.2.0
as these will no-longer be used.get_type_dependency
andget_cached_result
returningUNDEFINED
as the default when no default is passed will be replaced by aKeyError
raise 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_di
andcall_with_async_di
toalluka.abc.Context
as a shorthand for executing a callback with that context.call_with_di
,call_with_async_di
,call_with_ctx
andcall_with_ctx_async
methods to the injection client for executing callbacks with DI.- Support for inferring the type of a parameter from its type hint when no
type
orcallback
is explicitly provided. - Support for using
typing.Annotated
to 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
CallackDescriptor
andTypeDescriptor
classes as callbacks are now processed within the client and any necessary caching is kept internal.