Skip to main content

A simple workflow framework for building and managing data processing pipelines

Project description

FlowerPower 🌸 — Build & Orchestrate Data Pipelines

A simple, configuration-driven workflow framework built on Hamilton

FlowerPower Logo

PyPI version License Ask DeepWiki Documentation Status

FlowerPower is a Python framework for building, configuring, and running data processing pipelines. You write your logic as plain Python functions using Hamilton; FlowerPower takes care of the project structure, layered configuration, execution, the CLI, a web UI, and pluggable I/O.

Hamilton = the DAG, FlowerPower = everything around it. You describe nodes as functions; FlowerPower wires up config, runs, retries, visualization, and orchestration.

✨ Features

  • Modular pipelines — Define transforms as Python functions; Hamilton assembles them into a directed acyclic graph (DAG) from their signatures.
  • Configuration-driven — Separate logic from settings with layered YAML, env overlays (FP_PIPELINE__*), ${VAR} interpolation, and runtime kwargs.
  • Unified interfaces — Drive everything from the Python API (FlowerPowerProject), the CLI (flowerpower), or the web UI (Hamilton UI).
  • Executors — Run locally, in a thread pool, or distributed with Ray.
  • Adapters — Track lineage with the Hamilton Tracker, experiments with MLflow.
  • Extensible I/O — CSV, JSON, Parquet, DeltaTable, DuckDB, PostgreSQL, MySQL, MSSQL, Oracle, SQLite, MQTT via the flowerpower-io plugin.
  • Filesystem abstraction — Local, S3, GCS, and more, through fsspeckit.

📦 Installation

FlowerPower requires Python 3.11+. We recommend uv:

uv venv && source .venv/bin/activate
uv pip install flowerpower

Optional extras:

uv pip install 'flowerpower[io]'      # I/O plugins
uv pip install 'flowerpower[ui]'      # Hamilton UI
uv pip install 'flowerpower[ray]'     # distributed execution
uv pip install 'flowerpower[io,ui,ray]'   # combine the extras you need

🚀 Quick start

Create a project, a pipeline, and run it:

flowerpower init --name hello-flowerpower
cd hello-flowerpower
flowerpower pipeline new hello
flowerpower pipeline run hello

Or in Python:

from flowerpower import FlowerPowerProject

# 1. create the project
FlowerPowerProject.new(name="hello-flowerpower")

# 2. load it and create a pipeline
project = FlowerPowerProject.load("hello-flowerpower")
project.pipeline_manager.creator.create_pipeline(name="hello")

# 3. (edit pipelines/hello.py + conf/pipelines/hello.yml, then run)
result = project.run("hello")
print(result)

A pipeline module

Write your DAG as functions in pipelines/hello.py. Parameters come from YAML and are wired in with Hamilton's @parameterize:

from pathlib import Path
from hamilton.function_modifiers import parameterize
from flowerpower.cfg import Config

PARAMS = Config.load(
    Path(__file__).parents[1], pipeline_name="hello"
).pipeline.h_params

@parameterize(**PARAMS["greeting_message"])   # PARAMS is a dict — use ["..."]
def greeting_message(message: str) -> str:
    return f"{message},"

@parameterize(**PARAMS["target_name"])
def target_name(name: str) -> str:
    return f"{name}!"

def full_greeting(greeting_message: str, target_name: str) -> str:
    return f"{greeting_message} {target_name}"
# conf/pipelines/hello.yml
params:
  greeting_message:
    message: "Hello"
  target_name:
    name: "World"
run:
  final_vars: [full_greeting]

project.run("hello"){'full_greeting': 'Hello, World!'}.

📖 The full, step-by-step walkthrough is in the Tutorial.

⚙️ Running pipelines

FlowerPowerProject.run() (and PipelineManager.run()) accept a RunConfig and/or keyword overrides — kwargs always win:

from flowerpower.cfg.pipeline.run import RunConfig

# simple
result = project.run("hello")

# with a RunConfig
result = project.run("hello", run_config=RunConfig(log_level="DEBUG"))

# with kwargs overrides
result = project.run(
    "hello",
    inputs={"greeting_message": {"message": "Hi"}},
    final_vars=["full_greeting"],
)

Async runs use Hamilton's async driver via PipelineManager.run_async():

from flowerpower.pipeline import PipelineManager

pm = PipelineManager(base_dir="hello-flowerpower")
result = await pm.run_async("hello")

See the docs for RunConfig & builders, additional modules, and adapters.

🖥️ Web UI

Launch the Hamilton UI to visualize and inspect pipeline runs:

flowerpower ui

📖 Documentation

Full documentation — installation, tutorial, how-to guides, concepts, CLI, and API reference — lives at https://legout.github.io/flowerpower/.

🤝 Contributing

Contributions are welcome. See the contributing guide and open issues or PRs against legout/flowerpower.

📜 License

MIT — see LICENSE.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flowerpower-0.36.0.tar.gz (90.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flowerpower-0.36.0-py3-none-any.whl (108.3 kB view details)

Uploaded Python 3

File details

Details for the file flowerpower-0.36.0.tar.gz.

File metadata

  • Download URL: flowerpower-0.36.0.tar.gz
  • Upload date:
  • Size: 90.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for flowerpower-0.36.0.tar.gz
Algorithm Hash digest
SHA256 16683a520f5b655a72560531508305a28149ff2ee53013b619b448336b02f859
MD5 e7e1f01b06e43ddb4886c8c56e8a4861
BLAKE2b-256 328b21fd7600f63cd8e9b424c233eed108c4d5101c2837660e912097d145c619

See more details on using hashes here.

File details

Details for the file flowerpower-0.36.0-py3-none-any.whl.

File metadata

  • Download URL: flowerpower-0.36.0-py3-none-any.whl
  • Upload date:
  • Size: 108.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for flowerpower-0.36.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7c38028ae9b5dc186f5228740e5c397157ee8177ef0350c58ff13c7c3db2d2ba
MD5 447c8d7f9200f5b5dd17b30481117896
BLAKE2b-256 38fd916e692bc5579b8f7a94e58490ba457c1262c7925cf039972735bfcea77f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page