Metadata-Version: 2.5
Name: flowlit-integration
Version: 0.1.0
Summary: Reusable flowlit executors (Harvest, Google Sheets, Gmail, Slack, spreadsheets) and their shared credentials abstraction, for any flowlit-based client.
Project-URL: Homepage, https://github.com/shadiwazir/flowlit-integration
Project-URL: Repository, https://github.com/shadiwazir/flowlit-integration
Project-URL: Issues, https://github.com/shadiwazir/flowlit-integration/issues
Author: shadiwazir
License: MIT
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: flowlit>=0.4.0
Requires-Dist: pydantic>=2.0
Provides-Extra: all
Requires-Dist: aiohttp>=3.9; extra == 'all'
Requires-Dist: google-auth>=2.0; extra == 'all'
Requires-Dist: gspread>=6.0; extra == 'all'
Requires-Dist: openpyxl>=3.1; extra == 'all'
Provides-Extra: dev
Requires-Dist: mypy>=1.11; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest-mock>=3.14; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Requires-Dist: types-openpyxl; extra == 'dev'
Provides-Extra: gmail
Provides-Extra: google-sheets
Requires-Dist: google-auth>=2.0; extra == 'google-sheets'
Requires-Dist: gspread>=6.0; extra == 'google-sheets'
Provides-Extra: harvest
Requires-Dist: aiohttp>=3.9; extra == 'harvest'
Provides-Extra: slack
Requires-Dist: aiohttp>=3.9; extra == 'slack'
Provides-Extra: spreadsheet
Requires-Dist: openpyxl>=3.1; extra == 'spreadsheet'
Description-Content-Type: text/markdown

# flowlit-integration

Reusable [flowlit](https://github.com/shadiwazir/flowlit) executors for a
handful of common external systems -- Harvest, Google Sheets, Gmail,
Slack -- plus a generic "any data → spreadsheet" executor, and the
shared `CredentialsProvider` abstraction they all resolve secrets
through.

## Where this sits

```
flowlit                 the execution engine: DAG plans, the Executor
                         port, the EventBus. Knows nothing about any
                         specific external system.

flowlit-integration      (this package) knows how to talk to a handful
                         of common external systems. Knows nothing about
                         any particular business's use of them.

<client application>    e.g. ccq-automation -- business-specific DAGs,
                         business rules, transport. Imports the
                         executors it needs from here and registers them
                         with flowlit itself.
```

## Installing

Pick only the extras you need -- each pulls in just the third-party SDK(s)
that one executor requires:

```
pip install "flowlit-integration[harvest]"
pip install "flowlit-integration[harvest,gmail,spreadsheet]"
pip install "flowlit-integration[all]"       # everything
```

## Using an executor

Registration is always the client's own explicit job -- importing this
package never registers anything with flowlit, and never performs I/O:

```python
from flowlit import register_executor
from flowlit_integration.executors.harvest_executor import HarvestExecutor

register_executor("harvest", HarvestExecutor())
```

Each executor resolves its own credentials lazily, the first time a step
of that type actually runs, via `flowlit_integration.credentials`'s
`default_credentials_provider()` chain (explicit value > environment
variable > credentials file > a documented, not-yet-implemented secret-
manager extension point) -- see `docs/architecture.md` and each
executor's own module docstring for its specific env-var/spec-field
names.

## Status

Alpha (pre-1.0: minor version bumps may include breaking changes).
Published on PyPI. See [CHANGELOG.md](CHANGELOG.md) for what changed in
each release.
