Skip to content

feat(core): move download_link property to an asset#2091

Merged
sbrunato merged 16 commits into
v5_download_link_assetfrom
feat-move-downloadlink-property-to-an-asset-2069
Jun 2, 2026
Merged

feat(core): move download_link property to an asset#2091
sbrunato merged 16 commits into
v5_download_link_assetfrom
feat-move-downloadlink-property-to-an-asset-2069

Conversation

@pdavid-cssopra

@pdavid-cssopra pdavid-cssopra commented Mar 16, 2026

Copy link
Copy Markdown
Collaborator

From #1929

Fixes #2069

Task

move eodag:download_link property to an asset when it is downloadable (do not keep it has a fake-value and when product download was performed from other assets). If the download_link is not required, remove it and do not add it to assets.

When downloading a whole product:

  • download only assets having archive in roles
  • if no asset has archive in roles, download all assets

Note:

  • do not keep assets that do not have href or order_link

Work on

  • update/complete asset mapping behaviour
  • isolate in separated code extra behaviour in asset config interpretation.
  • update provider configuration when find mappable extra data
  • update specific providers
  • centralize/deduplicate source on asset management if possible

@pdavid-cssopra pdavid-cssopra self-assigned this Mar 16, 2026
@pdavid-cssopra pdavid-cssopra added enhancement New feature or request refactoring labels Mar 16, 2026
@pdavid-cssopra
pdavid-cssopra force-pushed the feat-move-downloadlink-property-to-an-asset-2069 branch from 86d88b2 to 5c91ba2 Compare March 16, 2026 16:08
@github-actions

github-actions Bot commented Mar 16, 2026

Copy link
Copy Markdown
Contributor

Test Results

    4 files  ±  0      4 suites  ±0   4m 36s ⏱️ +14s
  866 tests + 70    866 ✅ + 70  0 💤 ±0  0 ❌ ±0 
3 514 runs  +280  3 512 ✅ +280  2 💤 ±0  0 ❌ ±0 

Results for commit c773d10. ± Comparison against base commit a23ccac.

♻️ This comment has been updated with latest results.

@eodag-bot

eodag-bot commented Mar 16, 2026

Copy link
Copy Markdown
Collaborator

badge

