Metadata-Version: 2.5
Name: firecube
Version: 0.1.7
Summary: A plugin-based batch ingestion CLI for turning Earth Observation products into analysis-ready datacubes.
Project-URL: Homepage, https://eumetsat.github.io/firecube/
Project-URL: Bug Tracker, https://github.com/eumetsat/firecube/issues
Project-URL: Documentation, https://github.com/eumetsat/firecube/blob/main/README.md
Project-URL: Source Code, https://github.com/eumetsat/firecube
Project-URL: Organization, https://www.eumetsat.int/
Project-URL: Release Notes, https://github.com/eumetsat/firecube/blob/main/CHANGELOG.md
Author-email: Armagan Karatosun <armagan.karatosun@eumetsat.int>, Anna-Lena Erdmann <anna-lena.erdmann@eumetsat.int>, Carlos Horn <carlos.horn@eumetsat.int>
License: Apache-2.0
License-File: AUTHORS.md
License-File: LICENSE
Requires-Python: >=3.12
Requires-Dist: botocore[crt]>=1.42.19
Requires-Dist: click>=8.2.1
Requires-Dist: dask[array]>=2025.1.0
Requires-Dist: duckdb>=1.4.1
Requires-Dist: fsspec>=2025.9.0
Requires-Dist: h5netcdf>=1.4.2
Requires-Dist: h5py>=3.11.0
Requires-Dist: netcdf4>=1.7.1.post2
Requires-Dist: numpy>=2.3.3
Requires-Dist: opentelemetry-exporter-otlp>=1.44.0
Requires-Dist: opentelemetry-sdk>=1.37.0
Requires-Dist: packaging>=24.2
Requires-Dist: pandas>=2.3.3
Requires-Dist: prometheus-client>=0.23.1
Requires-Dist: psutil>=7.1.0
Requires-Dist: pyarrow>=16.1.0
Requires-Dist: s3fs>=2025.9.0
Requires-Dist: xarray>=2025.10.1
Requires-Dist: zarr>=3.1.3
Provides-Extra: healpix
Requires-Dist: healpix-geo>=0.2.1; extra == 'healpix'
Provides-Extra: obstore
Requires-Dist: obstore>=0.4.0; extra == 'obstore'
Provides-Extra: patterns
Requires-Dist: trollsift<2,>=1.0.1; extra == 'patterns'
Provides-Extra: tensogram
Requires-Dist: tensogram-xarray<0.23,>=0.22.0; extra == 'tensogram'
Requires-Dist: tensogram-zarr<0.23,>=0.22.0; extra == 'tensogram'
Requires-Dist: tensogram<0.23,>=0.22.0; extra == 'tensogram'
Provides-Extra: test
Requires-Dist: griffelib>=2.0; extra == 'test'
Requires-Dist: healpix-geo>=0.2.1; extra == 'test'
Requires-Dist: moto[s3,server]>=5.0.0; extra == 'test'
Requires-Dist: obstore>=0.4.0; extra == 'test'
Requires-Dist: tensogram-xarray<0.23,>=0.22.0; extra == 'test'
Requires-Dist: tensogram-zarr<0.23,>=0.22.0; extra == 'test'
Requires-Dist: tensogram<0.23,>=0.22.0; extra == 'test'
Requires-Dist: trollsift<2,>=1.0.1; extra == 'test'
Provides-Extra: virtualzarr
Requires-Dist: virtualizarr<3,>=2.7.0; extra == 'virtualzarr'
Description-Content-Type: text/markdown

<p align="center">
  <img src="docs/assets/firecube-logo-title.png" alt="Firecube Logo" width="165">
</p>

<p align="center">
  <strong>Plugin-driven CLI for turning Earth Observation products into analysis-ready datacubes</strong>
</p>

<p align="center">
  <a href="docs/index.md">Documentation</a> |
  <a href="docs/quickstart/index.md">Quickstart</a> |
  <a href="docs/guides/plugins/index.md">Plugin Development</a>
