modern-di-celery 2.0.1 — @inject variadic fail-fast
A patch release fixing silent argument corruption in @inject.
Fix
-
@injectnow rejects*args/**kwargsat decoration time. Since 2.0.0,
@injectbinds a task's arguments to its visible signature by name (which is
what makes injection parameter-order-insensitive). That by-name call could not
faithfully forward variadic parameters:inspect.Signature.bindstores
*args/**kwargsvalues under the literal names"args"/"kwargs", so a
task declaring*args/**kwargsalongside aFromDIparameter had its
real payload silently misrouted into a keyword argument (e.g. a caller's
(1, 2, foo="bar")arrived inside the task asargs=(), kwargs={"args": (1, 2), "kwargs": {"foo": "bar"}}) instead of raising.@injectnow raises a clearTypeErrorat decoration time when a task
declares aVAR_POSITIONALorVAR_KEYWORDparameter together with aFromDI
parameter, naming the offending parameter and pointing at explicit named
parameters as the fix. A task with noFromDIparameter is returned
unchanged and may use*args/**kwargsfreely.
Downstream
- Potentially breaking, intentionally. A task that previously combined
@inject/DITaskwith*args/**kwargsand aFromDIparameter was already
broken at runtime (silently corrupted arguments); it now fails loudly at import
time. Replace the variadic parameters with explicit named parameters.
Internals
- 100% line coverage;
ruff,ty, andeof-fixerclean. Two new tests cover
theVAR_POSITIONALandVAR_KEYWORDrejection paths.