Skip to content

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 and callback 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#

0.3.0 - 2024-05-09#

Added#

Changed#

  • Callback dependency results are no-longer cached by default. To return this behaviour set alluka.CachingContext as the context maker.

Deprecated#

Fixed#

0.2.0 - 2024-04-29#

Added#

  • Transparent auto injection methods on Client at Client.auto_inject and Client.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#

Deprecated#

  • Client.as_self_injecting in favour of Client.auto_inject.
  • Client.as_async_self_injecting in favour of Client.auto_inject_async.
  • alluka.SelfInjecting in favour of Client.auto_inject.
  • alluka.AsyncSelfInjecting in favour of Client.auto_inject_async.

Removed#

  • alluka.abc.UNDEFINED and alluka.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 to SyncOnlyError (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#

0.1.2 - 2022-07-06#

Changed#

  • The optional introspect_annotations parameter for alluka.Client.__init__ is now keyword only.
  • tanjun.abc.Client is now a real abc.ABC.

Deprecated#

  • alluka.abc.Undefined and alluka.abc.UNDEFINED for removal in v0.2.0 as these will no-longer be used.
  • get_type_dependency and get_cached_result returning UNDEFINED as the default when no default is passed will be replaced by a KeyError raise in v0.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 and call_with_async_di to alluka.abc.Context as a shorthand for executing a callback with that context.
  • call_with_di, call_with_async_di, call_with_ctx and call_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 or callback 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 and TypeDescriptor classes as callbacks are now processed within the client and any necessary caching is kept internal.