caeli-data
The Python client of the Caeli data repository API (https://data.caeli.space). One door for every producer and reader of datasets: the inventory platform, pipelines and colleagues all use this library; nothing writes to the tables or the buckets directly.
pip install caeli-data # caeli-data[aws] also brings boto3, for Repository.from_secret
from caeli_data import Repository, TableRejected, IngestFailed
repo = Repository() # CAELI_API_URL (default https://data.caeli.space) and CAELI_API_KEY
repo.whoami() # {"name": "tim", "role": "admin", ...}
# a pandas DataFrame with utc_time, latitude, longitude and the value columns: the platform derives the rest
# (pt_region, pt_tile, row_hash; the coordinates rounded to 5 decimals), splits per region and month, loads, waits
jobs = repo.load_dataframe(df, "cdse-sentinel-5p-l2-no2", software={"my-pipeline": "1.0"}, source_ref="download 4711")
print(jobs[0]["message"]) # "200000 rows appended in cdse_sentinel_5p_l2_no2, ... item N_EU__2026-09__v1 now ..."
# a source with its own row identity (a station id, an orbit with scanline and pixel) names it
jobs = repo.load_dataframe(df, "openaq-stations-no2", row_key="location_id")
# a prepared Parquet file with the six standard columns already in it, any regions and months
jobs = repo.load_file("prepared.parquet", "cdse-sentinel-5p-l2-no2", software={"my-pipeline": "1.0"})
A complete month delivered again is a new version of that month: mode="replace", reason="re-import of 2026-09".
A service takes its key from Secrets Manager: Repository.from_secret("caeli/data-platform/api-key-inventory-platform").
The rules a table must meet are in Caeli_data_repository_conventions (section 6); the library checks them before
uploading and says which rule is broken (TableRejected; for an extra column the message carries the schema change to
make). IngestFailed means the platform failed; the same data sent again is the same job, never a double load.
Python 3.9 and later.
Rasters, the read side (catalogue, versions, downloads) and the command line follow in the next versions.
Metadata
Release files for caeli-data 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| caeli_data-0.4.1.tar.gz | 30.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| caeli_data-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 51.8 kB
Release files / caeli_data-0.4.1.tar.gz
| Download URL | caeli_data-0.4.1.tar.gz |
|---|---|
| Size | 30.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c0d9047877f81d23cdc7f9da29c63c5eab52ca5ee8d362eea8469d21194b6374
|
|
BLAKE2b-256 checksum How to use checksums |
bf0747da33cd53b4adcced2c493ec2e8d1a926342029f8cb9d5c144e1d540cb0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Release files / caeli_data-0.4.1-py3-none-any.whl
| Download URL | caeli_data-0.4.1-py3-none-any.whl |
|---|---|
| Size | 21.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5cc7005bf7b9f394a846ddc4ac1f0c3a626e518199e476b3e1d2586f09944874
|
|
BLAKE2b-256 checksum How to use checksums |
d68cccad75d94462c3854fb69d75d92a56abdf59b9124a7bff3f01d78039ad32
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Security for caeli-data 0.4.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.