</p>


## Installation

Firecube requires **Python 3.12+**. Install the released package from PyPI in
an isolated environment:

```bash
mkdir firecube-quickstart
cd firecube-quickstart
uv venv --python 3.12
source .venv/bin/activate
uv pip install firecube
firecube --version
```

See the [Installation guide](docs/quickstart/installation.md) for the user
quickstart. To change Firecube itself, use the setup in
[Contributing to Firecube](docs/contributing/firecube-contributors.md).

## Use A Plugin

Install an external plugin using the package name or local checkout documented
by that plugin:

```bash
firecube plugins install <plugin-package>
firecube plugins list
firecube plugins describe <plugin>
```

Then follow the plugin documentation for its source data and options. Ingestion
requires a target and write mode, plus a product name from the command or plugin
class. This example also spells out the storage and output choices:

```bash
firecube ingest <plugin> \
  --input-data ./source-data \
  --target "file://${PWD}/my_product.zarr" \
  --product-name my_product \
  --storage-type local \
  --storage-driver fsspec \
  --output-format zarr \
  --write-mode direct
```

```bash
# use another supported storage driver explicitly
firecube ingest <plugin> \
  --input-data ./source-data \
  --target "file://${PWD}/my_product.zarr" \
  --product-name my_product \
  --storage-type local \
  --storage-driver obstore \
  --output-format zarr \
  --write-mode direct
```

For the full first-run path, use the
[Quickstart](docs/quickstart/index.md).

## Documentation

- [Installation](docs/quickstart/installation.md)
- [Create the example plugin](docs/quickstart/plugins.md)
- [Prepare source data](docs/quickstart/source-data.md)
- [Run ingestion](docs/quickstart/ingestion.md)
- [Configure S3 access](docs/operations/s3-access.md)
- [Create an Intake catalog](docs/operations/intake-catalog.md)
- [CLI reference](docs/reference/cli.md)

Build or serve the docs locally:

```bash
uv sync --group docs
uv run mkdocs serve
uv run mkdocs build
```

## Development

Install test extras and run the main local gate:

```bash
uv sync --extra test
uv run pytest --strict-deps -m "not slow and not s3"
```

## Software Bill Of Materials

Regenerate the CycloneDX 1.5 SBOM and the dependency-license report locally with:

```bash
mkdir -p reports
uv export --format cyclonedx1.5 --all-groups --all-extras --output-file reports/sbom.cdx.json
uv run --isolated --all-groups --all-extras --with hatchling --with pip-licenses pip-licenses --format=json --with-urls > reports/dependency-licenses.json
```

The SBOM covers all uv dependency groups and extras. Use the dependency license
report and package metadata for license review; do not rely on CycloneDX license
fields alone.

Included third-party components: none declared.

### Direct Runtime And Optional Dependencies

The following dependencies are not included in the package but are required or
available as optional runtime extras:

