Metadata-Version: 2.4
Name: blazerops
Version: 0.1.1
Summary: Python client and code-first pipeline authoring CLI for the BlazerOps platform.
Author-email: Hyades <contact@hyades.space>
License-Expression: Apache-2.0
Project-URL: Homepage, https://blazerops.ai
Project-URL: Documentation, https://docs.blazerops.ai
Keywords: blazerops,pipelines,cli,mlops,data
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Build Tools
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: httpx<1,>=0.27
Requires-Dist: keyring>=24
Provides-Extra: test
Requires-Dist: pytest>=8; extra == "test"
Requires-Dist: mypy>=1.11; extra == "test"
Dynamic: license-file

# blazerops

The command-line interface and Python client for [BlazerOps](https://blazerops.ai):
author pipelines as code, push new versions, run them, move data in and out of your
organisation's datawell, and call published apps from your own code.

## Install

```
pip install blazerops
blazerops --version
```

Requires Python 3.11 or newer, on macOS or Linux.

## Sign in

```
blazerops login
```

The CLI prints a short code and a URL. Open the URL where you are signed in to the
BlazerOps app, enter the code, and pick the organisation to work in. Your token is
stored in the OS keyring, never in a dotfile.

```
blazerops whoami     # who you are, your organisation, and the API you are talking to
blazerops doctor     # version, auth and catalog checks; exits non-zero if anything is wrong
```

On CI or a headless machine with no keyring, run `blazerops login --print-token` once
and export the token as `BLAZEROPS_TOKEN`.

The CLI talks to `https://api.blazerops.ai`. Set `BLAZEROPS_API_URL` to point it at a
different environment.

## Calling a published app from Python

The same package installs the importable `blazerops` client. On a server that holds the
app's consumer key:

```python
from pathlib import Path
from blazerops import BlazerOps

# BLAZEROPS_API_KEY=blzk_...  BLAZEROPS_BASE_URL=https://api.blazerops.ai
with BlazerOps() as bo:
    inv = bo.invoke("my-app", "stable",
                    {"document": Path("input.pdf"), "options": {"language": "en"}},
                    subject="user-123")
    print(inv.output)
```

Every invoke is idempotent and retried safely. Failures raise a `BlazerOpsError`
subclass such as `RefusedError`, `FailedError` or `TimeoutError`.

## Documentation

Guides and the full command reference: [docs.blazerops.ai](https://docs.blazerops.ai).
