taskito 0.12.2__tar.gz → 0.13.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {taskito-0.12.2 → taskito-0.13.0}/Cargo.lock +31 -30
- {taskito-0.12.2 → taskito-0.13.0}/PKG-INFO +7 -2
- {taskito-0.12.2 → taskito-0.13.0}/README.md +1 -1
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/Cargo.toml +1 -1
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/job.rs +10 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/scheduler/maintenance.rs +1 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/scheduler/mod.rs +1 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/diesel_common/jobs.rs +3 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/diesel_common/migrations.rs +7 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/mod.rs +2 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/models.rs +5 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/archival.rs +1 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/dead_letter.rs +3 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/dead_letter.rs +5 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/mod.rs +8 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/schema.rs +3 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/archival.rs +1 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/dead_letter.rs +3 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/tests.rs +46 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/tests/rust/storage_tests.rs +1 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/Cargo.toml +3 -3
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_job.rs +14 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_queue/inspection.rs +1 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_queue/mod.rs +9 -2
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_queue/workflow_ops/fan_out.rs +14 -3
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_queue/workflow_ops/lifecycle.rs +13 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_queue/workflow_ops/mod.rs +16 -10
- taskito-0.13.0/crates/taskito-python/src/py_queue/workflow_ops/saga.rs +124 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/Cargo.toml +11 -1
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/src/diesel_common.rs +219 -86
- taskito-0.13.0/crates/taskito-workflows/src/lib.rs +304 -0
- taskito-0.13.0/crates/taskito-workflows/src/node.rs +121 -0
- taskito-0.13.0/crates/taskito-workflows/src/postgres_store.rs +125 -0
- taskito-0.13.0/crates/taskito-workflows/src/redis_store.rs +886 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/src/sqlite_store.rs +22 -1
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/src/state.rs +28 -4
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/src/storage.rs +31 -0
- taskito-0.13.0/crates/taskito-workflows/src/tests.rs +163 -0
- taskito-0.13.0/crates/taskito-workflows/tests/storage_contract.rs +727 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/__init__.py +7 -2
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/_taskito.pyi +27 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/app.py +111 -1
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/async_support/mixins.py +2 -1
- taskito-0.13.0/py_src/taskito/batching/__init__.py +32 -0
- taskito-0.13.0/py_src/taskito/batching/accumulator.py +160 -0
- taskito-0.13.0/py_src/taskito/batching/config.py +52 -0
- taskito-0.13.0/py_src/taskito/batching/result.py +44 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/context.py +24 -6
- taskito-0.13.0/py_src/taskito/dashboard/_testing.py +83 -0
- taskito-0.13.0/py_src/taskito/dashboard/auth.py +453 -0
- taskito-0.13.0/py_src/taskito/dashboard/delivery_store.py +208 -0
- taskito-0.13.0/py_src/taskito/dashboard/handlers/auth.py +128 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/handlers/logs.py +3 -1
- taskito-0.13.0/py_src/taskito/dashboard/handlers/middleware.py +62 -0
- taskito-0.13.0/py_src/taskito/dashboard/handlers/oauth.py +115 -0
- taskito-0.13.0/py_src/taskito/dashboard/handlers/overrides.py +95 -0
- taskito-0.13.0/py_src/taskito/dashboard/handlers/webhook_deliveries.py +111 -0
- taskito-0.13.0/py_src/taskito/dashboard/handlers/webhooks.py +241 -0
- taskito-0.13.0/py_src/taskito/dashboard/middleware_store.py +88 -0
- taskito-0.13.0/py_src/taskito/dashboard/oauth/__init__.py +46 -0
- taskito-0.13.0/py_src/taskito/dashboard/oauth/config.py +257 -0
- taskito-0.13.0/py_src/taskito/dashboard/oauth/flow.py +167 -0
- taskito-0.13.0/py_src/taskito/dashboard/oauth/identity.py +89 -0
- taskito-0.13.0/py_src/taskito/dashboard/oauth/pkce.py +16 -0
- taskito-0.13.0/py_src/taskito/dashboard/oauth/providers.py +441 -0
- taskito-0.13.0/py_src/taskito/dashboard/oauth/state_store.py +137 -0
- taskito-0.13.0/py_src/taskito/dashboard/overrides_store.py +341 -0
- taskito-0.13.0/py_src/taskito/dashboard/request_context.py +94 -0
- taskito-0.13.0/py_src/taskito/dashboard/routes.py +266 -0
- taskito-0.13.0/py_src/taskito/dashboard/server.py +619 -0
- taskito-0.13.0/py_src/taskito/dashboard/url_safety.py +115 -0
- taskito-0.13.0/py_src/taskito/dashboard/webhook_store.py +204 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/events.py +7 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/exceptions.py +8 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/log_config.py +59 -1
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/middleware.py +8 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/__init__.py +4 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/decorators.py +152 -2
- taskito-0.13.0/py_src/taskito/mixins/events.py +117 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/lifecycle.py +27 -1
- taskito-0.13.0/py_src/taskito/mixins/middleware_admin.py +70 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/operations.py +6 -2
- taskito-0.13.0/py_src/taskito/mixins/overrides.py +151 -0
- taskito-0.13.0/py_src/taskito/notes.py +122 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/prefork/child.py +22 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/handlers/requests_session.py +1 -1
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/result.py +28 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/serializers.py +8 -2
- taskito-0.13.0/py_src/taskito/static/dashboard/assets/index-D8mHurt8.css +2 -0
- taskito-0.13.0/py_src/taskito/static/dashboard/assets/index-DfuYPvob.js +12 -0
- taskito-0.13.0/py_src/taskito/static/dashboard/assets/layout-cGiHL4o3.js +48 -0
- taskito-0.12.2/py_src/taskito/static/dashboard/assets/logs.lazy-Y9Too0w9.js → taskito-0.13.0/py_src/taskito/static/dashboard/assets/logs.lazy-RTtICmE9.js +2 -2
- taskito-0.12.2/py_src/taskito/static/dashboard/assets/metrics.lazy-BuRqZ_N1.js → taskito-0.13.0/py_src/taskito/static/dashboard/assets/metrics.lazy-BjwhkBe2.js +5 -5
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/static/dashboard/index.html +3 -3
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/task.py +4 -0
- taskito-0.13.0/py_src/taskito/webhooks.py +331 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/analysis.py +1 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/builder.py +52 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/mixins.py +4 -0
- taskito-0.13.0/py_src/taskito/workflows/saga/__init__.py +8 -0
- taskito-0.13.0/py_src/taskito/workflows/saga/context.py +59 -0
- taskito-0.13.0/py_src/taskito/workflows/saga/orchestrator.py +768 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/tracker/sub_workflows.py +7 -1
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/tracker/tracker.py +86 -3
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/tracker/types.py +8 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/types.py +17 -1
- {taskito-0.12.2 → taskito-0.13.0}/pyproject.toml +16 -1
- taskito-0.12.2/crates/taskito-workflows/src/lib.rs +0 -239
- taskito-0.12.2/crates/taskito-workflows/src/node.rs +0 -75
- taskito-0.12.2/crates/taskito-workflows/src/tests.rs +0 -840
- taskito-0.12.2/py_src/taskito/dashboard/routes.py +0 -95
- taskito-0.12.2/py_src/taskito/dashboard/server.py +0 -319
- taskito-0.12.2/py_src/taskito/mixins/events.py +0 -62
- taskito-0.12.2/py_src/taskito/static/dashboard/assets/index-BPkgV8Vt.js +0 -12
- taskito-0.12.2/py_src/taskito/static/dashboard/assets/index-Opj4cbuY.css +0 -2
- taskito-0.12.2/py_src/taskito/static/dashboard/assets/layout-ZNMjweY9.js +0 -48
- taskito-0.12.2/py_src/taskito/webhooks.py +0 -135
- {taskito-0.12.2 → taskito-0.13.0}/Cargo.toml +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/LICENSE +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/error.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/lib.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/periodic.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/resilience/circuit_breaker.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/resilience/dlq.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/resilience/mod.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/resilience/rate_limiter.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/resilience/retry.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/scheduler/poller.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/scheduler/result_handler.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/diesel_common/locks.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/diesel_common/logs.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/diesel_common/metrics.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/diesel_common/mod.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/circuit_breakers.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/dashboard_settings.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/jobs.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/locks.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/logs.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/metrics.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/mod.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/periodic.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/queue_state.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/rate_limits.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/trait_impl.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/postgres/workers.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/archival.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/circuit_breakers.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/dashboard_settings.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/jobs/dequeue.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/jobs/enqueue.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/jobs/errors.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/jobs/helpers.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/jobs/maintenance.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/jobs/mod.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/jobs/query.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/jobs/state.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/locks.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/logs.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/metrics.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/periodic.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/queue_state.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/rate_limits.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/trait_impl.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/workers.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/circuit_breakers.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/dashboard_settings.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/jobs.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/locks.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/logs.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/metrics.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/mod.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/periodic.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/queue_state.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/rate_limits.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/trait_impl.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/sqlite/workers.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/traits.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/worker.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/tests/rust.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/async_worker.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/lib.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/prefork/child.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/prefork/dispatch.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/prefork/mod.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/prefork/protocol.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/prefork/slot.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/prefork/watchdog.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_config.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_queue/worker.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_queue/workflow_ops/gates.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_queue/workflow_ops/nodes.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_queue/workflow_ops/queries.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_worker.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-python/src/py_workflow/mod.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/src/common.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/src/definition.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/src/error.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/src/run.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/crates/taskito-workflows/src/topology.rs +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/_active_context.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/async_support/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/async_support/canvas.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/async_support/context.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/async_support/executor.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/async_support/helpers.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/async_support/locks.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/async_support/result.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/canvas.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/cli.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/django/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/django/admin.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/django/apps.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/django/management/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/django/management/commands/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/django/management/commands/taskito_dashboard.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/django/management/commands/taskito_info.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/django/management/commands/taskito_worker.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/django/settings.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/fastapi.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/flask.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/otel.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/prometheus.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/contrib/sentry.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/errors.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/handlers/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/handlers/_qs.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/handlers/dead_letters.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/handlers/jobs.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/handlers/metrics.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/handlers/queues.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/handlers/scaler.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/handlers/settings.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/dashboard/static.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/health.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/inject.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/built_in.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/converters.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/errors.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/interceptor.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/metrics.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/reconstruct.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/registry.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/strategy.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/interception/walker.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/locks.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/_shared.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/inspection.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/locks.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/predicates.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/resources.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/runtime_config.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/mixins/settings.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/context.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/core.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/evaluate.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/metrics.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/outcomes.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/parser.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/providers.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/recipes/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/recipes/attributes.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/recipes/config.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/recipes/system.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/recipes/time.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/predicates/registry.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/prefork/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/prefork/__main__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/built_in.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/handler.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/handlers/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/handlers/boto3_client.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/handlers/file.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/handlers/gcs_client.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/handlers/httpx_client.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/handlers/logger.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/metrics.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/no_proxy.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/reconstruct.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/registry.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/schema.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/proxies/signing.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/py.typed +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/resources/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/resources/definition.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/resources/frozen.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/resources/graph.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/resources/health.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/resources/pool.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/resources/runtime.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/resources/thread_local.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/resources/toml_config.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/scaler.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/testing.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/context.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/fan_out.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/incremental.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/run.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/tracker/__init__.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/tracker/dag.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/tracker/fan_out.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/tracker/gates.py +0 -0
- {taskito-0.12.2 → taskito-0.13.0}/py_src/taskito/workflows/visualization.py +0 -0
|
@@ -67,9 +67,9 @@ dependencies = [
|
|
|
67
67
|
|
|
68
68
|
[[package]]
|
|
69
69
|
name = "autocfg"
|
|
70
|
-
version = "1.5.
|
|
70
|
+
version = "1.5.1"
|
|
71
71
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
72
|
-
checksum = "
|
|
72
|
+
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
|
|
73
73
|
|
|
74
74
|
[[package]]
|
|
75
75
|
name = "base64"
|
|
@@ -94,9 +94,9 @@ checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
|
|
|
94
94
|
|
|
95
95
|
[[package]]
|
|
96
96
|
name = "bumpalo"
|
|
97
|
-
version = "3.20.
|
|
97
|
+
version = "3.20.3"
|
|
98
98
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
99
|
-
checksum = "
|
|
99
|
+
checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
|
|
100
100
|
|
|
101
101
|
[[package]]
|
|
102
102
|
name = "byteorder"
|
|
@@ -344,9 +344,9 @@ dependencies = [
|
|
|
344
344
|
|
|
345
345
|
[[package]]
|
|
346
346
|
name = "either"
|
|
347
|
-
version = "1.
|
|
347
|
+
version = "1.16.0"
|
|
348
348
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
349
|
-
checksum = "
|
|
349
|
+
checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
|
|
350
350
|
|
|
351
351
|
[[package]]
|
|
352
352
|
name = "equivalent"
|
|
@@ -676,9 +676,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
|
|
676
676
|
|
|
677
677
|
[[package]]
|
|
678
678
|
name = "js-sys"
|
|
679
|
-
version = "0.3.
|
|
679
|
+
version = "0.3.99"
|
|
680
680
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
681
|
-
checksum = "
|
|
681
|
+
checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
|
|
682
682
|
dependencies = [
|
|
683
683
|
"cfg-if",
|
|
684
684
|
"futures-util",
|
|
@@ -783,9 +783,9 @@ dependencies = [
|
|
|
783
783
|
|
|
784
784
|
[[package]]
|
|
785
785
|
name = "num-conv"
|
|
786
|
-
version = "0.2.
|
|
786
|
+
version = "0.2.2"
|
|
787
787
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
788
|
-
checksum = "
|
|
788
|
+
checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
|
|
789
789
|
|
|
790
790
|
[[package]]
|
|
791
791
|
name = "num-integer"
|
|
@@ -822,9 +822,9 @@ dependencies = [
|
|
|
822
822
|
|
|
823
823
|
[[package]]
|
|
824
824
|
name = "openssl-sys"
|
|
825
|
-
version = "0.9.
|
|
825
|
+
version = "0.9.116"
|
|
826
826
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
827
|
-
checksum = "
|
|
827
|
+
checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4"
|
|
828
828
|
dependencies = [
|
|
829
829
|
"cc",
|
|
830
830
|
"libc",
|
|
@@ -1203,9 +1203,9 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
|
|
|
1203
1203
|
|
|
1204
1204
|
[[package]]
|
|
1205
1205
|
name = "rsqlite-vfs"
|
|
1206
|
-
version = "0.1.
|
|
1206
|
+
version = "0.1.1"
|
|
1207
1207
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1208
|
-
checksum = "
|
|
1208
|
+
checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c"
|
|
1209
1209
|
dependencies = [
|
|
1210
1210
|
"hashbrown 0.16.1",
|
|
1211
1211
|
"thiserror",
|
|
@@ -1289,9 +1289,9 @@ dependencies = [
|
|
|
1289
1289
|
|
|
1290
1290
|
[[package]]
|
|
1291
1291
|
name = "serde_json"
|
|
1292
|
-
version = "1.0.
|
|
1292
|
+
version = "1.0.150"
|
|
1293
1293
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1294
|
-
checksum = "
|
|
1294
|
+
checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
|
|
1295
1295
|
dependencies = [
|
|
1296
1296
|
"itoa",
|
|
1297
1297
|
"memchr",
|
|
@@ -1352,9 +1352,9 @@ dependencies = [
|
|
|
1352
1352
|
|
|
1353
1353
|
[[package]]
|
|
1354
1354
|
name = "sqlite-wasm-rs"
|
|
1355
|
-
version = "0.5.
|
|
1355
|
+
version = "0.5.4"
|
|
1356
1356
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1357
|
-
checksum = "
|
|
1357
|
+
checksum = "cdd578e94101503d97e2b286bbf8db2135035ca24b2ce4cbf3f9e2fb2bbf1eee"
|
|
1358
1358
|
dependencies = [
|
|
1359
1359
|
"cc",
|
|
1360
1360
|
"js-sys",
|
|
@@ -1404,7 +1404,7 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
|
|
|
1404
1404
|
|
|
1405
1405
|
[[package]]
|
|
1406
1406
|
name = "taskito-async"
|
|
1407
|
-
version = "0.
|
|
1407
|
+
version = "0.13.0"
|
|
1408
1408
|
dependencies = [
|
|
1409
1409
|
"async-trait",
|
|
1410
1410
|
"crossbeam-channel",
|
|
@@ -1416,7 +1416,7 @@ dependencies = [
|
|
|
1416
1416
|
|
|
1417
1417
|
[[package]]
|
|
1418
1418
|
name = "taskito-core"
|
|
1419
|
-
version = "0.
|
|
1419
|
+
version = "0.13.0"
|
|
1420
1420
|
dependencies = [
|
|
1421
1421
|
"async-trait",
|
|
1422
1422
|
"chrono",
|
|
@@ -1440,7 +1440,7 @@ dependencies = [
|
|
|
1440
1440
|
|
|
1441
1441
|
[[package]]
|
|
1442
1442
|
name = "taskito-python"
|
|
1443
|
-
version = "0.
|
|
1443
|
+
version = "0.13.0"
|
|
1444
1444
|
dependencies = [
|
|
1445
1445
|
"async-trait",
|
|
1446
1446
|
"base64",
|
|
@@ -1460,11 +1460,12 @@ dependencies = [
|
|
|
1460
1460
|
|
|
1461
1461
|
[[package]]
|
|
1462
1462
|
name = "taskito-workflows"
|
|
1463
|
-
version = "0.
|
|
1463
|
+
version = "0.13.0"
|
|
1464
1464
|
dependencies = [
|
|
1465
1465
|
"dagron-core",
|
|
1466
1466
|
"diesel",
|
|
1467
1467
|
"log",
|
|
1468
|
+
"redis",
|
|
1468
1469
|
"serde",
|
|
1469
1470
|
"serde_json",
|
|
1470
1471
|
"taskito-core",
|
|
@@ -1658,9 +1659,9 @@ dependencies = [
|
|
|
1658
1659
|
|
|
1659
1660
|
[[package]]
|
|
1660
1661
|
name = "wasm-bindgen"
|
|
1661
|
-
version = "0.2.
|
|
1662
|
+
version = "0.2.122"
|
|
1662
1663
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1663
|
-
checksum = "
|
|
1664
|
+
checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
|
|
1664
1665
|
dependencies = [
|
|
1665
1666
|
"cfg-if",
|
|
1666
1667
|
"once_cell",
|
|
@@ -1671,9 +1672,9 @@ dependencies = [
|
|
|
1671
1672
|
|
|
1672
1673
|
[[package]]
|
|
1673
1674
|
name = "wasm-bindgen-macro"
|
|
1674
|
-
version = "0.2.
|
|
1675
|
+
version = "0.2.122"
|
|
1675
1676
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1676
|
-
checksum = "
|
|
1677
|
+
checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
|
|
1677
1678
|
dependencies = [
|
|
1678
1679
|
"quote",
|
|
1679
1680
|
"wasm-bindgen-macro-support",
|
|
@@ -1681,9 +1682,9 @@ dependencies = [
|
|
|
1681
1682
|
|
|
1682
1683
|
[[package]]
|
|
1683
1684
|
name = "wasm-bindgen-macro-support"
|
|
1684
|
-
version = "0.2.
|
|
1685
|
+
version = "0.2.122"
|
|
1685
1686
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1686
|
-
checksum = "
|
|
1687
|
+
checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
|
|
1687
1688
|
dependencies = [
|
|
1688
1689
|
"bumpalo",
|
|
1689
1690
|
"proc-macro2",
|
|
@@ -1694,9 +1695,9 @@ dependencies = [
|
|
|
1694
1695
|
|
|
1695
1696
|
[[package]]
|
|
1696
1697
|
name = "wasm-bindgen-shared"
|
|
1697
|
-
version = "0.2.
|
|
1698
|
+
version = "0.2.122"
|
|
1698
1699
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1699
|
-
checksum = "
|
|
1700
|
+
checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
|
|
1700
1701
|
dependencies = [
|
|
1701
1702
|
"unicode-ident",
|
|
1702
1703
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taskito
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.0
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -21,12 +21,15 @@ Requires-Dist: pytest-cov>=5.0 ; extra == 'dev'
|
|
|
21
21
|
Requires-Dist: ruff>=0.11 ; extra == 'dev'
|
|
22
22
|
Requires-Dist: mypy>=1.15 ; extra == 'dev'
|
|
23
23
|
Requires-Dist: django>=4.2 ; extra == 'django'
|
|
24
|
+
Requires-Dist: playwright>=1.59 ; extra == 'docs'
|
|
24
25
|
Requires-Dist: cryptography ; extra == 'encryption'
|
|
25
26
|
Requires-Dist: fastapi>=0.110.0 ; extra == 'fastapi'
|
|
26
27
|
Requires-Dist: pydantic>=2.5 ; extra == 'fastapi'
|
|
27
28
|
Requires-Dist: flask>=3.0 ; extra == 'flask'
|
|
28
29
|
Requires-Dist: google-cloud-storage>=2.10 ; extra == 'gcs'
|
|
29
30
|
Requires-Dist: msgpack ; extra == 'msgpack'
|
|
31
|
+
Requires-Dist: authlib>=1.7,<2 ; extra == 'oauth'
|
|
32
|
+
Requires-Dist: requests>=2.31 ; extra == 'oauth'
|
|
30
33
|
Requires-Dist: opentelemetry-api ; extra == 'otel'
|
|
31
34
|
Requires-Dist: opentelemetry-sdk ; extra == 'otel'
|
|
32
35
|
Requires-Dist: prometheus-client ; extra == 'prometheus'
|
|
@@ -34,11 +37,13 @@ Requires-Dist: sentry-sdk ; extra == 'sentry'
|
|
|
34
37
|
Provides-Extra: aws
|
|
35
38
|
Provides-Extra: dev
|
|
36
39
|
Provides-Extra: django
|
|
40
|
+
Provides-Extra: docs
|
|
37
41
|
Provides-Extra: encryption
|
|
38
42
|
Provides-Extra: fastapi
|
|
39
43
|
Provides-Extra: flask
|
|
40
44
|
Provides-Extra: gcs
|
|
41
45
|
Provides-Extra: msgpack
|
|
46
|
+
Provides-Extra: oauth
|
|
42
47
|
Provides-Extra: otel
|
|
43
48
|
Provides-Extra: postgres
|
|
44
49
|
Provides-Extra: prometheus
|
|
@@ -134,7 +139,7 @@ The heavy lifting runs in Rust: a Tokio async scheduler, OS thread worker pool w
|
|
|
134
139
|
- **Job archival** — `queue.archive(older_than=86400)`, `queue.list_archived()`
|
|
135
140
|
- **Queue pause/resume** — `queue.pause()`, `queue.resume()`, `queue.paused_queues()`
|
|
136
141
|
- **Circuit breakers** — `circuit_breaker={"threshold": 5, "window": 60, "cooldown": 300}`
|
|
137
|
-
- **Structured logging** — `current_job.log("msg", level=
|
|
142
|
+
- **Structured logging** — `current_job.log("msg", level=LogLevel.INFO, extra={...})`
|
|
138
143
|
- **CLI** — `taskito worker`, `taskito info --watch`, `taskito dashboard`
|
|
139
144
|
|
|
140
145
|
## Integrations
|
|
@@ -78,7 +78,7 @@ The heavy lifting runs in Rust: a Tokio async scheduler, OS thread worker pool w
|
|
|
78
78
|
- **Job archival** — `queue.archive(older_than=86400)`, `queue.list_archived()`
|
|
79
79
|
- **Queue pause/resume** — `queue.pause()`, `queue.resume()`, `queue.paused_queues()`
|
|
80
80
|
- **Circuit breakers** — `circuit_breaker={"threshold": 5, "window": 60, "cooldown": 300}`
|
|
81
|
-
- **Structured logging** — `current_job.log("msg", level=
|
|
81
|
+
- **Structured logging** — `current_job.log("msg", level=LogLevel.INFO, extra={...})`
|
|
82
82
|
- **CLI** — `taskito worker`, `taskito info --watch`, `taskito dashboard`
|
|
83
83
|
|
|
84
84
|
## Integrations
|
|
@@ -79,6 +79,12 @@ pub struct Job {
|
|
|
79
79
|
pub unique_key: Option<String>,
|
|
80
80
|
pub progress: Option<i32>,
|
|
81
81
|
pub metadata: Option<String>,
|
|
82
|
+
/// Structured, user-readable annotations attached to the job (canonical
|
|
83
|
+
/// JSON object, ≤ 15 top-level fields). Validated at the Python
|
|
84
|
+
/// boundary by `taskito.notes.validate_and_encode_notes`; stored as the
|
|
85
|
+
/// already-encoded JSON string here.
|
|
86
|
+
#[serde(default)]
|
|
87
|
+
pub notes: Option<String>,
|
|
82
88
|
pub cancel_requested: bool,
|
|
83
89
|
pub expires_at: Option<i64>,
|
|
84
90
|
pub result_ttl_ms: Option<i64>,
|
|
@@ -106,6 +112,7 @@ impl From<JobRow> for Job {
|
|
|
106
112
|
unique_key: row.unique_key,
|
|
107
113
|
progress: row.progress,
|
|
108
114
|
metadata: row.metadata,
|
|
115
|
+
notes: row.notes,
|
|
109
116
|
cancel_requested: row.cancel_requested != 0,
|
|
110
117
|
expires_at: row.expires_at,
|
|
111
118
|
result_ttl_ms: row.result_ttl_ms,
|
|
@@ -125,6 +132,8 @@ pub struct NewJob {
|
|
|
125
132
|
pub timeout_ms: i64,
|
|
126
133
|
pub unique_key: Option<String>,
|
|
127
134
|
pub metadata: Option<String>,
|
|
135
|
+
/// Pre-encoded canonical JSON object (≤ 15 fields). See [`Job::notes`].
|
|
136
|
+
pub notes: Option<String>,
|
|
128
137
|
pub depends_on: Vec<String>,
|
|
129
138
|
pub expires_at: Option<i64>,
|
|
130
139
|
pub result_ttl_ms: Option<i64>,
|
|
@@ -153,6 +162,7 @@ impl NewJob {
|
|
|
153
162
|
unique_key: self.unique_key,
|
|
154
163
|
progress: None,
|
|
155
164
|
metadata: self.metadata,
|
|
165
|
+
notes: self.notes,
|
|
156
166
|
cancel_requested: false,
|
|
157
167
|
expires_at: self.expires_at,
|
|
158
168
|
result_ttl_ms: self.result_ttl_ms,
|
|
@@ -103,6 +103,7 @@ macro_rules! impl_diesel_job_ops {
|
|
|
103
103
|
timeout_ms: job.timeout_ms,
|
|
104
104
|
unique_key: job.unique_key.as_deref(),
|
|
105
105
|
metadata: job.metadata.as_deref(),
|
|
106
|
+
notes: job.notes.as_deref(),
|
|
106
107
|
cancel_requested: 0,
|
|
107
108
|
expires_at: job.expires_at,
|
|
108
109
|
result_ttl_ms: job.result_ttl_ms,
|
|
@@ -160,6 +161,7 @@ macro_rules! impl_diesel_job_ops {
|
|
|
160
161
|
timeout_ms: job.timeout_ms,
|
|
161
162
|
unique_key: job.unique_key.as_deref(),
|
|
162
163
|
metadata: job.metadata.as_deref(),
|
|
164
|
+
notes: job.notes.as_deref(),
|
|
163
165
|
cancel_requested: 0,
|
|
164
166
|
expires_at: job.expires_at,
|
|
165
167
|
result_ttl_ms: job.result_ttl_ms,
|
|
@@ -214,6 +216,7 @@ macro_rules! impl_diesel_job_ops {
|
|
|
214
216
|
timeout_ms: job.timeout_ms,
|
|
215
217
|
unique_key: job.unique_key.as_deref(),
|
|
216
218
|
metadata: job.metadata.as_deref(),
|
|
219
|
+
notes: job.notes.as_deref(),
|
|
217
220
|
cancel_requested: 0,
|
|
218
221
|
expires_at: job.expires_at,
|
|
219
222
|
result_ttl_ms: job.result_ttl_ms,
|
{taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/diesel_common/migrations.rs
RENAMED
|
@@ -88,6 +88,7 @@ pub fn create_tables(d: &Dialect) -> Vec<String> {
|
|
|
88
88
|
unique_key TEXT,
|
|
89
89
|
progress INTEGER,
|
|
90
90
|
metadata TEXT,
|
|
91
|
+
notes TEXT,
|
|
91
92
|
cancel_requested INTEGER NOT NULL DEFAULT 0,
|
|
92
93
|
expires_at {bi},
|
|
93
94
|
result_ttl_ms {bi}
|
|
@@ -104,6 +105,7 @@ pub fn create_tables(d: &Dialect) -> Vec<String> {
|
|
|
104
105
|
retry_count INTEGER NOT NULL,
|
|
105
106
|
failed_at {bi} NOT NULL,
|
|
106
107
|
metadata TEXT,
|
|
108
|
+
notes TEXT,
|
|
107
109
|
priority INTEGER NOT NULL DEFAULT 0,
|
|
108
110
|
max_retries INTEGER NOT NULL DEFAULT 3,
|
|
109
111
|
timeout_ms {bi} NOT NULL DEFAULT 300000,
|
|
@@ -234,6 +236,7 @@ pub fn create_tables(d: &Dialect) -> Vec<String> {
|
|
|
234
236
|
unique_key TEXT,
|
|
235
237
|
progress INTEGER,
|
|
236
238
|
metadata TEXT,
|
|
239
|
+
notes TEXT,
|
|
237
240
|
cancel_requested INTEGER NOT NULL DEFAULT 0,
|
|
238
241
|
expires_at {bi},
|
|
239
242
|
result_ttl_ms {bi}
|
|
@@ -338,5 +341,9 @@ pub fn alter_statements(d: &Dialect) -> Vec<String> {
|
|
|
338
341
|
// namespace backfill on dead_letter / archived_jobs (after circuit-breaker columns)
|
|
339
342
|
format!("ALTER TABLE dead_letter ADD COLUMN {ife}namespace TEXT"),
|
|
340
343
|
format!("ALTER TABLE archived_jobs ADD COLUMN {ife}namespace TEXT"),
|
|
344
|
+
// structured notes (≤15 fields, validated at the Python boundary)
|
|
345
|
+
format!("ALTER TABLE jobs ADD COLUMN {ife}notes TEXT"),
|
|
346
|
+
format!("ALTER TABLE dead_letter ADD COLUMN {ife}notes TEXT"),
|
|
347
|
+
format!("ALTER TABLE archived_jobs ADD COLUMN {ife}notes TEXT"),
|
|
341
348
|
]
|
|
342
349
|
}
|
|
@@ -44,6 +44,7 @@ pub struct DeadJob {
|
|
|
44
44
|
pub retry_count: i32,
|
|
45
45
|
pub failed_at: i64,
|
|
46
46
|
pub metadata: Option<String>,
|
|
47
|
+
pub notes: Option<String>,
|
|
47
48
|
pub priority: i32,
|
|
48
49
|
pub max_retries: i32,
|
|
49
50
|
pub timeout_ms: i64,
|
|
@@ -63,6 +64,7 @@ impl From<models::DeadLetterRow> for DeadJob {
|
|
|
63
64
|
retry_count: row.retry_count,
|
|
64
65
|
failed_at: row.failed_at,
|
|
65
66
|
metadata: row.metadata,
|
|
67
|
+
notes: row.notes,
|
|
66
68
|
priority: row.priority,
|
|
67
69
|
max_retries: row.max_retries,
|
|
68
70
|
timeout_ms: row.timeout_ms,
|
|
@@ -29,6 +29,7 @@ pub struct JobRow {
|
|
|
29
29
|
pub unique_key: Option<String>,
|
|
30
30
|
pub progress: Option<i32>,
|
|
31
31
|
pub metadata: Option<String>,
|
|
32
|
+
pub notes: Option<String>,
|
|
32
33
|
pub cancel_requested: i32,
|
|
33
34
|
pub expires_at: Option<i64>,
|
|
34
35
|
pub result_ttl_ms: Option<i64>,
|
|
@@ -52,6 +53,7 @@ pub struct NewJobRow<'a> {
|
|
|
52
53
|
pub timeout_ms: i64,
|
|
53
54
|
pub unique_key: Option<&'a str>,
|
|
54
55
|
pub metadata: Option<&'a str>,
|
|
56
|
+
pub notes: Option<&'a str>,
|
|
55
57
|
pub cancel_requested: i32,
|
|
56
58
|
pub expires_at: Option<i64>,
|
|
57
59
|
pub result_ttl_ms: Option<i64>,
|
|
@@ -71,6 +73,7 @@ pub struct DeadLetterRow {
|
|
|
71
73
|
pub retry_count: i32,
|
|
72
74
|
pub failed_at: i64,
|
|
73
75
|
pub metadata: Option<String>,
|
|
76
|
+
pub notes: Option<String>,
|
|
74
77
|
pub priority: i32,
|
|
75
78
|
pub max_retries: i32,
|
|
76
79
|
pub timeout_ms: i64,
|
|
@@ -91,6 +94,7 @@ pub struct NewDeadLetterRow<'a> {
|
|
|
91
94
|
pub retry_count: i32,
|
|
92
95
|
pub failed_at: i64,
|
|
93
96
|
pub metadata: Option<&'a str>,
|
|
97
|
+
pub notes: Option<&'a str>,
|
|
94
98
|
pub priority: i32,
|
|
95
99
|
pub max_retries: i32,
|
|
96
100
|
pub timeout_ms: i64,
|
|
@@ -411,6 +415,7 @@ pub struct ArchivedJobRow {
|
|
|
411
415
|
pub unique_key: Option<String>,
|
|
412
416
|
pub progress: Option<i32>,
|
|
413
417
|
pub metadata: Option<String>,
|
|
418
|
+
pub notes: Option<String>,
|
|
414
419
|
pub cancel_requested: i32,
|
|
415
420
|
pub expires_at: Option<i64>,
|
|
416
421
|
pub result_ttl_ms: Option<i64>,
|
|
@@ -26,6 +26,7 @@ impl PostgresStorage {
|
|
|
26
26
|
retry_count: job.retry_count,
|
|
27
27
|
failed_at: now,
|
|
28
28
|
metadata,
|
|
29
|
+
notes: job.notes.as_deref(),
|
|
29
30
|
priority: job.priority,
|
|
30
31
|
max_retries: job.max_retries,
|
|
31
32
|
timeout_ms: job.timeout_ms,
|
|
@@ -92,6 +93,7 @@ impl PostgresStorage {
|
|
|
92
93
|
timeout_ms: dead_row.timeout_ms,
|
|
93
94
|
unique_key: None,
|
|
94
95
|
metadata: dead_row.metadata,
|
|
96
|
+
notes: dead_row.notes,
|
|
95
97
|
depends_on: vec![],
|
|
96
98
|
expires_at: None,
|
|
97
99
|
result_ttl_ms: dead_row.result_ttl_ms,
|
|
@@ -115,6 +117,7 @@ impl PostgresStorage {
|
|
|
115
117
|
timeout_ms: job.timeout_ms,
|
|
116
118
|
unique_key: job.unique_key.as_deref(),
|
|
117
119
|
metadata: job.metadata.as_deref(),
|
|
120
|
+
notes: job.notes.as_deref(),
|
|
118
121
|
cancel_requested: 0,
|
|
119
122
|
expires_at: job.expires_at,
|
|
120
123
|
result_ttl_ms: job.result_ttl_ms,
|
{taskito-0.12.2 → taskito-0.13.0}/crates/taskito-core/src/storage/redis_backend/dead_letter.rs
RENAMED
|
@@ -17,6 +17,8 @@ struct DeadJobEntry {
|
|
|
17
17
|
pub retry_count: i32,
|
|
18
18
|
pub failed_at: i64,
|
|
19
19
|
pub metadata: Option<String>,
|
|
20
|
+
#[serde(default)]
|
|
21
|
+
pub notes: Option<String>,
|
|
20
22
|
pub priority: i32,
|
|
21
23
|
pub max_retries: i32,
|
|
22
24
|
pub timeout_ms: i64,
|
|
@@ -37,6 +39,7 @@ impl From<DeadJobEntry> for DeadJob {
|
|
|
37
39
|
retry_count: e.retry_count,
|
|
38
40
|
failed_at: e.failed_at,
|
|
39
41
|
metadata: e.metadata,
|
|
42
|
+
notes: e.notes,
|
|
40
43
|
priority: e.priority,
|
|
41
44
|
max_retries: e.max_retries,
|
|
42
45
|
timeout_ms: e.timeout_ms,
|
|
@@ -62,6 +65,7 @@ impl RedisStorage {
|
|
|
62
65
|
retry_count: job.retry_count,
|
|
63
66
|
failed_at: now,
|
|
64
67
|
metadata: metadata.map(|s| s.to_string()),
|
|
68
|
+
notes: job.notes.clone(),
|
|
65
69
|
priority: job.priority,
|
|
66
70
|
max_retries: job.max_retries,
|
|
67
71
|
timeout_ms: job.timeout_ms,
|
|
@@ -146,6 +150,7 @@ impl RedisStorage {
|
|
|
146
150
|
timeout_ms: entry.timeout_ms,
|
|
147
151
|
unique_key: None,
|
|
148
152
|
metadata: entry.metadata,
|
|
153
|
+
notes: entry.notes,
|
|
149
154
|
depends_on: vec![],
|
|
150
155
|
expires_at: None,
|
|
151
156
|
result_ttl_ms: entry.result_ttl_ms,
|
|
@@ -64,6 +64,14 @@ impl RedisStorage {
|
|
|
64
64
|
.get_connection()
|
|
65
65
|
.map_err(|e| QueueError::Other(format!("Redis connection error: {e}")))
|
|
66
66
|
}
|
|
67
|
+
|
|
68
|
+
/// The key prefix used for every Redis key this storage writes.
|
|
69
|
+
///
|
|
70
|
+
/// Exposed so adjacent stores (e.g. the workflow store) can namespace
|
|
71
|
+
/// their own keys under the same prefix without re-parsing the URL.
|
|
72
|
+
pub fn prefix(&self) -> &str {
|
|
73
|
+
&self.prefix
|
|
74
|
+
}
|
|
67
75
|
}
|
|
68
76
|
|
|
69
77
|
fn map_err(e: redis::RedisError) -> QueueError {
|
|
@@ -18,6 +18,7 @@ diesel::table! {
|
|
|
18
18
|
unique_key -> Nullable<Text>,
|
|
19
19
|
progress -> Nullable<Integer>,
|
|
20
20
|
metadata -> Nullable<Text>,
|
|
21
|
+
notes -> Nullable<Text>,
|
|
21
22
|
cancel_requested -> Integer,
|
|
22
23
|
expires_at -> Nullable<BigInt>,
|
|
23
24
|
result_ttl_ms -> Nullable<BigInt>,
|
|
@@ -36,6 +37,7 @@ diesel::table! {
|
|
|
36
37
|
retry_count -> Integer,
|
|
37
38
|
failed_at -> BigInt,
|
|
38
39
|
metadata -> Nullable<Text>,
|
|
40
|
+
notes -> Nullable<Text>,
|
|
39
41
|
priority -> Integer,
|
|
40
42
|
max_retries -> Integer,
|
|
41
43
|
timeout_ms -> BigInt,
|
|
@@ -188,6 +190,7 @@ diesel::table! {
|
|
|
188
190
|
unique_key -> Nullable<Text>,
|
|
189
191
|
progress -> Nullable<Integer>,
|
|
190
192
|
metadata -> Nullable<Text>,
|
|
193
|
+
notes -> Nullable<Text>,
|
|
191
194
|
cancel_requested -> Integer,
|
|
192
195
|
expires_at -> Nullable<BigInt>,
|
|
193
196
|
result_ttl_ms -> Nullable<BigInt>,
|
|
@@ -26,6 +26,7 @@ impl SqliteStorage {
|
|
|
26
26
|
retry_count: job.retry_count,
|
|
27
27
|
failed_at: now,
|
|
28
28
|
metadata,
|
|
29
|
+
notes: job.notes.as_deref(),
|
|
29
30
|
priority: job.priority,
|
|
30
31
|
max_retries: job.max_retries,
|
|
31
32
|
timeout_ms: job.timeout_ms,
|
|
@@ -96,6 +97,7 @@ impl SqliteStorage {
|
|
|
96
97
|
timeout_ms: dead_row.timeout_ms,
|
|
97
98
|
unique_key: None,
|
|
98
99
|
metadata: dead_row.metadata,
|
|
100
|
+
notes: dead_row.notes,
|
|
99
101
|
depends_on: vec![],
|
|
100
102
|
expires_at: None,
|
|
101
103
|
result_ttl_ms: dead_row.result_ttl_ms,
|
|
@@ -119,6 +121,7 @@ impl SqliteStorage {
|
|
|
119
121
|
timeout_ms: job.timeout_ms,
|
|
120
122
|
unique_key: job.unique_key.as_deref(),
|
|
121
123
|
metadata: job.metadata.as_deref(),
|
|
124
|
+
notes: job.notes.as_deref(),
|
|
122
125
|
cancel_requested: 0,
|
|
123
126
|
expires_at: job.expires_at,
|
|
124
127
|
result_ttl_ms: job.result_ttl_ms,
|
|
@@ -16,6 +16,7 @@ fn make_job(task_name: &str) -> NewJob {
|
|
|
16
16
|
timeout_ms: 300_000,
|
|
17
17
|
unique_key: None,
|
|
18
18
|
metadata: None,
|
|
19
|
+
notes: None,
|
|
19
20
|
depends_on: vec![],
|
|
20
21
|
expires_at: None,
|
|
21
22
|
result_ttl_ms: None,
|
|
@@ -33,6 +34,51 @@ fn test_enqueue_and_get() {
|
|
|
33
34
|
assert_eq!(fetched.status, JobStatus::Pending);
|
|
34
35
|
}
|
|
35
36
|
|
|
37
|
+
#[test]
|
|
38
|
+
fn test_notes_round_trip() {
|
|
39
|
+
let storage = test_storage();
|
|
40
|
+
let mut new_job = make_job("notes_task");
|
|
41
|
+
new_job.notes = Some(r#"{"customer_id":"cus_abc","tier":"gold"}"#.to_string());
|
|
42
|
+
|
|
43
|
+
let job = storage.enqueue(new_job).unwrap();
|
|
44
|
+
let fetched = storage.get_job(&job.id).unwrap().unwrap();
|
|
45
|
+
assert_eq!(
|
|
46
|
+
fetched.notes.as_deref(),
|
|
47
|
+
Some(r#"{"customer_id":"cus_abc","tier":"gold"}"#)
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
// Absence round-trips as None.
|
|
51
|
+
let plain = storage.enqueue(make_job("plain_task")).unwrap();
|
|
52
|
+
let plain_fetched = storage.get_job(&plain.id).unwrap().unwrap();
|
|
53
|
+
assert!(plain_fetched.notes.is_none());
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
#[test]
|
|
57
|
+
fn test_notes_survive_dlq_round_trip() {
|
|
58
|
+
let storage = test_storage();
|
|
59
|
+
let mut new_job = make_job("dlq_notes_task");
|
|
60
|
+
new_job.notes = Some(r#"{"customer_id":"cus_xyz"}"#.to_string());
|
|
61
|
+
let job = storage.enqueue(new_job).unwrap();
|
|
62
|
+
|
|
63
|
+
storage
|
|
64
|
+
.move_to_dlq(&job, "boom", None)
|
|
65
|
+
.expect("move_to_dlq");
|
|
66
|
+
|
|
67
|
+
let dead = storage.list_dead(10, 0).unwrap();
|
|
68
|
+
let entry = dead
|
|
69
|
+
.iter()
|
|
70
|
+
.find(|d| d.original_job_id == job.id)
|
|
71
|
+
.expect("dead entry");
|
|
72
|
+
assert_eq!(entry.notes.as_deref(), Some(r#"{"customer_id":"cus_xyz"}"#));
|
|
73
|
+
|
|
74
|
+
let new_id = storage.retry_dead(&entry.id).expect("retry_dead");
|
|
75
|
+
let retried = storage.get_job(&new_id).unwrap().unwrap();
|
|
76
|
+
assert_eq!(
|
|
77
|
+
retried.notes.as_deref(),
|
|
78
|
+
Some(r#"{"customer_id":"cus_xyz"}"#)
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
36
82
|
#[test]
|
|
37
83
|
fn test_dequeue() {
|
|
38
84
|
let storage = test_storage();
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "taskito-python"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.13.0"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
|
|
6
6
|
[features]
|
|
7
7
|
default = []
|
|
8
8
|
extension-module = ["pyo3/extension-module"]
|
|
9
|
-
postgres = ["taskito-core/postgres"]
|
|
10
|
-
redis = ["taskito-core/redis"]
|
|
9
|
+
postgres = ["taskito-core/postgres", "taskito-workflows?/postgres"]
|
|
10
|
+
redis = ["taskito-core/redis", "taskito-workflows?/redis"]
|
|
11
11
|
native-async = ["dep:taskito-async"]
|
|
12
12
|
workflows = ["dep:taskito-workflows"]
|
|
13
13
|
|