Code Coverage (Ubuntu)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         251      11  95.62%   104-115, 377, 644
config.py                                      305      24  92.13%   70-72, 75, 78, 81, 85, 89, 93-95, 583-585, 707-709, 728, 736, 766-771, 773
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/collection.py                              150       8  94.67%   176, 212, 215, 322, 361, 364, 382, 385
api/core.py                                    787      52  93.39%   266, 552, 600, 643, 683, 703, 744-749, 774, 858-877, 891, 897, 1050, 1055, 1154, 1193-1194, 1290-1291, 1317, 1348-1349, 1375, 1388, 1449-1450, 1467, 1481-1482, 1558, 1573-1576, 1688, 2075, 2197, 2285-2286
api/provider.py                                381      35  90.81%   186, 190-191, 316-337, 405, 521, 525-526, 531-534, 545, 621-631, 821-822, 870, 877, 908-911, 947-948, 956-957
api/search_result.py                           181      27  85.08%   111, 123, 133, 154, 203, 220, 320, 375-378, 397, 448, 453-454, 489-505, 507, 525-526, 532
api/product/__init__.py                         18       2  88.89%   57, 59
api/product/_assets.py                         134       4  97.01%   176, 311, 314-318
api/product/_product.py                        248      20  91.94%   189, 305-306, 324-325, 346, 434, 463, 577, 597, 620-623, 632-635, 689, 755, 767
api/product/metadata_mapping.py                813      67  91.76%   126-128, 223-228, 252, 310-311, 399, 420, 472-473, 510, 531-534, 557, 569-570, 611, 634, 664-669, 734-739, 751, 759, 795-808, 1013, 1188, 1197-1201, 1218-1223, 1356, 1379, 1388, 1410, 1415, 1467, 1539, 1567, 1593, 1607, 1632, 1678, 1747, 1822
api/product/drivers/__init__.py                 11       0  100.00%
api/product/drivers/base.py                     29       0  100.00%
api/product/drivers/generic.py                  11       0  100.00%
api/product/drivers/sentinel1.py                33       0  100.00%
api/product/drivers/sentinel2.py                33       0  100.00%
plugins/__init__.py                              0       0  100.00%
plugins/base.py                                 22       2  90.91%   48, 55
plugins/manager.py                             173      16  90.75%   102-107, 179, 201, 219-220, 232, 271-272, 372-375, 387-388
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                          101      34  66.34%   178-180, 210, 213-272
plugins/apis/usgs.py                           184      27  85.33%   137-138, 159, 265, 299, 341-343, 348, 376-377, 382, 412-419, 430-435, 457-463
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py             124      35  71.77%   52-54, 69-70, 142-149, 177-203, 226, 258-262, 279, 303, 319-320
plugins/authentication/base.py                  22       4  81.82%   45, 58, 81, 95
plugins/authentication/generic.py               16       3  81.25%   50, 55, 65
plugins/authentication/header.py                19       0  100.00%
plugins/authentication/keycloak.py              46       7  84.78%   153-156, 177-182
plugins/authentication/openid_connect.py       232      28  87.93%   91-92, 104-122, 169, 175-203, 211, 350-353, 379, 420
plugins/authentication/qsauth.py                34       1  97.06%   91
plugins/authentication/sas_auth.py              57       3  94.74%   68, 89, 135
plugins/authentication/token.py                128       9  92.97%   180, 217, 288-289, 339-343
plugins/authentication/token_exchange.py        36      14  61.11%   75, 93-121
plugins/crunch/__init__.py                       0       0  100.00%
plugins/crunch/base.py                          10       1  90.00%   43
plugins/crunch/filter_date.py                   59      14  76.27%   52-57, 69, 78, 87, 90, 100-102, 109-111, 118
plugins/crunch/filter_latest_intersect.py       54      39  27.78%   50-55, 68-115
plugins/crunch/filter_latest_tpl_name.py        31      20  35.48%   46-54, 64-95
plugins/crunch/filter_overlap.py                63      25  60.32%   62-65, 72-75, 81, 85, 89, 100-116, 131-157
plugins/crunch/filter_property.py               30       5  83.33%   56-61, 64-65
plugins/download/__init__.py                     0       0  100.00%
plugins/download/aws.py                        401      76  81.05%   270, 304, 353-356, 386-387, 395-399, 479-482, 522-524, 528, 559-560, 566-570, 601, 666-674, 738-833, 845-850, 888, 914, 959-961, 1013
plugins/download/base.py                       280      35  87.50%   133, 162, 309-310, 368-369, 411, 415-426, 440, 517-521, 551, 586-587, 612-621, 680, 701, 723, 731, 765
plugins/download/http.py                       564      80  85.82%   233, 275-278, 340-343, 346, 353-358, 376-391, 408, 423, 483, 518, 532, 546, 556-560, 576-581, 592, 611, 648-651, 672, 682, 689, 854, 886, 916-925, 961, 986-987, 1006-1011, 1020, 1035-1037, 1041, 1044, 1059-1060, 1144, 1196, 1238-1239, 1251, 1261, 1311-1312, 1342, 1362, 1403-1405, 1459-1460
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         318      21  93.40%   114, 118, 142-148, 205-208, 256, 288, 351, 372, 497, 547, 708-709, 735-736
plugins/search/build_search_result.py          505     102  79.80%   258-259, 295, 299, 319, 547-558, 573-575, 602-603, 698, 722, 724, 791, 799-803, 824, 834, 860, 905, 929, 957, 975-990, 1040, 1065, 1068, 1072, 1081, 1087, 1125-1146, 1187, 1214-1215, 1224-1233, 1300, 1314-1364, 1470-1471, 1515, 1524-1526, 1583, 1631-1641
plugins/search/cop_marine.py                   267      56  79.03%   56, 64-66, 76-77, 82, 87-88, 104, 106, 109, 175-176, 219, 243, 249, 253, 257, 268, 279-280, 293, 323-326, 332, 353, 357, 361, 365, 369-373, 379-382, 385-402, 419-422, 475-479, 484, 496
plugins/search/creodias_s3.py                   29       1  96.55%   59
plugins/search/csw.py                          112      87  22.32%   99-100, 104-105, 113-170, 176-189, 197-229, 247-288
plugins/search/qssearch.py                     813      90  88.93%   530-531, 554-555, 567-571, 786-792, 850, 946, 953, 1024, 1045, 1048-1049, 1067, 1076-1077, 1104, 1115-1116, 1176, 1185, 1190-1207, 1216, 1231, 1240-1243, 1253, 1274, 1352, 1375, 1448-1449, 1455, 1545, 1652-1656, 1722, 1725, 1737, 1751-1754, 1766, 1788-1800, 1808, 1868-1874, 1881, 1935, 1958, 1963-1964, 1979, 1985, 1995, 2085, 2089, 2100, 2124, 2137, 2145-2155, 2193-2197
plugins/search/stac_list_assets.py              25      10  60.00%   44-51, 75-85
plugins/search/static_stac_search.py            84      18  78.57%   99-127, 166-169, 182, 224
resources/__init__.py                            0       0  100.00%
resources/shp/__init__.py                        0       0  100.00%
types/__init__.py                              167      43  74.25%   58, 62, 71-75, 86-98, 126-128, 135-140, 216, 219, 257, 267-283, 288, 290, 312, 317, 325, 335
types/bbox.py                                   39      19  51.28%   46-61, 72-74, 85-87, 99-101, 113-115, 123
types/download_args.py                          10       0  100.00%
types/queryables.py                            112       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
types/stac_extensions.py                       114       1  99.12%   282
types/stac_metadata.py                         116      16  86.21%   92, 113-114, 147, 177-191, 200-207
utils/__init__.py                              608      45  92.60%   71, 206, 237-238, 247-273, 276, 291, 371-375, 450-454, 534, 574-575, 604, 982-985, 1026-1028, 1036, 1055-1056, 1085, 1103-1104, 1216, 1304, 1468, 1557, 1572, 1581, 1593, 1783
utils/cache.py                                  22       0  100.00%
utils/dates.py                                 113       4  96.46%   171, 329-331
utils/env.py                                     3       0  100.00%
utils/exceptions.py                             47       0  100.00%
utils/free_text_search.py                       65       2  96.92%   83, 91
utils/import_system.py                          28      19  32.14%   64-78, 89-99
utils/logging.py                                28       1  96.43%   41
utils/notebook.py                               44      23  47.73%   25-29, 36-41, 58-62, 72-78, 83-87
utils/repr.py                                   38       0  100.00%
utils/requests.py                               55      29  47.27%   51-52, 64, 85-96, 107-124, 128
utils/s3.py                                    239      13  94.56%   200-203, 245, 263, 489, 534, 539-540, 581, 656, 682
utils/stac_reader.py                           113      44  61.06%   63-85, 95-97, 101, 138, 154-159, 206-216, 226-256
TOTAL                                        10303    1396  86.45%

