Changelog¶
All notable changes to this project are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
[1.0.0] - 2026-09-04¶
Added¶
- Packaged Built-in Examples: Embedded all 27 YAML, Python, and env configurations directly inside the package (
gathering/examples/), accessible out-of-the-box viagathering examples list,gathering examples show, andgathering examples copy. - Built-in Example Execution: Direct execution of packaged examples via
gathering run example:<name>orrun_from_yaml("example:<name>")without requiring local files or private repository access. - DIVA Platform Default Storage: Automatic detection of the DIVA platform environment (
/workspace), preconfiguring the default download directory at/workspace/.cache/gathering/without requiring manual workspace setup. - Per-Granule Folder Hierarchy: Multi-file satellite products (EUMETSAT MTG FCI/MSG, Copernicus CDSE Sentinel-2/3) organize extracted and raw files inside individual granule folders under the date tree (
.../YYYY/MM/DD/<granule_id>/). - NASA PACE Gatherer (
PaceGatherer): Full support for Ocean Color Instrument (OCI), SPEXone polarimeter, and HARP2 hyper-angular polarimeter via NASA Common Metadata Repository (CMR) API with spatial ROI, temporal filtering, and multi-threaded parallel downloads. - NASA MODIS Gatherer (
ModisGatherer): Comprehensive support for Terra (MOD*), Aqua (MYD*), and Combined joint retrieval products (MCD19A2MAIAC 1km Land AOD,MCD43BRDF and Surface Albedo 500m / 0.05° CMG) via NASA CMR. - Shared CMR Architecture (
CMRGatherer): Abstract base class ingathering.sources.cmr_baseproviding query normalization (CMRCacheQuery), granule filtering, and UTC date-partition aware caching (<cache_dir>/modis/<sat>/<prod>/YYYY/MM/DD/). - Copernicus CDSE Gatherer (
CDSEGatherer): Sentinel-2 MSI (Level 2A/1C with cloud cover filters), Sentinel-3 OLCI & SLSTR, and Sentinel-5P TROPOMI trace gases via OData API and direct S3 bucket URIs. - EUMETSAT Data Store (
EumdacGatherer): MTG FCI (with intelligent geostationary ROI swath chunk calculation), MSG SEVIRI Full-Disk, Metop IASI/AVHRR, and MTG LI/IRS. - ESA EarthCARE Gatherer (
EarthCAREGatherer): ATLID Lidar, CPR Radar, and MSI Multi-Spectral Imager via ESA MAAP STAC API. - Ground-Based Networks: NASA AERONET (AOD & Almucantar inversions), Pandonia Global Network (PGN trace gases), ACTRIS ARES (in-situ optical & lidar), ACTRIS Cloudnet (cloud/aerosol profiling).
- Intra-Gatherer Concurrent Downloads (
max_workers): Multi-threaded parallel asset downloading within individual gatherers (ThreadPoolExecutor) alongside task-level pipeline concurrency. - Spatial ROI & AERONET Site Resolution: Full
Gridmodel integration, auto-resolving coordinates fromaeronet_locations_v3.txt, STAC bounding boxes, CMR bounding boxes, and WKT polygons. - Top-Level Package Re-Exports: Direct root imports for
ModisGatherer,PaceGatherer,CDSEGatherer,EumdacGatherer,EarthCAREGatherer,AeronetGatherer,ActrisAresGatherer,ActrisCloudnetGatherer,PandoniaGatherer,Grid,Task,Pipeline,list_examples,get_example_path,copy_example,read_examplefromgathering. - Zero-Cost Lazy Package & CLI Loading (PEP 562): Deferred imports and proxy classes (
_LazyGridMeta) ensuring CLI and module startup does not eagerly load heavy scientific dependencies (xarray,pandas,folium,jinja2,pystac), speeding up CLI startup by >60% andimport gatheringby ~5.6x. - File Integrity & Automated Cache Repair: Magic-byte checking (NetCDF-3, NetCDF-4/HDF5, HDF4, Gzip, Zip, Bzip2), HTML error detection (disguised 401/404/500 pages), and MD5/SHA-256 verification.
- Private PyPI Registry & GitLab CI/CD: Complete CI/CD workflow with Astral
uvfor linting, testing, and automated publishing tohttps://registry.grasp-cloud.com/repository/grasp-pypi/. - MkDocs Documentation Suite & YAML Gallery: Complete documentation site in English with 22+ verified YAML configuration examples, built-in CLI commands, and no external private repository dependencies.
Changed¶
- Structured Logging Migration: Full migration to Loguru structured f-strings (
logger.info(f"...")) across all gatherer modules, eliminating%-style format strings and supporting thread-safe{extra[gatherer]}context injection. - Pydantic v2 Full Alignment: Upgraded parameter models to Pydantic v2
ConfigDictand@model_validator(mode="before")across all satellite and ground gatherers. - Test Suite Expansion: Full test coverage expanded to 225 tests running 100% offline in ~2s with 0 socket calls and 0 flake.
Fixed¶
- Pipeline Task Annotation
NameError: Fixed runtimeNameError: name 'datetime' is not definedingathering/pipeline.py:6when resolving type hints onTaskbuilders. - NASA CMR Caching Bug: Fixed unconditional
return Falseoverride inModisGathererandPaceGathererthat bypassed cache checking. - Duplicate Service Entry in
credentials.py: Removed duplicatecdseservice dictionary entry that caused key collision. - CLI Startup Latency: Eliminated eager module evaluation during CLI argument parsing.
- Inaccessible Repository Links: Removed dead GitLab URLs from documentation pages and MkDocs configuration.
[0.4.2] - 2026-08-23¶
Fixed¶
- The sdist shipped an unrunnable test suite:
MANIFEST.innow includes the whole suite (conftest.py), plusCHANGELOG.mdandexamples/. - The test suite depended on live APIs: An autouse fixture now pre-populates station validation lists, allowing offline testing with all sockets blocked.
[0.4.1] - 2026-08-23¶
Fixed¶
- ACTRIS Ares query string limit: Requests for large file lists are now batched properly to avoid HTTP 400 URI length limits.
[0.4.0] - 2026-08-23¶
Added¶
- Standardized cross-source parameter naming for ground-based sources (
station,product,start_date,end_date). - Unified credential resolution hierarchy and CLI
authcommands.