EarthSciIO
Cross-language (Python / Julia / Rust) data-provider library that fulfills the EarthSci data-loader contract: it resolves a loader's URL at a time, downloads and caches the file in a shared content-addressed cache, and reads it into native-grid arrays the simulation consumes at its cadence.
EarthSciIO is the sanctioned impure I/O boundary of the EarthSci stack — it
provides data, never a solver. Variable-remap stays in EarthSciAST
(ESS); regrid stays in EarthSciDiscretizations (ESD). See the boundary writeup
in spec/README.md.
Status
Greenfield. The language-neutral provider spec lands first and gates the per-language implementations:
spec/— the contract: shared cache + manifest format (key = sha256(resolved_url)), the three extensibility registries (transport / format / store), the offline-mode contract, and the conformance corpus format. JSON Schemas inspec/schemas/.conformance/— offline golden fixtures + expected native arrays + a reference runner.python3 conformance/verify.pyvalidates the corpus offline;./conformance/run_conformance.shruns all three providers over it and asserts the decoded native arrays are equal across Python, Julia, and Rust (cross-language harness, CI-gated).
Architecture is idiomatic-per-language against the shared spec (not a Rust+FFI core), extensible by construction so an S3 transport / object-store backend / Zarr reader slot in without touching the Provider API.
Python (earthsciio/)
The Python track ships the URL download + content-addressed cache behind the
ESS opener/fetcher seam (esio-9nb.2). It registers the active http/file
transports and the local store into the three registries, alongside the
s3/zarr cloud stubs.
from earthsciio import Cache
cache = Cache() # root = $EARTHSCIDATADIR
entry = cache.fetch(
"https://data.earthsci.dev/era5/2018/11/20181108.nc",
source_loader="era5",
mirrors=["https://mirror.example/era5/20181108.nc"], # tried in order
)
entry.path # local blob (fetched once, shared across processes + languages)
entry.status # "downloaded" | "hit" | "not_modified"
# Offline (cache-only, hermetic) — never touches the network:
hit = Cache(offline=True).fetch(...) # raises CacheMiss on a miss
fetch is content-addressed by sha256(resolved_url), validates via
checksum / conditional-GET / TTL, writes atomically under a per-blob flock
(safe for many processes on one /scratch.local cache), and records a sidecar
manifest. Auth is a pluggable realm → resolver seam
(StaticHeaderAuth.bearer(...) / .header(...)); credentials never reach the
manifest. Run the suite with pytest (fully offline/hermetic).
CDS / ERA5 (cds transport)
The active cds transport speaks the Copernicus Climate Data Store API v1 —
submit → poll → download — behind the same fetch seam (plain requests, no
cdsapi SDK). A cds:// URL encodes the dataset + request Dict as canonical
JSON, so an identical request shares a cache key and a repeat is a hit, not a
second CDS job. earthsciio.era5 builds that request from ERA5 loader fields
(variable list, pressure levels, area from the domain bbox, the month/day/hour
span), ported from EarthSciData.jl.
from earthsciio import Cache, cds_auth, era5
url = era5.era5_cds_url(
2018, 11, [8], ["temperature", "u_component_of_wind"], [1000, 850, 500],
era5.era5_area_from_bbox(-100.5, 39.0, -80.2, 45.7), # [N, W, S, E]
)
cache = Cache(auth={"cds": cds_auth()}) # key from ~/.cdsapirc / $CDSAPI_KEY
entry = cache.fetch(url, source_loader="era5", auth_realm="cds")
Auth is the PRIVATE-TOKEN header carried by the cds realm; the key is read
from $CDSAPI_KEY or ~/.cdsapirc and only the realm name reaches the
manifest. CI is fully offline against a mock CDS server. The live pull is a
manual smoke test (needs a real key + one-time ERA5 licence acceptance on the
CDS portal):
EARTHSCI_LIVE=1 CDSAPI_KEY=<key> pytest -q -k live_cds
Metadata
Release files for earthsciio 0.1.4
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 | Actions |
|---|---|---|---|---|
| earthsciio-0.1.4.tar.gz | 208.5 kB | With provenance | Details for earthsciio-0.1.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| earthsciio-0.1.4-py3-none-any.whl | Python 3 | none | any | Details for earthsciio-0.1.4-py3-none-any.whl |
Total release size: 345.9 kB
Release files / earthsciio-0.1.4.tar.gz
| Download URL | earthsciio-0.1.4.tar.gz |
|---|---|
| Size | 208.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b50e23c397cba40096afb00e28acf019fa1a4ab579dd851d5ed6a9a54356f98a
|
|
BLAKE2b-256 checksum How to use checksums |
a7cdc94687f769878ea94f3a6c557847ce2d3791578c2505760a897275df44db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logRelease files / earthsciio-0.1.4-py3-none-any.whl
| Download URL | earthsciio-0.1.4-py3-none-any.whl |
|---|---|
| Size | 137.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
afab3f8559465775d98f730ea53c065e0aa95c0cb4d1f876ceea4458e38af782
|
|
BLAKE2b-256 checksum How to use checksums |
7cb8ec971ac6098b0747cb3a147c5929e26c440a6b31037d6cdb9e0cddc7fdc1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logSecurity for earthsciio 0.1.4
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for earthsciio-0.1.4.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logA 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.