Diff against develop

Filename                                 Stmts    Miss  Cover
-------------------------------------  -------  ------  -------
api/core.py                                  0      -5  +0.63%
api/search_result.py                         0      +8  -4.42%
api/product/_assets.py                     +82       0  +4.70%
api/product/metadata_mapping.py            +22     +14  -1.54%
plugins/base.py                              0      -2  +9.09%
plugins/apis/ecmwf.py                        0     +26  -25.74%
plugins/apis/usgs.py                        +2      +2  -0.93%
plugins/download/http.py                     0      +3  -0.53%
plugins/search/base.py                    +122      +3  +2.58%
plugins/search/build_search_result.py       +1     +19  -3.73%
plugins/search/cop_marine.py                -1       0  -0.07%
plugins/search/qssearch.py                 -10      -4  +0.35%
utils/__init__.py                            0      +2  -0.33%
utils/s3.py                                 -1      +1  -0.44%
TOTAL                                     +217     +67  -0.37%

Results for commit: 1a81d2b

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@pdavid-cssopra
pdavid-cssopra force-pushed the feat-move-downloadlink-property-to-an-asset-2069 branch 2 times, most recently from 6061929 to 1a81d2b Compare March 17, 2026 10:42
Comment thread eodag/plugins/search/base.py
Comment thread eodag/plugins/search/base.py Outdated
Comment thread eodag/plugins/search/base.py Outdated
Comment thread eodag/plugins/search/base.py Outdated
Comment thread eodag/plugins/search/base.py Outdated
Comment thread eodag/plugins/search/base.py Outdated
Comment thread eodag/plugins/search/base.py Outdated
Comment thread eodag/plugins/search/base.py Outdated
Comment thread eodag/plugins/search/base.py Outdated
Comment thread eodag/plugins/search/base.py
@sbrunato
sbrunato marked this pull request as draft April 9, 2026 16:18
@sbrunato sbrunato closed this May 21, 2026
@sbrunato sbrunato reopened this May 21, 2026
@sbrunato

sbrunato commented May 21, 2026

Copy link
Copy Markdown
Collaborator

PR included in #2156

@sbrunato
sbrunato force-pushed the feat-move-downloadlink-property-to-an-asset-2069 branch 2 times, most recently from 422d842 to 9aa9943 Compare May 28, 2026 15:04
@github-actions

github-actions Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

badge

