Metadata-Version: 2.4
Name: ms_flow
Version: 0.2.0
Summary: In-process, desktop-first, domain-agnostic job/task/executor orchestrator for massive data flows.
Author: Mario S. Valdés-Tresanco, Mario E. Valdés-Tresanco, Ernesto Moreno, Pedro A. Valiente
License-Expression: MIT
Project-URL: Homepage, https://github.com/MolSuite/ms_flow
Project-URL: Documentation, https://github.com/MolSuite/ms_flow/tree/main/docs
Project-URL: Issues, https://github.com/MolSuite/ms_flow/issues
Keywords: orchestration,executor,jobs,pipeline,scientific-computing
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: blinker>=1.6
Requires-Dist: loky>=3.0
Requires-Dist: ms_env>=0.2.0
Requires-Dist: pydantic>=2.0
Requires-Dist: sqlalchemy>=2.0
Requires-Dist: sqlmodel>=0.0.14
Requires-Dist: toml>=0.10
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Provides-Extra: ray
Requires-Dist: ray>=2.9; extra == "ray"
Dynamic: license-file

# ms_flow

In-process, desktop-first, domain-agnostic orchestrator for massive data flows:
jobs, executors and persistence in the same process as your app — no broker, no
daemon, no server. Works from a Qt app, a notebook or a plain script.

```python
import sqlite3

from ms_flow import Workspace, job, table_sink, task


@task()
def double_value(value: int) -> dict:
    return {"value": value, "double_value": 2 * value}


@job(task=double_value, output=table_sink("results", columns=("value", "double_value")))
def double_values(params, project):
    yield from range(1000)


ms = Workspace(app_id="demo")
ms.create_or_open_project(name="demo", folder="./demo_project", activate=True)
with sqlite3.connect(ms.project_db.db_path) as db:
    db.execute("CREATE TABLE IF NOT EXISTS results (value INTEGER, double_value INTEGER)")

print(ms.engine.wait(ms.submit(double_values)).status)
ms.shutdown()
```

## Install

```bash
pip install ms_flow            # engine + projects: SQLite and loky
```

## Where to look

- [5-minute quickstart](docs/guides/quickstart_5min.md) — first working job.
- [Runnable examples](examples/README.md) — scripts y notebook.
- [Public API](docs/guides/public_api.md) — API.
- [Docs index](docs/README.md) — guides, contracts, operation
- [Benchmarks](benchmarks/README.md) — performance.

## Status

Beta. The public API (`ms_flow.api`) is the stable surface; `ms_flow.core.*` may change without notice.

## License

MIT — see [LICENSE](LICENSE).
