Skip to content

feat: add zarr store - #89

Draft
cauriol wants to merge 29 commits into
mainfrom
zarr_store
Draft

feat: add zarr store#89
cauriol wants to merge 29 commits into
mainfrom
zarr_store

Conversation

@cauriol

@cauriol cauriol commented Jan 28, 2026

Copy link
Copy Markdown
Contributor

This PR improves the way Zarr stores are exposed and accessed through the /data endpoint, allowing Zarr data to be accessed in a cloud-native way.

  • Zarr store exposure via HTTP filesystem:
    The endpoint /data/{federation_backend}/{collection_id}/{item_id}/zarr exposes the Zarr store as an HTTP filesystem, follows the standard Zarr + fsspec access pattern. Clients can access the data remotely using common libraries such as zarr, xarray, or dask without downloading the full store.
    Exemple usage:
# pip install requests xarray zarr fsspec requests aiohttp dask
import xarray as xr

ds = xr.open_zarr(
    "https://<api-url>/data/<backend>/<collection>/<item>/{asset_name}.zarr",
    engine="zarr",
    chunks={},  
    decode_times=False,
    storage_options={
        "client_kwargs": {"trust_env": False},
    }
)

print(ds)
  • the downloadLink is not shown for these items because in general they should not be downloaded as a whole

@cauriol cauriol self-assigned this Jan 28, 2026
@github-actions

github-actions Bot commented Jan 28, 2026

Copy link
Copy Markdown
Contributor

Test Results

  4 files  ± 0    4 suites  ±0   1m 28s ⏱️ -1s
117 tests + 3  117 ✅ + 3  0 💤 ±0  0 ❌ ±0 
468 runs  +12  468 ✅ +12  0 💤 ±0  0 ❌ ±0 

Results for commit 7d65e4c. ± Comparison against base commit 0c2621c.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Jan 28, 2026

Copy link
Copy Markdown
Contributor

badge

Code Coverage

Details
Filename                                 Stmts    Miss  Cover    Missing
-------------------------------------  -------  ------  -------  ------------------------------------------------------------------------------------------------------------------------
eodag/__init__.py                            0       0  100.00%
eodag/app.py                                75      15  80.00%   153, 167-174, 185-187, 243-255, 259
eodag/client.py                             25       0  100.00%
eodag/config.py                             19       0  100.00%
eodag/constants.py                           5       0  100.00%
eodag/core.py                              309      27  91.26%   135-136, 146, 290-291, 381, 509-510, 529, 560, 646, 662-666, 680-684, 686-690, 695, 708, 718-720, 723-724, 734, 737, 753
eodag/cql_evaluate.py                       48      18  62.50%   48, 53, 58, 75, 78, 81, 86-99, 105
eodag/dag.py                                57       0  100.00%
eodag/errors.py                             94      12  87.23%   143, 160-163, 179, 202-212
eodag/logs.py                               62       9  85.48%   40-49, 105
eodag/middlewares.py                        32       2  93.75%   20, 24
eodag/telemetry.py                          44       0  100.00%
eodag/utils.py                              41      10  75.61%   44, 69, 72-73, 86, 90-98, 134
eodag/eodag_types/__init__.py                0       0  100.00%
eodag/eodag_types/queryables.py             42       8  80.95%   46, 50-51, 61, 77-81
eodag/eodag_types/search.py                 25      25  0.00%    20-69
eodag/extensions/collection_order.py        73       1  98.63%   106
eodag/extensions/data_download.py          147      46  68.71%   67-70, 80-92, 113, 144-145, 152, 167-174, 178-180, 183-184, 191-223, 235
eodag/extensions/ecmwf.py                   69       0  100.00%
eodag/extensions/filter.py                  96       9  90.62%   182-183, 275-276, 296, 304, 310, 328-330
eodag/extensions/offset_pagination.py       12       0  100.00%
eodag/extensions/stac.py                   167       3  98.20%   348-350
eodag/models/__init__.py                     0       0  100.00%
eodag/models/item.py                        85       6  92.94%   50-53, 55, 69
eodag/models/links.py                      147      13  91.16%   39, 93-95, 201, 219, 251, 298, 347-358
eodag/models/stac_metadata.py              104       6  94.23%   82, 150, 163-170
TOTAL                                     1778     210  88.19%