Code Coverage (Ubuntu)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         252      11  95.63%   105-116, 378, 645
config.py                                      306      24  92.16%   70-72, 75, 78, 81, 85, 89, 93-95, 587-589, 711-713, 732, 740, 770-775, 777
crunch.py                                        2       0  100.00%
api/__init__.py                                  0       0  100.00%
api/collection.py                              151       8  94.70%   177, 213, 216, 323, 362, 365, 383, 386
api/core.py                                    774      57  92.64%   263, 549, 597, 640, 680, 700, 741-746, 771, 855-874, 888, 894, 1047, 1052, 1151, 1190-1191, 1287-1288, 1314, 1345-1346, 1372, 1385, 1446-1447, 1478-1479, 1553-1558, 1570-1573, 1685, 1910, 2067, 2178, 2266-2267
api/provider.py                                382      40  89.53%   186, 190-191, 316-337, 405, 521, 525-526, 531-534, 545, 621-631, 821-822, 870, 877, 891, 914-917, 951-958, 962-963
api/search_result.py                           138      12  91.30%   111, 123, 133, 154, 208, 266, 278, 413, 468-471
api/product/__init__.py                          7       0  100.00%
api/product/_assets.py                         132       5  96.21%   75, 202, 340, 351-355
api/product/_product.py                        311      24  92.28%   200, 356, 382-385, 422, 441-442, 551, 580, 587, 626, 738, 781-784, 793-796, 850, 916, 928, 995
api/product/metadata_mapping.py                890      78  91.24%   126-128, 225-230, 254, 313-314, 352-353, 394, 415, 478-479, 516, 537-540, 563, 575-576, 617, 640, 665-668, 670-675, 740-745, 754, 760, 776, 784, 815, 820-833, 1037, 1190, 1212, 1221-1225, 1243-1247, 1380, 1403, 1412, 1434, 1439, 1491, 1563, 1580, 1592, 1618, 1632, 1657, 1703, 1754-1755, 1772, 1847, 1882
api/product/drivers/__init__.py                 11       0  100.00%
api/product/drivers/base.py                     32       0  100.00%
api/product/drivers/generic.py                  11       0  100.00%
api/product/drivers/sentinel1.py                33       0  100.00%
api/product/drivers/sentinel2.py                33       0  100.00%
plugins/__init__.py                              0       0  100.00%
plugins/base.py                                 25       2  92.00%   48, 55
plugins/manager.py                             173      16  90.75%   102-107, 179, 201, 219-220, 232, 271-272, 372-375, 387-388
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                           95       8  91.58%   163-165, 213-214, 240-242
plugins/apis/usgs.py                           179      27  84.92%   138-139, 160, 248, 281, 323-325, 330, 358-359, 364, 394-401, 412-417, 439-445
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py             124      35  71.77%   52-54, 69-70, 142-149, 177-203, 226, 258-262, 279, 303, 319-320
plugins/authentication/base.py                  22       4  81.82%   45, 58, 81, 95
plugins/authentication/eoiam.py                 98       1  98.98%   170
plugins/authentication/generic.py               16       3  81.25%   50, 55, 65
plugins/authentication/header.py                19       0  100.00%
plugins/authentication/keycloak.py              46       4  91.30%   154, 177-182
plugins/authentication/openid_connect.py       235      19  91.91%   98-99, 107-125, 172, 180, 194, 214, 353-356, 382, 423
plugins/authentication/qsauth.py                34       1  97.06%   91
plugins/authentication/sas_auth.py              57       3  94.74%   68, 89, 135
plugins/authentication/token.py                141       9  93.62%   192, 229, 309-310, 358-362
plugins/authentication/token_exchange.py        36      14  61.11%   75, 93-121
plugins/crunch/__init__.py                       6       0  100.00%
plugins/crunch/base.py                          12       0  100.00%
plugins/crunch/filter_date.py                   47       0  100.00%
plugins/crunch/filter_latest_intersect.py       52       6  88.46%   87-88, 95-96, 98-102
plugins/crunch/filter_latest_tpl_name.py        35       0  100.00%
plugins/crunch/filter_overlap.py                66      10  84.85%   118-121, 137-163
plugins/crunch/filter_property.py               30       2  93.33%   81-84
plugins/download/__init__.py                     4       0  100.00%
plugins/download/aws.py                        402      76  81.09%   271, 305, 354-357, 387-388, 396-400, 480-483, 523-525, 529, 560-561, 567-571, 602, 667-675, 739-834, 846-851, 889, 915, 960-962, 1014
plugins/download/base.py                       290      24  91.72%   135, 165, 381-382, 426, 460, 537-541, 571, 606-607, 632-641, 700, 721, 743, 751
plugins/download/http.py                       575      74  87.13%   235, 277-280, 342-345, 348, 355-360, 391-393, 410, 425, 486, 521, 535, 549, 559-563, 579-584, 595, 614, 651-654, 675, 685, 692, 748, 857, 889, 921-930, 966, 1011-1016, 1025, 1040-1042, 1046, 1049, 1064-1065, 1075, 1150, 1202, 1244-1245, 1257, 1267, 1323-1324, 1354, 1392, 1472-1473
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         249      17  93.17%   111, 115, 139-145, 154, 216-219, 251, 358, 379, 505, 558
plugins/search/build_search_result.py          522      90  82.76%   137-138, 174, 178, 198, 257, 422-433, 443-445, 512-513, 562, 574-576, 600, 602, 667, 675-679, 699, 709, 735, 780, 805, 833, 851-866, 916, 941, 944, 948, 957, 963, 1001-1022, 1063, 1090-1091, 1100-1110, 1203, 1218, 1224, 1243-1252, 1373-1374, 1418, 1427-1429, 1489, 1537-1547
plugins/search/cop_ghsl.py                     407      85  79.12%   73-74, 109-110, 174, 176, 218, 249-252, 298, 314, 317, 353, 357-362, 377, 399, 420, 454, 470, 505, 520, 534-535, 549-551, 558, 562-564, 567-570, 588-648, 659-674
plugins/search/cop_marine.py                   294      65  77.89%   55, 63-65, 81, 103, 105, 108, 174-175, 193, 226, 232, 236, 258-259, 272, 304-307, 313, 323, 336, 344, 350-354, 360-363, 369-422, 438-441, 491, 503, 547-548
plugins/search/creodias_s3.py                   29       1  96.55%   59
plugins/search/csw.py                          112      87  22.32%   99-100, 104-105, 113-170, 176-189, 197-229, 247-288
plugins/search/eumetsat_ds.py                   25       0  100.00%
plugins/search/geodes.py                        73       0  100.00%
plugins/search/qssearch.py                     855      97  88.65%   382, 542-543, 566-567, 579-583, 814-820, 878, 944, 974, 981, 1052, 1073, 1076-1077, 1095, 1104-1105, 1132, 1204, 1213, 1218-1235, 1244, 1259, 1268, 1281, 1303, 1383, 1406, 1421, 1494-1495, 1497-1499, 1501-1502, 1589, 1596, 1704-1708, 1779, 1782, 1786-1787, 1808-1811, 1823, 1845-1857, 1865, 1900-1902, 1925-1931, 1938, 1976, 1992, 2015, 2020-2021, 2036, 2042, 2056, 2157, 2161, 2172, 2196, 2209, 2217-2227
plugins/search/stac_list_assets.py              25      10  60.00%   44-51, 75-85
plugins/search/static_stac_search.py            84      17  79.76%   99-127, 166-169, 182
resources/__init__.py                            0       0  100.00%
resources/shp/__init__.py                        0       0  100.00%
types/__init__.py                              180      43  76.11%   58, 71-75, 86-98, 126-128, 135-140, 155, 165, 247, 285, 295-311, 316, 318, 340, 345, 353, 363
types/bbox.py                                   39      19  51.28%   46-61, 72-74, 85-87, 99-101, 113-115, 123
types/download_args.py                          10       0  100.00%
types/queryables.py                            113       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
types/stac_extensions.py                       158       4  97.47%   455-461, 640
types/stac_metadata.py                         159      22  86.16%   98, 120, 153, 186-188, 202-216, 225-232, 259-262
utils/__init__.py                              636      47  92.61%   60, 199, 230-231, 240-266, 269, 284, 364-368, 443-447, 527, 567-568, 597, 975-978, 1029, 1048-1049, 1078, 1096-1097, 1254, 1256, 1264, 1268, 1274, 1276, 1278, 1284, 1286, 1384, 1548, 1788
utils/cache.py                                  22       0  100.00%
utils/dates.py                                 191       1  99.48%   182
utils/deserialize.py                            73      10  86.30%   53, 55, 103, 108-109, 145, 159, 181-182, 188
utils/env.py                                     3       0  100.00%
utils/exceptions.py                             58       0  100.00%
utils/free_text_search.py                       65       2  96.92%   83, 91
utils/import_system.py                          28      19  32.14%   64-78, 89-99
utils/logging.py                                31       1  96.77%   41
utils/notebook.py                               44      23  47.73%   25-29, 36-41, 58-62, 72-78, 83-87
utils/repr.py                                   38       0  100.00%
utils/requests.py                               55      29  47.27%   51-52, 64, 85-96, 107-124, 128
utils/s3.py                                    257      12  95.33%   200-203, 245, 263, 489, 540-541, 609, 684, 710
utils/stac_reader.py                           113      44  61.06%   63-85, 95-97, 101, 138, 154-159, 206-216, 226-256
utils/streamresponse.py                         82       7  91.46%   24-26, 63, 124, 133, 145
TOTAL                                        11427    1368  88.03%