| dependency | version | license | copyright | home_url | comments |
| --- | --- | --- | --- | --- | --- |
| `duckdb` | 1.5.5 | MIT |  | https://github.com/duckdb/duckdb-python | Direct dependency. |
| `pandas` | 3.0.5 | BSD-3-Clause |  | https://pandas.pydata.org | Direct dependency. |
| `numpy` | 2.5.0 | BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0 |  | https://numpy.org | Direct dependency; the additional licences cover components bundled in the numpy distribution. |
| `pyarrow` | 25.0.1 | Apache-2.0 |  | https://arrow.apache.org/ | Direct dependency. |
| `xarray` | 2026.7.0 | Apache-2.0 |  | https://xarray.dev/ | Direct dependency. |
| `zarr` | 3.2.1 | MIT |  | https://github.com/zarr-developers/zarr-python | Direct dependency. |
| `psutil` | 7.2.2 | BSD-3-Clause |  | https://github.com/giampaolo/psutil | Direct dependency. |
| `fsspec` | 2026.6.0 | BSD-3-Clause |  | https://github.com/fsspec/filesystem_spec | Direct dependency. |
| `s3fs` | 2026.6.0 | BSD-3-Clause |  | http://github.com/fsspec/s3fs/ | Direct dependency. |
| `botocore` | 1.43.0 | Apache-2.0 |  | https://github.com/boto/botocore | Direct dependency. |
| `netcdf4` | 1.7.4 | MIT |  | https://github.com/Unidata/netcdf4-python | Direct dependency. |
| `h5netcdf` | 1.8.1 | BSD-3-Clause |  | https://h5netcdf.org | Direct dependency. |
| `h5py` | 3.16.0 | BSD-3-Clause |  | https://www.h5py.org/ | Direct dependency. |
| `dask` | 2026.6.0 | BSD-3-Clause |  | https://github.com/dask/dask/ | Direct dependency. |
| `prometheus-client` | 0.26.0 | Apache-2.0 AND BSD-2-Clause |  | https://github.com/prometheus/client_python | Direct dependency. |
| `opentelemetry-sdk` | 1.44.0 | Apache-2.0 |  | https://github.com/open-telemetry/opentelemetry-python/tree/main/opentelemetry-sdk | Direct dependency. |
| `opentelemetry-exporter-otlp` | 1.44.0 | Apache-2.0 |  | https://github.com/open-telemetry/opentelemetry-python/tree/main/exporter/opentelemetry-exporter-otlp | Direct dependency. |
| `click` | 8.4.2 | BSD-3-Clause |  | https://github.com/pallets/click | Direct dependency. |
| `packaging` | 26.2 | Apache-2.0 OR BSD-2-Clause |  | https://github.com/pypa/packaging | Direct dependency; dual-licensed, either licence may be used. |
| `obstore` | 0.11.0 | MIT |  | https://developmentseed.org/obstore | Direct optional `obstore` extra dependency. |
| `tensogram` | 0.22.0 | Apache-2.0 |  | https://sites.ecmwf.int/docs/tensogram/main | Direct optional `tensogram` extra dependency. |
| `tensogram-xarray` | 0.22.0 | Apache-2.0 |  | https://sites.ecmwf.int/docs/tensogram/main | Direct optional `tensogram` extra dependency. |
| `tensogram-zarr` | 0.22.0 | Apache-2.0 |  | https://sites.ecmwf.int/docs/tensogram/main | Direct optional `tensogram` extra dependency. |
| `healpix-geo` | 0.2.1 | Apache-2.0 |  | https://pypi.org/project/healpix-geo/ | Direct optional `healpix` extra dependency. |
| `trollsift` | 1.0.1 | Apache-2.0 |  | https://pypi.org/project/trollsift/ | Direct optional `patterns` extra dependency. |
| `virtualizarr` | 2.7.1 | Apache-2.0 |  | https://github.com/zarr-developers/VirtualiZarr | Direct optional `virtualzarr` extra dependency. |

### Direct Build, Edit, And Test Dependencies

The following dependencies are only required for building, editing,
documentation, or testing:

