carefree-workflow
carefree-workflow is a lightweight library for building arbitray workflows with Python.
Highlights
- Async:
asyncis by design. - Parallel: nodes can be executed in parallel.
- Powerful: complex locks / logics / dependencies can be handled.
- You can even perform a loop with loop backs in the workflow!
- Servable: all nodes, as well as the workflow itself, can be automatically turned into RESTful APIs.
- Extensible: you can easily extend the library with your own nodes.
- Serializable: the workflow can be serialized into / deserialized from a single JSON file.
- Human Readable: the workflow JSON file is human readable and easy to understand.
- Lightweight: the library is lightweight (core implementation is ~500 lines of code in a single file
core.py) and easy to use.
Installation
carefree-workflow requires Python 3.8 or higher.
pip install carefree-workflow
or
git clone https://github.com/carefree0910/carefree-workflow.git
cd carefree-workflow
pip install -e .
Usages
CLI
carefree-workflow is installed with a Command Line Interface (CLI) tool called cflow, which can help you execute / render workflows easily:
Workflow JSON examples can be found in
examples/workflows.
cflow execute -f <workflow_json_file>
or
cflow render -f <workflow_json_file>
Detailed information can be found by:
cflow --help
Code
Since carefree-workflow is extensible, you can easily extend the library with your own nodes:
import asyncio
from cflow import *
@Node.register("hello")
class HelloNode(Node):
async def execute(self):
name = self.data["name"]
return {"name": name, "greeting": f"Hello, {name}!"}
async def main():
flow = (
Flow()
.push(HelloNode("A", dict(name="foo")))
.push(HelloNode("B", dict(name="bar")))
.push(
EchoNode(
"Echo",
dict(messages=[None, None, "Hello, World!"]),
injections=[
Injection("A", "name", "messages.0"),
Injection("B", "greeting", "messages.1"),
],
)
)
)
await flow.execute("Echo")
if __name__ == "__main__":
asyncio.run(main())
Running the above codes will yield something like:
[17:30:27] foo
Hello, bar!
Hello, World!
More code snippets can be found in
examples.
Serving
carefree-workflow is designed to be servable, here are some rules:
- Only nodes with
get_schemaimplemented can be automatically served.- See
cflow/nodes/cv.pyfor some examples.
- See
- Complex results (e.g.
PIL.Image) can be handled ifget_api_responseis implemented.- See our template if you are interested!
- The registered name will be turned into the API endpoint, with the dots (
.) being replaced by slashes (/).- e.g. if the node is registered with
Node.register("foo.bar"), the corresponding API endpoint will be/foo/bar.
- e.g. if the node is registered with
You can use our CLI to launch a server under default settings easily:
cflow serve
More options can be found by cflow serve --help.
Examples
- Code snippets can be found in
examples. - Custom node templates can be found in
cflow/nodes/templates.- And some pre-implemented node examples can be found in
cflow/nodes/cv.py.
- And some pre-implemented node examples can be found in
- Workflow JSON files can be found in
examples/workflows.- These JSON files can be executed by
cflow execute -f <workflow_json_file>. - More execution options can be found by
cflow execute --help.
- These JSON files can be executed by
License
carefree-workflow is MIT licensed, as found in the LICENSE file.
Metadata
Release files for carefree-workflow 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| carefree-workflow-0.1.0.tar.gz | 20.6 kB | Without provenance | Details |
Release files / carefree-workflow-0.1.0.tar.gz
| Download URL | carefree-workflow-0.1.0.tar.gz |
|---|---|
| Size | 20.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
709c26b2812c4ff937ac97dd16a05446407f3daa988c496284f78cd6a71d0417
|
|
BLAKE2b-256 checksum How to use checksums |
96dc61bb8f3bc2dec4fc54f34dffd5c87619b1cbcc8648b87cb5c1c11ea7fbd6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.5
|
Security for carefree-workflow 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.