Skip to content

0.18.0 - Totally uncalled for

Choose a tag to compare

@chrisguidry chrisguidry released this 02 Mar 16:14
· 121 commits to main since this release
744a614

The big news with this release is that I've extracted Docket's dependency system to it's own library called uncalled-for (https://github.com/chrisguidry/uncalled-for and https://pypi.org/project/uncalled-for/). This should be a transparent change for all Docket users, and I've done everything I could to make sure that the import surface area is completely compatible.

I also took this opportunity to implement some ideas that we've been bouncing around for a bit, where we have Annotated dependencies specifically for dependencies that need to modify their behavior based on a parameter. For example, if you want to set a concurrency limit by customer, that looks like:

async def hit_customer_webhook(customer_id: Annotated[int, ConcurrencyLimit(2)]):
    ...

(note, the prior style continues to work for ConcurrencyLimit)

Inspired by this new style, I've implemented some additional modifiers to runtime behavior/admissions, Debouce, Cooldown, and RateLimit, which all hopefully do what they sound like they do. More on those new behavior dependencies in the docs.

Please note that with Annotated dependencies, they are still activated for the lifecycle of the task, but their return values aren't accessible as parameters. This is a design choice and we will not be supporting some_parameter: Annotated[SomeType, Depends(some_function)]. Our stance is that any dependency like that should be provided via a kwarg default to keep the intention clear. I want to thank @omikader for helping me think through this and bravely taking a stab at one version of Annotated dependencies.

What's Changed

Compatibility guarantees

I've tested both FastMCP 2.x and FastMCP 3.x with no other code changes and both are operating correctly. Prefect doesn't use any relevant imports from Docket and is using only the public API that's remained unchanged.

Full Changelog: 0.17.9...0.18.0