pyworkflow-engine 0.2.8__tar.gz → 0.2.9__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.
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/PKG-INFO +1 -1
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyproject.toml +1 -1
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/__init__.py +1 -1
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/citus.py +18 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/migrations/base.py +43 -1
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/postgres.py +12 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/CLAUDE.md +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/DISTRIBUTED.md +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/LICENSE +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/MANIFEST.in +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/README.md +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/RELEASING.md +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/architecture.md +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/cancellation.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/continue-as-new.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/events.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/fault-tolerance.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/hooks.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/limitations.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/schedules.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/sleep.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/step-context.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/steps.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/stream-steps.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/stream-workflows.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/concepts/workflows.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/conventions.md +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/guides/brokers.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/guides/cli.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/guides/configuration.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/harness-gaps.md +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/introduction.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/layers.md +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/docs/quickstart.mdx +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/docker-compose.yml +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/pyworkflow.config.yaml +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/basic.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/batch_processing.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/cancellation.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/child_workflow_from_step.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/child_workflow_patterns.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/child_workflows.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/continue_as_new.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/fault_tolerance.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/hooks.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/idempotency.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/long_running.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/retries.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/schedules.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/sleep_in_step.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/step_context.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/transient/01_basic_workflow.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/transient/02_fault_tolerance.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/transient/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/transient/pyworkflow.config.yaml +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/01_basic_workflow.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/02_file_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/03_retries.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/04_long_running.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/05_event_log.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/06_idempotency.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/07_hooks.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/08_cancellation.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/09_child_workflows.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/10_child_workflow_patterns.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/11_continue_as_new.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/12_schedules.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/13_step_context.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/14_child_workflow_from_step.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/transient/01_quick_tasks.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/transient/02_retries.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/transient/03_sleep.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/transient/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/aws/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/aws/context.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/aws/handler.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/aws/testing.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/celery/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/celery/app.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/celery/loop.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/celery/scheduler.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/celery/singleton.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/celery/tasks.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/__main__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/commands/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/commands/hooks.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/commands/quickstart.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/commands/runs.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/commands/scheduler.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/commands/schedules.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/commands/setup.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/commands/worker.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/commands/workflows.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/output/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/output/formatters.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/output/styles.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/utils/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/utils/async_helpers.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/utils/config.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/utils/config_generator.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/utils/discovery.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/utils/docker_manager.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/utils/interactive.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/utils/storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/config.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/context/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/context/aws.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/context/base.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/context/local.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/context/mock.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/context/step_context.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/core/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/core/exceptions.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/core/registry.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/core/scheduled.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/core/step.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/core/validation.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/core/workflow.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/discovery.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/engine/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/engine/events.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/engine/executor.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/engine/replay.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/observability/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/observability/logging.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/child_handle.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/child_workflow.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/continue_as_new.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/define_hook.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/hooks.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/resume_hook.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/schedule.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/shield.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/sleep.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/step_checkpoint.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/step_hook.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/runtime/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/runtime/base.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/runtime/celery.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/runtime/factory.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/runtime/local.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/scheduler/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/scheduler/local.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/serialization/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/serialization/decoder.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/serialization/encoder.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/base.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/cassandra.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/config.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/dynamodb.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/file.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/memory.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/migrations/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/mysql.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/schemas.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/storage/sqlite.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/checkpoint.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/consumer.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/context.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/decorator.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/dispatcher.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/emit.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/registry.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/runtime.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/signal.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/streams/step_context.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/utils/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/utils/duration.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/utils/helpers.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/utils/schedule.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow_engine.egg-info/SOURCES.txt +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/setup.cfg +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_cancellation.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_cassandra_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_child_workflows.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_continue_as_new.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_dynamodb_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_fault_tolerance.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_schedule_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_schema_migrations.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_singleton.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_stream_e2e.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/integration/test_workflow_suspended.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/backends/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/backends/test_cassandra_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/backends/test_citus_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/backends/test_dynamodb_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/backends/test_postgres_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/backends/test_sqlite_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/conftest.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/storage/__init__.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/storage/test_migrations.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_cancellation.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_child_workflows.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_cli_worker.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_continue_as_new.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_emit.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_event_limits.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_executor.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_fault_tolerance.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_force_local.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_hooks.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_parent_run_id.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_primitives_from_steps.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_registry.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_replay.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_retention.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_schedule_schemas.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_schedule_utils.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_scheduled_workflow.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_signal.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_singleton.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_step.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_step_checkpoint.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_step_context.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_step_hook.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_stream_storage.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_stream_workflow.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_validation.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_workflow.py +0 -0
- {pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/tests/unit/test_workflow_suspended.py +0 -0
|
@@ -7,7 +7,7 @@ packages = [{include = "pyworkflow"}]
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "pyworkflow-engine"
|
|
10
|
-
version = "0.2.
|
|
10
|
+
version = "0.2.9"
|
|
11
11
|
description = "A Python implementation of durable, event-sourced workflows inspired by Vercel Workflow"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
requires-python = ">=3.11"
|
|
@@ -21,6 +21,7 @@ See: https://docs.citusdata.com/en/stable/develop/api.html
|
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
23
|
import asyncpg
|
|
24
|
+
from loguru import logger
|
|
24
25
|
|
|
25
26
|
from pyworkflow.storage.migrations import Migration
|
|
26
27
|
from pyworkflow.storage.postgres import PostgresMigrationRunner, PostgresStorageBackend
|
|
@@ -39,6 +40,10 @@ class CitusMigrationRunner(PostgresMigrationRunner):
|
|
|
39
40
|
"""Apply a migration with Citus-specific handling."""
|
|
40
41
|
from datetime import UTC, datetime
|
|
41
42
|
|
|
43
|
+
logger.info(
|
|
44
|
+
f"CITUS_MIGRATION: opening transaction for v{migration.version}",
|
|
45
|
+
version=migration.version,
|
|
46
|
+
)
|
|
42
47
|
async with self._pool.acquire() as conn, conn.transaction():
|
|
43
48
|
if migration.version == 2:
|
|
44
49
|
# V2: Add step_id column to events table
|
|
@@ -122,14 +127,17 @@ class CitusMigrationRunner(PostgresMigrationRunner):
|
|
|
122
127
|
# DDL inside PL/pgSQL DO blocks is executed via SPI and bypasses the
|
|
123
128
|
# hook, which would leave worker shards missing the column while the
|
|
124
129
|
# coordinator catalog appears correct.
|
|
130
|
+
logger.info("CITUS_MIGRATION v5: ALTER stream_subscriptions ADD stream_run_id")
|
|
125
131
|
await conn.execute(
|
|
126
132
|
"ALTER TABLE stream_subscriptions "
|
|
127
133
|
"ADD COLUMN IF NOT EXISTS stream_run_id TEXT NULL"
|
|
128
134
|
)
|
|
135
|
+
logger.info("CITUS_MIGRATION v5: CREATE INDEX idx_subscriptions_stream_run")
|
|
129
136
|
await conn.execute(
|
|
130
137
|
"CREATE INDEX IF NOT EXISTS idx_subscriptions_stream_run "
|
|
131
138
|
"ON stream_subscriptions(stream_id, stream_run_id)"
|
|
132
139
|
)
|
|
140
|
+
logger.info("CITUS_MIGRATION v5: CREATE TABLE scheduled_signals")
|
|
133
141
|
await conn.execute("""
|
|
134
142
|
CREATE TABLE IF NOT EXISTS scheduled_signals (
|
|
135
143
|
id TEXT PRIMARY KEY,
|
|
@@ -143,6 +151,7 @@ class CitusMigrationRunner(PostgresMigrationRunner):
|
|
|
143
151
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
144
152
|
)
|
|
145
153
|
""")
|
|
154
|
+
logger.info("CITUS_MIGRATION v5: CREATE INDEX idx_scheduled_signals_due")
|
|
146
155
|
await conn.execute(
|
|
147
156
|
"CREATE INDEX IF NOT EXISTS idx_scheduled_signals_due "
|
|
148
157
|
"ON scheduled_signals(delivered, due_at)"
|
|
@@ -155,21 +164,30 @@ class CitusMigrationRunner(PostgresMigrationRunner):
|
|
|
155
164
|
WHERE c.relname = 'scheduled_signals'
|
|
156
165
|
)
|
|
157
166
|
""")
|
|
167
|
+
logger.info(
|
|
168
|
+
f"CITUS_MIGRATION v5: scheduled_signals already distributed = {already}"
|
|
169
|
+
)
|
|
158
170
|
if not already:
|
|
171
|
+
logger.info(
|
|
172
|
+
"CITUS_MIGRATION v5: calling create_reference_table('scheduled_signals')"
|
|
173
|
+
)
|
|
159
174
|
await conn.execute("SELECT create_reference_table('scheduled_signals')")
|
|
160
175
|
elif migration.version == 6:
|
|
161
176
|
# V6: Add parent_run_id + parent_hook_token to stream_subscriptions.
|
|
162
177
|
# Top-level ALTERs so Citus propagates to all worker shards (see V5 note).
|
|
178
|
+
logger.info("CITUS_MIGRATION v6: ALTER stream_subscriptions ADD parent_run_id")
|
|
163
179
|
await conn.execute(
|
|
164
180
|
"ALTER TABLE stream_subscriptions "
|
|
165
181
|
"ADD COLUMN IF NOT EXISTS parent_run_id TEXT NULL"
|
|
166
182
|
)
|
|
183
|
+
logger.info("CITUS_MIGRATION v6: ALTER stream_subscriptions ADD parent_hook_token")
|
|
167
184
|
await conn.execute(
|
|
168
185
|
"ALTER TABLE stream_subscriptions "
|
|
169
186
|
"ADD COLUMN IF NOT EXISTS parent_hook_token TEXT NULL"
|
|
170
187
|
)
|
|
171
188
|
elif migration.version == 7:
|
|
172
189
|
# V7: Add result column. Top-level ALTER for Citus propagation (see V5 note).
|
|
190
|
+
logger.info("CITUS_MIGRATION v7: ALTER stream_subscriptions ADD result")
|
|
173
191
|
await conn.execute(
|
|
174
192
|
"ALTER TABLE stream_subscriptions "
|
|
175
193
|
"ADD COLUMN IF NOT EXISTS result JSONB NULL"
|
|
@@ -11,6 +11,8 @@ from dataclasses import dataclass
|
|
|
11
11
|
from datetime import UTC, datetime
|
|
12
12
|
from typing import Any
|
|
13
13
|
|
|
14
|
+
from loguru import logger
|
|
15
|
+
|
|
14
16
|
|
|
15
17
|
@dataclass
|
|
16
18
|
class Migration:
|
|
@@ -238,11 +240,18 @@ class MigrationRunner(ABC):
|
|
|
238
240
|
Raises:
|
|
239
241
|
Exception: If any migration fails (partial migrations are rolled back)
|
|
240
242
|
"""
|
|
243
|
+
runner_name = type(self).__name__
|
|
244
|
+
logger.info(f"MIGRATION: run_migrations() called on {runner_name}")
|
|
245
|
+
|
|
241
246
|
# Ensure we have a schema_versions table
|
|
242
247
|
await self.ensure_schema_versions_table()
|
|
243
248
|
|
|
244
249
|
# Get current version
|
|
245
250
|
current_version = await self.get_current_version()
|
|
251
|
+
logger.info(
|
|
252
|
+
f"MIGRATION: current schema version = {current_version}",
|
|
253
|
+
runner=runner_name,
|
|
254
|
+
)
|
|
246
255
|
|
|
247
256
|
# If no migrations recorded, check for existing schema
|
|
248
257
|
if current_version == 0:
|
|
@@ -250,15 +259,43 @@ class MigrationRunner(ABC):
|
|
|
250
259
|
if has_existing_schema:
|
|
251
260
|
# Database has tables but no version tracking
|
|
252
261
|
# Assume it's at V1 (original schema)
|
|
262
|
+
logger.info(
|
|
263
|
+
"MIGRATION: existing schema detected — recording baseline v1",
|
|
264
|
+
runner=runner_name,
|
|
265
|
+
)
|
|
253
266
|
await self.record_baseline_version(1, "Baseline: original schema")
|
|
254
267
|
current_version = 1
|
|
255
268
|
|
|
256
269
|
# Get and apply pending migrations
|
|
257
270
|
pending = self.registry.get_pending(current_version)
|
|
271
|
+
pending_versions = [m.version for m in pending]
|
|
272
|
+
logger.info(
|
|
273
|
+
f"MIGRATION: pending migrations = {pending_versions}",
|
|
274
|
+
runner=runner_name,
|
|
275
|
+
current_version=current_version,
|
|
276
|
+
)
|
|
258
277
|
applied: list[AppliedMigration] = []
|
|
259
278
|
|
|
260
279
|
for migration in pending:
|
|
261
|
-
|
|
280
|
+
logger.info(
|
|
281
|
+
f"MIGRATION: applying v{migration.version} — {migration.description}",
|
|
282
|
+
runner=runner_name,
|
|
283
|
+
version=migration.version,
|
|
284
|
+
)
|
|
285
|
+
try:
|
|
286
|
+
await self.apply_migration(migration)
|
|
287
|
+
except Exception:
|
|
288
|
+
logger.exception(
|
|
289
|
+
f"MIGRATION: v{migration.version} FAILED — {migration.description}",
|
|
290
|
+
runner=runner_name,
|
|
291
|
+
version=migration.version,
|
|
292
|
+
)
|
|
293
|
+
raise
|
|
294
|
+
logger.info(
|
|
295
|
+
f"MIGRATION: v{migration.version} applied successfully",
|
|
296
|
+
runner=runner_name,
|
|
297
|
+
version=migration.version,
|
|
298
|
+
)
|
|
262
299
|
applied.append(
|
|
263
300
|
AppliedMigration(
|
|
264
301
|
version=migration.version,
|
|
@@ -267,6 +304,11 @@ class MigrationRunner(ABC):
|
|
|
267
304
|
)
|
|
268
305
|
)
|
|
269
306
|
|
|
307
|
+
logger.info(
|
|
308
|
+
f"MIGRATION: run_migrations() completed, applied {len(applied)} migration(s)",
|
|
309
|
+
runner=runner_name,
|
|
310
|
+
applied_versions=[a.version for a in applied],
|
|
311
|
+
)
|
|
270
312
|
return applied
|
|
271
313
|
|
|
272
314
|
|
|
@@ -21,6 +21,7 @@ from datetime import UTC, datetime
|
|
|
21
21
|
from typing import Any
|
|
22
22
|
|
|
23
23
|
import asyncpg
|
|
24
|
+
from loguru import logger
|
|
24
25
|
|
|
25
26
|
from pyworkflow.engine.events import Event, EventType
|
|
26
27
|
from pyworkflow.storage.base import StorageBackend
|
|
@@ -92,6 +93,10 @@ class PostgresMigrationRunner(MigrationRunner):
|
|
|
92
93
|
|
|
93
94
|
async def apply_migration(self, migration: Migration) -> None:
|
|
94
95
|
"""Apply a migration with PostgreSQL-specific handling."""
|
|
96
|
+
logger.info(
|
|
97
|
+
f"PG_MIGRATION: opening transaction for v{migration.version}",
|
|
98
|
+
version=migration.version,
|
|
99
|
+
)
|
|
95
100
|
async with self._pool.acquire() as conn, conn.transaction():
|
|
96
101
|
if migration.version == 2:
|
|
97
102
|
# V2: Add step_id column to events table
|
|
@@ -176,14 +181,17 @@ class PostgresMigrationRunner(MigrationRunner):
|
|
|
176
181
|
# and bypasses the Citus ProcessUtility hook, so worker shards
|
|
177
182
|
# silently miss the column. Plain Postgres is unaffected either way,
|
|
178
183
|
# but keeping both runners symmetric avoids future foot-guns.
|
|
184
|
+
logger.info("PG_MIGRATION v5: ALTER stream_subscriptions ADD stream_run_id")
|
|
179
185
|
await conn.execute(
|
|
180
186
|
"ALTER TABLE stream_subscriptions "
|
|
181
187
|
"ADD COLUMN IF NOT EXISTS stream_run_id TEXT NULL"
|
|
182
188
|
)
|
|
189
|
+
logger.info("PG_MIGRATION v5: CREATE INDEX idx_subscriptions_stream_run")
|
|
183
190
|
await conn.execute(
|
|
184
191
|
"CREATE INDEX IF NOT EXISTS idx_subscriptions_stream_run "
|
|
185
192
|
"ON stream_subscriptions(stream_id, stream_run_id)"
|
|
186
193
|
)
|
|
194
|
+
logger.info("PG_MIGRATION v5: CREATE TABLE scheduled_signals")
|
|
187
195
|
await conn.execute("""
|
|
188
196
|
CREATE TABLE IF NOT EXISTS scheduled_signals (
|
|
189
197
|
id TEXT PRIMARY KEY,
|
|
@@ -197,6 +205,7 @@ class PostgresMigrationRunner(MigrationRunner):
|
|
|
197
205
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
198
206
|
)
|
|
199
207
|
""")
|
|
208
|
+
logger.info("PG_MIGRATION v5: CREATE INDEX idx_scheduled_signals_due")
|
|
200
209
|
await conn.execute(
|
|
201
210
|
"CREATE INDEX IF NOT EXISTS idx_scheduled_signals_due "
|
|
202
211
|
"ON scheduled_signals(delivered, due_at)"
|
|
@@ -206,16 +215,19 @@ class PostgresMigrationRunner(MigrationRunner):
|
|
|
206
215
|
# stream-step dispatcher can resume the parent @workflow via
|
|
207
216
|
# resume_hook() instead of pinning a worker on an asyncio.Event.
|
|
208
217
|
# Top-level ALTERs for Citus propagation symmetry (see V5 note).
|
|
218
|
+
logger.info("PG_MIGRATION v6: ALTER stream_subscriptions ADD parent_run_id")
|
|
209
219
|
await conn.execute(
|
|
210
220
|
"ALTER TABLE stream_subscriptions "
|
|
211
221
|
"ADD COLUMN IF NOT EXISTS parent_run_id TEXT NULL"
|
|
212
222
|
)
|
|
223
|
+
logger.info("PG_MIGRATION v6: ALTER stream_subscriptions ADD parent_hook_token")
|
|
213
224
|
await conn.execute(
|
|
214
225
|
"ALTER TABLE stream_subscriptions "
|
|
215
226
|
"ADD COLUMN IF NOT EXISTS parent_hook_token TEXT NULL"
|
|
216
227
|
)
|
|
217
228
|
elif migration.version == 7:
|
|
218
229
|
# V7: result column on stream_subscriptions for step output payloads.
|
|
230
|
+
logger.info("PG_MIGRATION v7: ALTER stream_subscriptions ADD result")
|
|
219
231
|
await conn.execute(
|
|
220
232
|
"ALTER TABLE stream_subscriptions "
|
|
221
233
|
"ADD COLUMN IF NOT EXISTS result JSONB NULL"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/docker-compose.yml
RENAMED
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/pyworkflow.config.yaml
RENAMED
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/__init__.py
RENAMED
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/basic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/hooks.py
RENAMED
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/idempotency.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/retries.py
RENAMED
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/durable/workflows/schedules.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/transient/01_basic_workflow.py
RENAMED
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/transient/02_fault_tolerance.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/celery/transient/pyworkflow.config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/01_basic_workflow.py
RENAMED
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/02_file_storage.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/04_long_running.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/06_idempotency.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/08_cancellation.py
RENAMED
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/09_child_workflows.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/11_continue_as_new.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/durable/13_step_context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/examples/local/transient/01_quick_tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/cli/utils/config_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/continue_as_new.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyworkflow_engine-0.2.8 → pyworkflow_engine-0.2.9}/pyworkflow/primitives/step_checkpoint.py
RENAMED
|
File without changes
|
|
File without changes
|