Metadata-Version: 2.4
Name: gundi-action-runner
Version: 0.1.0rc2
Summary: Framework for building Gundi integration action runners
License-Expression: Apache-2.0
Project-URL: Repository, https://github.com/PADAS/gundi-integration-action-runner
Project-URL: Documentation, https://padas.github.io/gundi-integration-action-runner/
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: environs~=9.5
Requires-Dist: pydantic~=1.10.15
Requires-Dist: fastapi~=0.115.0
Requires-Dist: uvicorn~=0.30.0
Requires-Dist: gundi-core~=1.11.1
Requires-Dist: gundi-client-v2~=3.5
Requires-Dist: stamina~=23.2.0
Requires-Dist: redis~=5.0.1
Requires-Dist: gcloud-aio-pubsub~=6.0.0
Requires-Dist: click~=8.1.7
Requires-Dist: pyjq~=2.6.0
Requires-Dist: python-json-logger~=2.0.7
Requires-Dist: marshmallow~=3.22.0
Provides-Extra: dev
Requires-Dist: pytest~=7.4.3; extra == "dev"
Requires-Dist: pytest-asyncio~=0.21.1; extra == "dev"
Requires-Dist: pytest-mock~=3.12.0; extra == "dev"
Requires-Dist: build~=1.2; extra == "dev"
Requires-Dist: twine~=6.1; extra == "dev"
Requires-Dist: packaging>=24.2; extra == "dev"
Provides-Extra: cli
Requires-Dist: copier~=7.2; extra == "cli"
Requires-Dist: pyyaml-include<2; extra == "cli"
Requires-Dist: plumbum<1.10; extra == "cli"
Provides-Extra: docs
Requires-Dist: mkdocs-material~=9.5; extra == "docs"
Requires-Dist: mkdocs-exclude~=1.0; extra == "docs"
Provides-Extra: testing
Requires-Dist: pytest~=7.4.3; extra == "testing"
Requires-Dist: pytest-mock~=3.12.0; extra == "testing"
Requires-Dist: pytest-asyncio~=0.21.1; extra == "testing"
Dynamic: license-file

# gundi-action-runner

A framework for building [Gundi](https://gundiservice.org) integration
connectors in Python. Register handlers with decorators, and the framework
provides the FastAPI service, scheduling, state, activity logging, portal
schemas, and delivery to Gundi.

```python
from gundi_action_runner import action, create_app

@action.pull(config=PullObservationsConfig, title="Pull Observations")
async def pull_observations(integration, action_config):
    ...

app = create_app(handlers_modules=["myconnector.handlers"])
```

## Install

```bash
pip install "gundi-action-runner[cli]"
```

> The current release is a release candidate — until the first stable release,
> pin it exactly: `pip install "gundi-action-runner[cli]==0.1.0rc2"`
> (avoid `--pre`, which cascades pre-releases to all dependencies).

## What you get

- **`gundi-runner new`** — scaffold a complete connector project interactively
  (copier-backed; generated projects can pull template updates later)
- **`gundi-runner run` / `register` / `add-action`** — local dev server,
  Gundi registration, and handler codegen
- **Pytest fixtures** — installing the package registers a pytest plugin with
  ready-made Gundi mocks (`integration_v2`, `mock_gundi_client_v2`, ...)
- **Local dev stack** — scaffolds include a docker-compose environment
  (connector + redis + Pub/Sub emulator with sub-action loopback)
- **Two auth modes** — service client credentials, or your own Gundi login
  via the OAuth2 password grant for local development

## Documentation

- Source, quickstart, and guides:
  https://github.com/PADAS/gundi-integration-action-runner
- Docs site (live with the first stable release):
  https://padas.github.io/gundi-integration-action-runner/

Apache-2.0. Maintained by the [Gundi](https://gundiservice.org) team at
EarthRanger.