Diff against develop

Filename                                 Stmts    Miss  Cover
-------------------------------------  -------  ------  --------
api/product/_assets.py                     +76      +1  +3.35%
api/product/metadata_mapping.py            +23     +15  -1.49%
plugins/apis/usgs.py                        +4      +2  -0.79%
plugins/search/base.py                     +50      -2  +2.72%
plugins/search/build_search_result.py       +3      +1  -0.09%
plugins/search/cop_marine.py                -3       0  -0.22%
plugins/search/geodes.py                    +9       0  +100.00%
plugins/search/qssearch.py                 -14      -2  +0.04%
utils/__init__.py                            0      -1  +0.16%
utils/s3.py                                 +3       0  +0.05%
TOTAL                                     +151     +14  +0.04%

Results for commit: c773d10

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@github-actions

github-actions Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

badge

Code Coverage (Windows)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         252      11  95.63%   105-116, 378, 645
config.py                                      306      24  92.16%   70-72, 75, 78, 81, 85, 89, 93-95, 587-589, 711-713, 732, 740, 770-775, 777
crunch.py                                        2       0  100.00%
api/__init__.py                                  0       0  100.00%
api/collection.py                              151       8  94.70%   177, 213, 216, 323, 362, 365, 383, 386
api/core.py                                    774      57  92.64%   263, 549, 597, 640, 680, 700, 741-746, 771, 855-874, 888, 894, 1047, 1052, 1151, 1190-1191, 1287-1288, 1314, 1345-1346, 1372, 1385, 1446-1447, 1478-1479, 1553-1558, 1570-1573, 1685, 1910, 2067, 2178, 2266-2267
api/provider.py                                382      40  89.53%   186, 190-191, 316-337, 405, 521, 525-526, 531-534, 545, 621-631, 821-822, 870, 877, 891, 914-917, 951-958, 962-963
api/search_result.py                           138      12  91.30%   111, 123, 133, 154, 208, 266, 278, 413, 468-471
api/product/__init__.py                          7       0  100.00%
api/product/_assets.py                         132       5  96.21%   75, 202, 340, 351-355
api/product/_product.py                        311      24  92.28%   200, 356, 382-385, 422, 441-442, 551, 580, 587, 626, 738, 781-784, 793-796, 850, 916, 928, 995
api/product/metadata_mapping.py                890      78  91.24%   126-128, 225-230, 254, 313-314, 352-353, 394, 415, 478-479, 516, 537-540, 563, 575-576, 617, 640, 665-668, 670-675, 740-745, 754, 760, 776, 784, 815, 820-833, 1037, 1190, 1212, 1221-1225, 1243-1247, 1380, 1403, 1412, 1434, 1439, 1491, 1563, 1580, 1592, 1618, 1632, 1657, 1703, 1754-1755, 1772, 1847, 1882
api/product/drivers/__init__.py                 11       0  100.00%
api/product/drivers/base.py                     32       0  100.00%
api/product/drivers/generic.py                  11       0  100.00%
api/product/drivers/sentinel1.py                33       0  100.00%
api/product/drivers/sentinel2.py                33       0  100.00%
plugins/__init__.py                              0       0  100.00%
plugins/base.py                                 25       2  92.00%   48, 55
plugins/manager.py                             173      16  90.75%   102-107, 179, 201, 219-220, 232, 271-272, 372-375, 387-388
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                           95       8  91.58%   163-165, 213-214, 240-242
plugins/apis/usgs.py                           179      27  84.92%   138-139, 160, 248, 281, 323-325, 330, 358-359, 364, 394-401, 412-417, 439-445
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py             124      35  71.77%   52-54, 69-70, 142-149, 177-203, 226, 258-262, 279, 303, 319-320
plugins/authentication/base.py                  22       4  81.82%   45, 58, 81, 95
plugins/authentication/eoiam.py                 98       1  98.98%   170
plugins/authentication/generic.py               16       3  81.25%   50, 55, 65
plugins/authentication/header.py                19       0  100.00%
plugins/authentication/keycloak.py              46       4  91.30%   154, 177-182
plugins/authentication/openid_connect.py       235      19  91.91%   98-99, 107-125, 172, 180, 194, 214, 353-356, 382, 423
plugins/authentication/qsauth.py                34       1  97.06%   91
plugins/authentication/sas_auth.py              57       3  94.74%   68, 89, 135
plugins/authentication/token.py                141       9  93.62%   192, 229, 309-310, 358-362
plugins/authentication/token_exchange.py        36      14  61.11%   75, 93-121
plugins/crunch/__init__.py                       6       0  100.00%
plugins/crunch/base.py                          12       0  100.00%
plugins/crunch/filter_date.py                   47       0  100.00%
plugins/crunch/filter_latest_intersect.py       52       6  88.46%   87-88, 95-96, 98-102
plugins/crunch/filter_latest_tpl_name.py        35       0  100.00%
plugins/crunch/filter_overlap.py                66      10  84.85%   118-121, 137-163
plugins/crunch/filter_property.py               30       2  93.33%   81-84
plugins/download/__init__.py                     4       0  100.00%
plugins/download/aws.py                        402      76  81.09%   271, 305, 354-357, 387-388, 396-400, 480-483, 523-525, 529, 560-561, 567-571, 602, 667-675, 739-834, 846-851, 889, 915, 960-962, 1014
plugins/download/base.py                       290      26  91.03%   135, 165, 240-242, 381-382, 426, 460, 537-541, 571, 606-607, 632-641, 700, 721, 743, 751
plugins/download/http.py                       575      74  87.13%   235, 277-280, 342-345, 348, 355-360, 391-393, 410, 425, 486, 521, 535, 549, 559-563, 579-584, 595, 614, 651-654, 675, 685, 692, 748, 857, 889, 921-930, 966, 1011-1016, 1025, 1040-1042, 1046, 1049, 1064-1065, 1075, 1150, 1202, 1244-1245, 1257, 1267, 1323-1324, 1354, 1392, 1472-1473
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         249      17  93.17%   111, 115, 139-145, 154, 216-219, 251, 358, 379, 505, 558
plugins/search/build_search_result.py          522      90  82.76%   137-138, 174, 178, 198, 257, 422-433, 443-445, 512-513, 562, 574-576, 600, 602, 667, 675-679, 699, 709, 735, 780, 805, 833, 851-866, 916, 941, 944, 948, 957, 963, 1001-1022, 1063, 1090-1091, 1100-1110, 1203, 1218, 1224, 1243-1252, 1373-1374, 1418, 1427-1429, 1489, 1537-1547
plugins/search/cop_ghsl.py                     407      85  79.12%   73-74, 109-110, 174, 176, 218, 249-252, 298, 314, 317, 353, 357-362, 377, 399, 420, 454, 470, 505, 520, 534-535, 549-551, 558, 562-564, 567-570, 588-648, 659-674
plugins/search/cop_marine.py                   294      65  77.89%   55, 63-65, 81, 103, 105, 108, 174-175, 193, 226, 232, 236, 258-259, 272, 304-307, 313, 323, 336, 344, 350-354, 360-363, 369-422, 438-441, 491, 503, 547-548
plugins/search/creodias_s3.py                   29       1  96.55%   59
plugins/search/csw.py                          112      87  22.32%   99-100, 104-105, 113-170, 176-189, 197-229, 247-288
plugins/search/eumetsat_ds.py                   25       0  100.00%
plugins/search/geodes.py                        73       0  100.00%
plugins/search/qssearch.py                     855      97  88.65%   382, 542-543, 566-567, 579-583, 814-820, 878, 944, 974, 981, 1052, 1073, 1076-1077, 1095, 1104-1105, 1132, 1204, 1213, 1218-1235, 1244, 1259, 1268, 1281, 1303, 1383, 1406, 1421, 1494-1495, 1497-1499, 1501-1502, 1589, 1596, 1704-1708, 1779, 1782, 1786-1787, 1808-1811, 1823, 1845-1857, 1865, 1900-1902, 1925-1931, 1938, 1976, 1992, 2015, 2020-2021, 2036, 2042, 2056, 2157, 2161, 2172, 2196, 2209, 2217-2227
plugins/search/stac_list_assets.py              25      10  60.00%   44-51, 75-85
plugins/search/static_stac_search.py            84      17  79.76%   99-127, 166-169, 182
resources/__init__.py                            0       0  100.00%
resources/shp/__init__.py                        0       0  100.00%
types/__init__.py                              180      43  76.11%   58, 71-75, 86-98, 126-128, 135-140, 155, 165, 247, 285, 295-311, 316, 318, 340, 345, 353, 363
types/bbox.py                                   39      19  51.28%   46-61, 72-74, 85-87, 99-101, 113-115, 123
types/download_args.py                          10       0  100.00%
types/queryables.py                            113       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
types/stac_extensions.py                       158       4  97.47%   455-461, 640
types/stac_metadata.py                         159      22  86.16%   98, 120, 153, 186-188, 202-216, 225-232, 259-262
utils/__init__.py                              636      47  92.61%   60, 199, 230-231, 240-266, 269, 284, 364-368, 443-447, 527, 567-568, 597, 975-978, 1029, 1048-1049, 1078, 1096-1097, 1254, 1256, 1264, 1268, 1274, 1276, 1278, 1284, 1286, 1384, 1548, 1788
utils/cache.py                                  22       0  100.00%
utils/dates.py                                 191       1  99.48%   182
utils/deserialize.py                            73      10  86.30%   53, 55, 103, 108-109, 145, 159, 181-182, 188
utils/env.py                                     3       0  100.00%
utils/exceptions.py                             58       0  100.00%
utils/free_text_search.py                       65       2  96.92%   83, 91
utils/import_system.py                          28      19  32.14%   64-78, 89-99
utils/logging.py                                31       1  96.77%   41
utils/notebook.py                               44      23  47.73%   25-29, 36-41, 58-62, 72-78, 83-87
utils/repr.py                                   38       0  100.00%
utils/requests.py                               55      29  47.27%   51-52, 64, 85-96, 107-124, 128
utils/s3.py                                    257      12  95.33%   200-203, 245, 263, 489, 540-541, 609, 684, 710
utils/stac_reader.py                           113      44  61.06%   63-85, 95-97, 101, 138, 154-159, 206-216, 226-256
utils/streamresponse.py                         82       7  91.46%   24-26, 63, 124, 133, 145
TOTAL                                        11427    1370  88.01%