| dependency | version | sw type | license | copyright | home_url | comments |
| --- | --- | --- | --- | --- | --- | --- |
| `hatchling` | 1.32.3 | Development tools | MIT |  | https://hatch.pypa.io/latest/ | Build backend dependency. |
| `trollsift` | 1.0.1 | Development tools | Apache-2.0 |  | https://pypi.org/project/trollsift/ | Direct optional `test` extra dependency. |
| `tensogram` | 0.22.0 | Development tools | Apache-2.0 |  | https://sites.ecmwf.int/docs/tensogram/main | Direct optional `test` extra dependency. |
| `tensogram-xarray` | 0.22.0 | Development tools | Apache-2.0 |  | https://sites.ecmwf.int/docs/tensogram/main | Direct optional `test` extra dependency. |
| `tensogram-zarr` | 0.22.0 | Development tools | Apache-2.0 |  | https://sites.ecmwf.int/docs/tensogram/main | Direct optional `test` extra dependency. |
| `obstore` | 0.11.0 | Development tools | MIT |  | https://developmentseed.org/obstore | Direct optional `test` extra dependency. |
| `healpix-geo` | 0.2.1 | Development tools | Apache-2.0 |  | https://pypi.org/project/healpix-geo/ | Direct optional `test` extra dependency. |
| `moto` | 5.2.2 | Development tools | Apache-2.0 |  | https://github.com/getmoto/moto | Direct optional `test` extra dependency. |
| `griffelib` | 2.1.0 | Development tools | ISC |  | https://pypi.org/project/griffelib/ | Direct optional `test` extra dependency; static docstring inspection for the API docs coverage test. |
| `pytest` | 9.1.1 | Development tools | MIT |  | https://docs.pytest.org/en/latest/ | Direct `dev` dependency group entry. |
| `ruff` | 0.16.5 | Development tools | MIT |  | https://docs.astral.sh/ruff | Direct `dev` dependency group entry. |
| `pytest-cov` | 7.1.0 | Development tools | MIT |  | https://pytest-cov.readthedocs.io/en/latest/changelog.html | Direct `dev` dependency group entry. |
| `pytest-xdist` | 3.8.0 | Development tools | MIT |  | https://github.com/pytest-dev/pytest-xdist | Direct `dev` dependency group entry. |
| `pytest-mock` | 3.15.1 | Development tools | MIT |  | https://github.com/pytest-dev/pytest-mock/ | Direct `dev` dependency group entry. |
| `pytest-asyncio` | 1.4.0 | Development tools | Apache-2.0 |  | https://github.com/pytest-dev/pytest-asyncio | Direct `dev` dependency group entry. |
| `pyright` | 1.1.411 | Development tools | MIT |  | https://github.com/RobertCraigie/pyright-python | Direct `dev` dependency group entry. |
| `mkdocs` | 1.6.1 | Development tools | BSD-2-Clause |  | https://github.com/mkdocs/mkdocs | Direct `docs` dependency group entry. |
| `mkdocs-material` | 9.7.7 | Development tools | MIT |  | https://github.com/squidfunk/mkdocs-material | Direct `docs` dependency group entry. |
| `mkdocstrings` | 1.0.4 | Development tools | ISC |  | https://mkdocstrings.github.io | Direct `docs` dependency group entry. |
| `mkdocstrings-python` | 2.0.5 | Development tools | ISC |  | https://mkdocstrings.github.io/python | Direct `docs` dependency group entry. |
| `mkdocs-mermaid2-plugin` | 1.2.3 | Development tools | MIT |  | https://github.com/fralau/mkdocs-mermaid2-plugin | Direct `docs` dependency group entry. |
| `mkdocs-click` | 0.9.0 | Development tools | Apache-2.0 |  | https://github.com/mkdocs/mkdocs-click | Direct `docs` dependency group entry. |
| `mkdocs-macros-plugin` | 1.5.0 | Development tools | MIT |  | https://github.com/fralau/mkdocs_macros_plugin | Direct `docs` dependency group entry. |
| `mike` | 2.2.0 | Development tools | BSD-3-Clause |  | https://github.com/jimporter/mike | Direct `docs` dependency group entry. |
| `mkdocs-jupyter` | 0.26.3 | Development tools | Apache-2.0 |  | https://github.com/danielfrg/mkdocs-jupyter | Direct `docs` dependency group entry. |


## Copyright and License

Copyright © EUMETSAT 2025-2026

The provided code and instructions are licensed under [Apache License, Version 2.0](./LICENSE).

Contact [EUMETSAT](http://www.eumetsat.int) for details on the usage and distribution terms.

## Authors

See [AUTHORS.md](./AUTHORS.md).
