Python SDK for iWF workflow engine
pip install iwf-python-sdk==0.1.2
See samples for use case examples.
- Python 3.9+
- iWF server
To implement a workflow, the two most core interfaces are
-
Workflow interface defines the workflow definition
-
WorkflowState interface defines the workflow states for workflow definitions
A workflow can contain any number of WorkflowStates.
See more in https://github.com/indeedeng/iwf#what-is-iwf
- Start workflow API
- Executing
wait_until
/execute
APIs and completing workflow - Parallel execution of multiple states
- GetWorkflowResultsWithWait API
- StateOption: WaitUntil(optional)/Execute API timeout and retry policy
- Get workflow with wait API
- Timer command
- AnyCommandCompleted and AllCommandCompleted waitingType
- InternalChannel command
- DataAttribute
- Stop workflow API
- Improve workflow uncompleted error return(canceled, failed, timeout, terminated)
- Support execute API failure policy
- Support workflow RPC
- Signal command
- Reset workflow API
- Skip timer API for testing/operation
Future -- the advanced features that already supported in server. Contributions are welcome to implement them in this SDK!
- Atomic conditional complete workflow by checking signal/internal channel emptiness
- Dynamic data/search attributes and internal/signal channel definition
- State options overridden dynamically
- Describe workflow API
- TryGetWorkflowResults API
- Consume N messages in a single command
- Decider trigger type: any command combination
- Wait_until API failure policy
- Caching on persistence
- StateExecutionLocal and recordEvents API
- SearchAttribute: Keyword, Double, Bool, Datetime, Keyword array, Text
- Workflow start options: initial search attributes
- Get workflow DataAttributes/SearchAttributes API
See iwf README
Dev Container is an easy way to get iwf-server running locally. Follow these steps to launch a dev container:
- Install Docker, VSCode, and VSCode Dev Container plugin.
- Open the project in VSCode.
cd iwf-python-sdk code .
- Launch the Remote-Containers: Reopen in Container command from Command Palette (Ctrl + Shift + P). You can also click in the bottom left corner to access the remote container menu.
- Once the dev container starts, iwf-server will be listening on port 8801.
This project uses Poetry as a dependency manager. Check out Poetry's documentation on how to install it on your system before proceeding.
❗Note: If you use Conda or Pyenv as your environment / package manager, avoid dependency conflicts by doing the following first:
- Before installing Poetry, create and activate a new Conda env (e.g. conda create -n langchain python=3.9)
- Install Poetry (see above)
- Tell Poetry to use the virtualenv python environment (poetry config virtualenvs.prefer-active-python true)
- Continue with the following steps.
To install requirements:
poetry install
Initialize the IDL Git submodule
git submodule update --init --recursive
Update IDL to the latest commit.
git submodule update --remote --merge
This project uses openapi-python-client to generate an API client from the IDL. To update the generated client:
cd iwf && poetry run openapi-python-client update --path ../iwf-idl/iwf-sdk.yaml --config .openapi-python-client-config.yaml
Then run cd .. && cp -R iwf/iwf_api/iwf_api/* iwf/iwf_api && rm -R iwf/iwf_api/iwf_api && poetry update
to
- Fix the api package path
- Update the local path dependency.
To run linting for this project:
poetry run pre-commit run --show-diff-on-failure --color=always --all-files
This project is governed by the Contributor Covenant v 1.4.1. (Review the Code of Conduct and remove this sentence before publishing your project.)
This project uses the Apache 2.0 license. (Update this and the LICENSE file if your project uses a different license.)