Diff against develop

Filename                                 Stmts    Miss  Cover
-------------------------------------  -------  ------  --------
api/product/_assets.py                     +76      +1  +3.35%
api/product/metadata_mapping.py            +23     +15  -1.49%
plugins/apis/usgs.py                        +4      +2  -0.79%
plugins/search/base.py                     +50      -2  +2.72%
plugins/search/build_search_result.py       +3      +1  -0.09%
plugins/search/cop_marine.py                -3       0  -0.22%
plugins/search/geodes.py                    +9       0  +100.00%
plugins/search/qssearch.py                 -14      -2  +0.04%
utils/__init__.py                            0      -1  +0.16%
utils/s3.py                                 +3       0  +0.05%
TOTAL                                     +151     +14  +0.04%

Results for commit: c773d10

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@sbrunato
sbrunato force-pushed the feat-move-downloadlink-property-to-an-asset-2069 branch from 960a09b to a6b2171 Compare June 2, 2026 12:57
@sbrunato
sbrunato marked this pull request as ready for review June 2, 2026 14:03
@sbrunato
sbrunato changed the base branch from develop to v5_download_link_asset June 2, 2026 14:06
@sbrunato sbrunato changed the title feat(asset): move download_link property to an asset #2029 feat(core): move download_link property to an asset #2029 Jun 2, 2026
@sbrunato sbrunato changed the title feat(core): move download_link property to an asset #2029 feat(core): move download_link property to an asset Jun 2, 2026
@sbrunato sbrunato linked an issue Jun 2, 2026 that may be closed by this pull request
@sbrunato
sbrunato merged commit 510ebcb into v5_download_link_asset Jun 2, 2026
16 checks passed
@sbrunato
sbrunato deleted the feat-move-downloadlink-property-to-an-asset-2069 branch June 2, 2026 14:14
@sbrunato sbrunato added this to the 5.0.0.dev milestone Jun 2, 2026
sbrunato added a commit that referenced this pull request Jun 2, 2026
Co-authored-by: Sylvain Brunato <sylvain.brunato@c-s.fr>
sbrunato added a commit that referenced this pull request Jun 4, 2026
Co-authored-by: Sylvain Brunato <sylvain.brunato@c-s.fr>
sbrunato added a commit that referenced this pull request Jun 18, 2026
Co-authored-by: Sylvain Brunato <sylvain.brunato@c-s.fr>
sbrunato added a commit that referenced this pull request Jun 24, 2026
Co-authored-by: Sylvain Brunato <sylvain.brunato@c-s.fr>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request refactoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

move download_link property to an asset

3 participants