Releases: quantmind/aio-fluid
Release list
v2.4.3
Fixes two task queue issues: pydantic secret params were masked when a task
run was serialized to the queue, and a params validation error on the
consumer side crashed the worker.
- Secret params now survive the round-trip through the task queue and the
cpu-bound subprocess. Task runs are serialized for the queue with secret
values revealed via the newparams_dumphelper; all other dumps (logs,
endpoints) keep secrets masked.
(#103) - A task run consumed from the queue with invalid params no longer kills the
consumer worker. The broker raises the newTaskParamsErrorcarrying the
task run, and the consumer logs the error and marks the run as failed.
(#103)
v2.4.2
Tasks can now be tagged at registration time.
- The task registration methods accept an optional
tagsargument. When
provided, the extra tags are merged into each task's own tags as it is
registered — applied acrossregister_task,register_from_module, and
register_from_dict.
(#102) - Bumped
python-json-loggerto>= 4.1.0and switched JSON logging to the
newpythonjsonlogger.jsonformatter path (the oldpythonjsonlogger.jsonlogger
module is deprecated).
(#102)
v2.4.1
Task history can now be filtered by task tags.
- Added a
tagsfield to task history queries. Runs match when their task
carries at least one of the given tags, resolved against the live registry.
(#101)
v2.4.0
Lazy settings via pydantic-settings, JSONB params filtering for task
history, and customisable route prefixes.
- Settings are now lazy — resolved on first access instead of at import
time. Env vars use aFLUID_prefix by default; legacy unprefixed names
are kept as aliases.
(#100) - The task database plugin accepts a
route_prefixparameter for
customising history route URLs and replaceswith_task_history_router()
with aregister_routes()method.
(#100) - Task history queries support filtering by run params via a new
params
field (renamed fromHistoryQuerytoTaskHistoryQuery).
(#99) - Database migration required: the
paramscolumn is nowJSONBwith
a GIN index. See the example
migration
for the schema changes. - Removed
get_loggerfromfluid.utils.log. Task loggers are now obtained
directly vialogging.getLogger(module).
v2.3.1
v2.3.0 is broken — do not use it.
Fixes a regression in v2.3.0 where the httpx2 dependency was pinned to
>=2.2.0, which fails on Python 3.14 builds missing the _zstd C extension.
Pins httpx2 to >=2.0.0, <2.1.0 and switches all httpx imports to
httpx2 for correct namespace resolution.
httpx2is now pinned to>=2.0.0, <2.1.0— versions 2.1.0+ require the
compression.zstdstdlib module which is not available in all Python 3.14
builds.
(#98)- All
import httpxstatements replaced withimport httpx2 as httpx(or
from httpx2 import ...) to ensure correct namespace resolution regardless
ofhttpx2version. - Added test coverage for HttpxClient
and HttpxResponse.
v2.3.0
Moves development and documentation dependencies from optional-dependencies to
dependency groups, switches to
httpx2 for HTTP client support, and removes
the inflection dependency.
devanddocsdependencies are now declared under[dependency-groups]
instead of[project.optional-dependencies]. Installed viauv sync --all-groups.- The
httpextra now useshttpx2instead ofhttpx.httpx2provides the
samehttpxmodule so no code changes are required.
(#97) - The
inflectiondependency has been removed.
(#96)
v2.2.6
Adds tag filtering for task listings and fixes a race in the task database plugin.
- Task listings can be filtered by tag: the
GET /tasksendpoint and thels
command of the task CLI
accept a repeatabletagsoption that returns only tasks carrying at least
one of the given tags, andTaskInfonow reports each task's tags.
(#94) - The task database plugin
now serialises its per-run lifecycle writes with a dedicated task-run lock.
CrudDB.db_upsertis not atomic — it issues anUPDATEand onlyINSERTs
when nothing matched — so when the scheduler wrote thequeuedrow and a
consumer wrote therunningrow a few milliseconds later, the consumer's
UPDATEcould miss the not-yet-committedINSERT, fall through to its own
INSERTand violate the task-runs primary key. Holding the lock around the
upsert removes the race.
(#95) - TaskRun.lock
accepts an optionalnameto acquire a named sub-lock for the task run, and
timeoutnow defaults toNone. (#95)