Diff against main

Filename                             Stmts    Miss  Cover
---------------------------------  -------  ------  -------
eodag/extensions/data_download.py      +26      +4  +3.42%
TOTAL                                  +26      +4  -0.05%

Results for commit: d74acfb

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@cauriol
cauriol force-pushed the zarr_store branch 3 times, most recently from 6b4ae98 to ab0855e Compare February 5, 2026 14:22
@cauriol
cauriol marked this pull request as ready for review February 5, 2026 15:33
@cauriol
cauriol requested a review from jlahovnik February 5, 2026 15:33
@cauriol
cauriol marked this pull request as draft February 9, 2026 17:02
@cauriol
cauriol marked this pull request as ready for review February 10, 2026 15:59
jlahovnik
jlahovnik previously approved these changes Feb 10, 2026
@cauriol
cauriol marked this pull request as draft February 11, 2026 11:37
@cauriol

cauriol commented Feb 18, 2026

Copy link
Copy Markdown
Contributor Author

Currently, we only have DanubeHis and no other provider supporting Zarr, so it is difficult to properly test this part.

I will continue once we add another provider that supports Zarr.

The Zarr endpoint still needs to be implemented, along with the related tests.

@alambare

Copy link
Copy Markdown
Collaborator

I do not understand why fsspec, aiohttp and requests dependencies are needed here.
All the logic must be handled by EODAG. stac-fastapi-eodag is only a wrapper to expose EODAG as a webserver.

@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

badge

Code Coverage

Details
Filename                                 Stmts    Miss  Cover    Missing
-------------------------------------  -------  ------  -------  ------------------------------------------------------------------------------------------------------------------------
eodag/__init__.py                            0       0  100.00%
eodag/app.py                                73      15  79.45%   122, 136-143, 154-156, 212-224, 228
eodag/client.py                             25       0  100.00%
eodag/config.py                             19       0  100.00%
eodag/constants.py                           5       0  100.00%
eodag/core.py                              318      27  91.51%   136-137, 147, 293-294, 384, 518-519, 538, 581, 667, 683-687, 701-705, 707-711, 716, 729, 739-741, 744-745, 755, 758, 774
eodag/cql_evaluate.py                       48      18  62.50%   48, 53, 58, 75, 78, 81, 86-99, 105
eodag/dag.py                                57       0  100.00%
eodag/errors.py                             94       7  92.55%   145, 162-165, 181, 205
eodag/logs.py                               62       9  85.48%   40-49, 105
eodag/middlewares.py                        32       2  93.75%   20, 24
eodag/telemetry.py                          44       0  100.00%
eodag/utils.py                              41      10  75.61%   44, 69, 72-73, 86, 90-98, 134
eodag/eodag_types/__init__.py                0       0  100.00%
eodag/eodag_types/queryables.py             42       8  80.95%   46, 50-51, 61, 77-81
eodag/eodag_types/search.py                 25      25  0.00%    20-69
eodag/extensions/collection_order.py        73       1  98.63%   106
eodag/extensions/data_download.py          149      45  69.80%   64-67, 77-89, 110, 141-142, 149, 163-170, 174-176, 179-180, 187-219
eodag/extensions/filter.py                 106      10  90.57%   185-186, 228, 286-287, 307, 315, 321, 339-341
eodag/extensions/offset_pagination.py       12       0  100.00%
eodag/models/__init__.py                     0       0  100.00%
eodag/models/item.py                        82       6  92.68%   49-52, 54, 67
eodag/models/links.py                      148      13  91.22%   39, 93-95, 201, 219, 251, 299, 348-359
eodag/models/stac_metadata.py                5       0  100.00%
TOTAL                                     1460     196  86.58%

Diff against main

Filename                             Stmts    Miss  Cover
---------------------------------  -------  ------  -------
eodag/extensions/data_download.py      +28      +3  +4.51%
TOTAL                                  +28      +3  +0.06%

Results for commit: 7d65e4c

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@jlahovnik

Copy link
Copy Markdown
Collaborator

requires changes from CS-SI/eodag#2112

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants