Skip to content

Latest commit

 

History

History
168 lines (139 loc) · 6.98 KB

CHANGELOG.md

File metadata and controls

168 lines (139 loc) · 6.98 KB

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.

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 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

  • [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 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

  • get_type_dependency and get_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.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][alluka.abc.Context.injection_client].

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

  • 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 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.