Skip to main content

carefree-workflow

carefree-workflow is a lightweight library for building arbitray workflows with Python.

Highlights

  • Async: async is 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_schema implemented can be automatically served.
  • Complex results (e.g. PIL.Image) can be handled if get_api_response is 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.

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.
  • 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.

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)

Source distribution for carefree-workflow 0.1.0
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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page