Skip to content

feat(providers): add cop_ghsl provider#1876

Open
jlahovnik wants to merge 36 commits intodevelopfrom
cop_ghs-provider
Open

feat(providers): add cop_ghsl provider#1876
jlahovnik wants to merge 36 commits intodevelopfrom
cop_ghs-provider

Conversation

@jlahovnik
Copy link
Copy Markdown
Collaborator

@jlahovnik jlahovnik commented Oct 9, 2025

Data from Global Human Settlement Layer is available via the new provider cop_ghsl:

  • a new search plugin has been created
  • several new collections have been added
  • for download HTTPDownload is used

@jlahovnik jlahovnik marked this pull request as draft October 9, 2025 08:27
@jlahovnik jlahovnik self-assigned this Oct 9, 2025
@eodag-bot
Copy link
Copy Markdown
Collaborator

eodag-bot commented Oct 9, 2025

badge

Code Coverage (Ubuntu)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         244      10  95.90%   103-114, 622
config.py                                      459      35  92.37%   80-82, 85, 88, 91, 95, 99, 103-105, 176, 187, 204-205, 762-764, 888-891, 935-936, 945-946, 980, 1060, 1081, 1089, 1119-1124, 1126
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/collection.py                              123       7  94.31%   167, 203, 206, 296, 299, 317, 320
api/core.py                                    776      36  95.36%   347, 612, 643, 685-688, 726, 770, 804, 849-854, 879, 995, 1244, 1381, 1424, 1437, 1504, 1518-1519, 1595-1600, 1612-1615, 1948, 2188, 2251-2252, 2281-2282
api/search_result.py                           181      19  89.50%   104, 113, 120, 134, 178, 195, 292, 347-350, 420, 425-426, 460, 474, 497-498, 504
api/product/__init__.py                         18       2  88.89%   60, 62
api/product/_assets.py                          52       5  90.38%   97, 183, 191, 194-198
api/product/_product.py                        210      17  91.90%   171, 240-241, 259-260, 366, 393, 494, 514, 538-541, 550-553, 600
api/product/metadata_mapping.py                787      53  93.27%   125-127, 220-225, 246, 304-305, 393, 414, 466-467, 504, 525-528, 551, 563-564, 605, 628, 658-663, 728-733, 745, 753, 985, 1160, 1169-1173, 1190-1195, 1328, 1351, 1360, 1382, 1387, 1439, 1511, 1532, 1558, 1572, 1597, 1643, 1712, 1784
api/product/drivers/__init__.py                 11       0  100.00%
api/product/drivers/base.py                     23       0  100.00%
api/product/drivers/generic.py                   7       0  100.00%
api/product/drivers/sentinel1.py                15       0  100.00%
api/product/drivers/sentinel2.py                15       0  100.00%
plugins/__init__.py                              0       0  100.00%
plugins/base.py                                 22       4  81.82%   48, 55, 68-69
plugins/manager.py                             173      18  89.60%   105-110, 145-150, 154, 192, 214, 242, 281-282, 382-385, 397-398
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                          103      10  90.29%   177-179, 226-227, 253-255, 309-310
plugins/apis/usgs.py                           184      26  85.87%   160, 266, 300, 341-343, 348, 376-377, 382, 412-419, 430-435, 457-463, 494
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, 289-290, 340-344
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       47      33  29.79%   49-54, 67-113
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%   55-60, 63-64
plugins/download/__init__.py                     0       0  100.00%
plugins/download/aws.py                        381      71  81.36%   267, 301, 339-342, 362-366, 461-463, 467, 498-499, 505-509, 540, 605-613, 677-770, 781-786, 824, 850, 895-897, 949, 1129
plugins/download/base.py                       260      35  86.54%   129, 158, 305-306, 364-365, 407, 411-422, 436, 504-508, 538-539, 564-572, 574-578, 628, 649, 671, 679
plugins/download/http.py                       545      77  85.87%   238, 280-283, 345-348, 351, 358-363, 394-396, 413, 428, 486, 521, 535, 549, 557-561, 577-582, 593, 611, 647-650, 671, 681, 688, 708, 843, 875, 905-914, 950, 975-976, 995-1000, 1009, 1024-1026, 1030, 1033, 1048-1049, 1125-1126, 1130, 1182, 1228-1229, 1235, 1245, 1271, 1306, 1326, 1363-1365
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         189      15  92.06%   107, 111, 135-141, 294, 315, 440, 487, 509-512, 521
plugins/search/build_search_result.py          522      81  84.48%   249-250, 286, 289, 327, 330, 361-363, 606-617, 747, 771, 773, 840, 848-852, 873, 885, 911, 956, 972, 1006-1021, 1069, 1094, 1097, 1101, 1141-1161, 1202, 1229-1230, 1239-1248, 1312, 1327, 1333, 1352-1361, 1482-1483, 1527, 1536-1538, 1595, 1643-1653
plugins/search/cop_ghsl.py                     388      84  78.35%   53-54, 85-86, 123-126, 148, 150, 196, 227-230, 274, 291, 294, 324, 328-333, 365, 386, 417, 433, 465, 480, 495-496, 510-512, 517, 521-523, 526-529, 546-599, 609-624
plugins/search/cop_marine.py                   267      56  79.03%   57, 65-67, 77-78, 83, 88-89, 105, 107, 110, 176-177, 220, 236, 242, 246, 250, 261, 272-273, 281, 318-321, 327, 348, 352, 356, 360, 364-368, 374-377, 380-397, 414-417, 470-474, 479, 491
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                     820      94  88.54%   415-416, 533-534, 557-558, 570-574, 789-795, 853, 949, 956, 1027, 1048, 1051-1052, 1070, 1079-1080, 1107, 1181, 1190, 1195-1212, 1221, 1236, 1245-1248, 1258, 1286, 1369, 1392, 1465-1466, 1472, 1562, 1669-1673, 1739, 1742, 1746-1747, 1768-1771, 1783, 1805-1817, 1824, 1859-1861, 1884-1890, 1897, 1951, 1974, 1979-1980, 1995, 2001, 2011, 2095, 2099, 2110, 2134, 2147, 2155-2165, 2202-2206
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, 171-174, 187, 229
types/__init__.py                              161      44  72.67%   67, 71, 80-84, 95-107, 135-137, 144-149, 194, 213, 216, 254, 264-280, 285, 287, 309, 314, 322, 332
types/bbox.py                                   43      19  55.81%   46-61, 72-74, 85-87, 99-101, 113-115, 123
types/download_args.py                           9       0  100.00%
types/queryables.py                             84       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
utils/__init__.py                              596      45  92.45%   71, 168, 201-202, 211-237, 240, 255, 335-339, 414-418, 498, 538-539, 568, 943-946, 954-955, 997, 1016-1017, 1046, 1064-1065, 1177, 1244, 1408, 1497, 1512, 1521, 1533, 1708
utils/cache.py                                  22       0  100.00%
utils/dates.py                                  57       4  92.98%   63-65, 138
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                                    240      12  95.00%   200-203, 245, 263, 489, 537-538, 585, 660, 686
utils/stac_reader.py                           113      44  61.06%   63-85, 95-97, 101, 138, 154-159, 206-216, 226-256
TOTAL                                         9730    1339  86.24%

Diff against develop

Filename                      Stmts    Miss  Cover
--------------------------  -------  ------  -------
plugins/search/base.py           +1      -3  +1.63%
plugins/search/cop_ghsl.py     +388     +84  +78.35%
TOTAL                          +389     +81  -0.29%

Results for commit: 9eb8199

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Oct 9, 2025

Test Results

    4 files  ± 0      4 suites  ±0   3m 48s ⏱️ +17s
  750 tests +14    750 ✅ +14  0 💤 ±0  0 ❌ ±0 
3 042 runs  +56  3 040 ✅ +56  2 💤 ±0  0 ❌ ±0 

Results for commit 6040f11. ± Comparison against base commit 379db43.

This pull request removes 1 and adds 15 tests. Note that renamed tests count towards both.
tests.units.test_search_plugins.TestSearchPluginECMWFSearch ‑ test_plugins_search_ecmwfsearch_dates_missing
eodag.utils.dates ‑ eodag.utils.dates.compute_date_range_from_params
eodag.utils.dates ‑ eodag.utils.dates.time_values_to_hhmm
eodag.utils.dates ‑ eodag.utils.dates.to_iso_utc_string
eodag.utils.dates ‑ eodag.utils.dates.validate_datetime_param
tests.units.test_search_plugins.TestSearchPluginCopGhslSearch ‑ test_get_assets_from_mapping
tests.units.test_search_plugins.TestSearchPluginCopGhslSearch ‑ test_plugins_search_cop_ghsl_check_input_parameters_valid
tests.units.test_search_plugins.TestSearchPluginCopGhslSearch ‑ test_plugins_search_cop_ghsl_convert_bbox
tests.units.test_search_plugins.TestSearchPluginCopGhslSearch ‑ test_plugins_search_cop_ghsl_create_products_from_tiles
tests.units.test_search_plugins.TestSearchPluginCopGhslSearch ‑ test_plugins_search_cop_ghsl_create_products_without_tiles
tests.units.test_search_plugins.TestSearchPluginCopGhslSearch ‑ test_plugins_search_cop_ghsl_discover_queryables
…

♻️ This comment has been updated with latest results.

@eodag-bot
Copy link
Copy Markdown
Collaborator

eodag-bot commented Oct 13, 2025

badge

Code Coverage (Windows)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         244      10  95.90%   103-114, 622
config.py                                      459      35  92.37%   80-82, 85, 88, 91, 95, 99, 103-105, 176, 187, 204-205, 762-764, 888-891, 935-936, 945-946, 980, 1060, 1081, 1089, 1119-1124, 1126
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/collection.py                              123       7  94.31%   167, 203, 206, 296, 299, 317, 320
api/core.py                                    776      36  95.36%   347, 612, 643, 685-688, 726, 770, 804, 849-854, 879, 995, 1244, 1381, 1424, 1437, 1504, 1518-1519, 1595-1600, 1612-1615, 1948, 2188, 2251-2252, 2281-2282
api/search_result.py                           181      19  89.50%   104, 113, 120, 134, 178, 195, 292, 347-350, 420, 425-426, 460, 474, 497-498, 504
api/product/__init__.py                         18       2  88.89%   60, 62
api/product/_assets.py                          52       5  90.38%   97, 183, 191, 194-198
api/product/_product.py                        210      17  91.90%   171, 240-241, 259-260, 366, 393, 494, 514, 538-541, 550-553, 600
api/product/metadata_mapping.py                787      53  93.27%   125-127, 220-225, 246, 304-305, 393, 414, 466-467, 504, 525-528, 551, 563-564, 605, 628, 658-663, 728-733, 745, 753, 985, 1160, 1169-1173, 1190-1195, 1328, 1351, 1360, 1382, 1387, 1439, 1511, 1532, 1558, 1572, 1597, 1643, 1712, 1784
api/product/drivers/__init__.py                 11       0  100.00%
api/product/drivers/base.py                     23       0  100.00%
api/product/drivers/generic.py                   7       0  100.00%
api/product/drivers/sentinel1.py                15       0  100.00%
api/product/drivers/sentinel2.py                15       0  100.00%
plugins/__init__.py                              0       0  100.00%
plugins/base.py                                 22       4  81.82%   48, 55, 68-69
plugins/manager.py                             173      18  89.60%   105-110, 145-150, 154, 192, 214, 242, 281-282, 382-385, 397-398
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                          103      10  90.29%   177-179, 226-227, 253-255, 309-310
plugins/apis/usgs.py                           184      26  85.87%   160, 266, 300, 341-343, 348, 376-377, 382, 412-419, 430-435, 457-463, 494
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, 289-290, 340-344
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       47      33  29.79%   49-54, 67-113
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%   55-60, 63-64
plugins/download/__init__.py                     0       0  100.00%
plugins/download/aws.py                        381      71  81.36%   267, 301, 339-342, 362-366, 461-463, 467, 498-499, 505-509, 540, 605-613, 677-770, 781-786, 824, 850, 895-897, 949, 1129
plugins/download/base.py                       260      37  85.77%   129, 158, 225-227, 305-306, 364-365, 407, 411-422, 436, 504-508, 538-539, 564-572, 574-578, 628, 649, 671, 679
plugins/download/http.py                       545      77  85.87%   238, 280-283, 345-348, 351, 358-363, 394-396, 413, 428, 486, 521, 535, 549, 557-561, 577-582, 593, 611, 647-650, 671, 681, 688, 708, 843, 875, 905-914, 950, 975-976, 995-1000, 1009, 1024-1026, 1030, 1033, 1048-1049, 1125-1126, 1130, 1182, 1228-1229, 1235, 1245, 1271, 1306, 1326, 1363-1365
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         189      15  92.06%   107, 111, 135-141, 294, 315, 440, 487, 509-512, 521
plugins/search/build_search_result.py          522      81  84.48%   249-250, 286, 289, 327, 330, 361-363, 606-617, 747, 771, 773, 840, 848-852, 873, 885, 911, 956, 972, 1006-1021, 1069, 1094, 1097, 1101, 1141-1161, 1202, 1229-1230, 1239-1248, 1312, 1327, 1333, 1352-1361, 1482-1483, 1527, 1536-1538, 1595, 1643-1653
plugins/search/cop_ghsl.py                     388      84  78.35%   53-54, 85-86, 123-126, 148, 150, 196, 227-230, 274, 291, 294, 324, 328-333, 365, 386, 417, 433, 465, 480, 495-496, 510-512, 517, 521-523, 526-529, 546-599, 609-624
plugins/search/cop_marine.py                   267      56  79.03%   57, 65-67, 77-78, 83, 88-89, 105, 107, 110, 176-177, 220, 236, 242, 246, 250, 261, 272-273, 281, 318-321, 327, 348, 352, 356, 360, 364-368, 374-377, 380-397, 414-417, 470-474, 479, 491
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                     820      94  88.54%   415-416, 533-534, 557-558, 570-574, 789-795, 853, 949, 956, 1027, 1048, 1051-1052, 1070, 1079-1080, 1107, 1181, 1190, 1195-1212, 1221, 1236, 1245-1248, 1258, 1286, 1369, 1392, 1465-1466, 1472, 1562, 1669-1673, 1739, 1742, 1746-1747, 1768-1771, 1783, 1805-1817, 1824, 1859-1861, 1884-1890, 1897, 1951, 1974, 1979-1980, 1995, 2001, 2011, 2095, 2099, 2110, 2134, 2147, 2155-2165, 2202-2206
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, 171-174, 187, 229
types/__init__.py                              161      44  72.67%   67, 71, 80-84, 95-107, 135-137, 144-149, 194, 213, 216, 254, 264-280, 285, 287, 309, 314, 322, 332
types/bbox.py                                   43      19  55.81%   46-61, 72-74, 85-87, 99-101, 113-115, 123
types/download_args.py                           9       0  100.00%
types/queryables.py                             84       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
utils/__init__.py                              596      45  92.45%   71, 168, 201-202, 211-237, 240, 255, 335-339, 414-418, 498, 538-539, 568, 943-946, 954-955, 997, 1016-1017, 1046, 1064-1065, 1177, 1244, 1408, 1497, 1512, 1521, 1533, 1708
utils/cache.py                                  22       0  100.00%
utils/dates.py                                  57       4  92.98%   63-65, 138
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                                    240      12  95.00%   200-203, 245, 263, 489, 537-538, 585, 660, 686
utils/stac_reader.py                           113      44  61.06%   63-85, 95-97, 101, 138, 154-159, 206-216, 226-256
TOTAL                                         9730    1341  86.22%

Diff against develop

Filename                      Stmts    Miss  Cover
--------------------------  -------  ------  -------
plugins/search/base.py           +1      -3  +1.63%
plugins/search/cop_ghsl.py     +388     +84  +78.35%
TOTAL                          +389     +81  -0.29%

Results for commit: 9eb8199

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@jlahovnik jlahovnik marked this pull request as ready for review October 16, 2025 15:46
@jlahovnik jlahovnik requested a review from sbrunato October 16, 2025 15:46
@jlahovnik jlahovnik force-pushed the cop_ghs-provider branch 3 times, most recently from 5c12482 to 2ad95f0 Compare October 16, 2025 16:20
@jlahovnik jlahovnik marked this pull request as draft October 23, 2025 12:55
@jlahovnik jlahovnik marked this pull request as ready for review October 24, 2025 13:18
@jlahovnik jlahovnik force-pushed the cop_ghs-provider branch 2 times, most recently from d287492 to 1cc1090 Compare November 7, 2025 16:44
@jlahovnik jlahovnik force-pushed the cop_ghs-provider branch 3 times, most recently from 404897f to 2467e80 Compare November 19, 2025 18:22
@eodag-bot
Copy link
Copy Markdown
Collaborator

eodag-bot commented Jan 7, 2026

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                                      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                                    778      57  92.67%   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, 1481-1482, 1556-1561, 1573-1576, 1688, 1921, 2078, 2189, 2277-2278
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                          54       4  92.59%   97, 191, 202-206
api/product/_product.py                        304      24  92.11%   200, 344, 370-373, 410, 421-422, 531, 560, 567, 606, 718, 761-764, 773-776, 830, 896, 908, 975
api/product/metadata_mapping.py                806      60  92.56%   125-127, 221-226, 250, 308-309, 355-356, 397, 418, 470-471, 508, 529-532, 555, 567-568, 609, 632, 657-660, 662-667, 732-737, 746, 752, 768, 776, 1010, 1163, 1185, 1194-1198, 1215-1220, 1353, 1376, 1385, 1407, 1412, 1464, 1536, 1557, 1583, 1597, 1622, 1668, 1737, 1812
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                           182      25  86.26%   157, 263, 297, 339-341, 346, 374-375, 380, 410-417, 428-433, 455-461
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                 99       2  97.98%   171, 194
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                   59       0  100.00%
plugins/crunch/filter_latest_intersect.py       54       6  88.89%   92-93, 100-101, 103-107
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       0  100.00%
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                       288      24  91.67%   135, 165, 371-372, 416, 450, 527-531, 561, 596-597, 622-631, 690, 711, 733, 741
plugins/download/http.py                       574      75  86.93%   233, 275-278, 340-343, 346, 353-358, 389-391, 408, 423, 483, 518, 532, 546, 556-560, 576-581, 592, 611, 648-651, 672, 682, 689, 745, 854, 886, 916-925, 961, 1006-1011, 1020, 1035-1037, 1041, 1044, 1059-1060, 1070, 1145, 1197, 1239-1240, 1252, 1262, 1318-1319, 1349, 1369, 1397, 1477-1478
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         197      18  90.86%   109, 113, 137-143, 218-221, 296, 317, 443, 493, 526-529, 538
plugins/search/build_search_result.py          520      91  82.50%   260-261, 297, 301, 321, 380, 550-561, 571-573, 659-665, 711, 735, 737, 804, 812-816, 837, 847, 873, 918, 943, 971, 989-1004, 1054, 1079, 1082, 1086, 1095, 1101, 1139-1160, 1201, 1228-1229, 1238-1247, 1311, 1326, 1332, 1351-1360, 1481-1482, 1526, 1535-1537, 1594, 1642-1652
plugins/search/cop_ghsl.py                     406      85  79.06%   54-55, 90-91, 155, 157, 199, 230-233, 278, 294, 297, 331, 335-340, 355, 377, 398, 432, 448, 483, 498, 512-513, 527-529, 534, 538-540, 543-546, 564-624, 635-650
plugins/search/cop_marine.py                   273      59  78.39%   57, 65-67, 77-78, 83, 88-89, 105, 107, 110, 176-177, 220, 238, 244, 248, 252, 263, 274-275, 283, 315-318, 324, 334, 347, 351, 355, 359, 363-367, 373-376, 379-396, 413-416, 469-473, 478, 490, 504-505
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                     839      95  88.68%   380, 425-426, 543-544, 567-568, 580-584, 815-821, 879, 945, 975, 982, 1053, 1074, 1077-1078, 1096, 1105-1106, 1133, 1205, 1214, 1219-1236, 1245, 1260, 1269, 1282, 1304, 1400, 1423, 1496-1497, 1503, 1593, 1700-1704, 1775, 1778, 1782-1783, 1804-1807, 1819, 1841-1853, 1861, 1896-1898, 1921-1927, 1934, 1988, 2011, 2016-2017, 2032, 2038, 2048, 2138, 2142, 2153, 2177, 2190, 2198-2208, 2246-2250
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                         120      16  86.67%   95, 116-117, 150, 180-194, 203-210
utils/__init__.py                              572      39  93.18%   60, 197, 228-229, 238-264, 267, 282, 362-366, 441-445, 525, 565-566, 595, 973-976, 1027, 1046-1047, 1076, 1094-1095, 1207, 1295, 1459, 1697
utils/cache.py                                  22       0  100.00%
utils/dates.py                                 182       4  97.80%   172, 516, 523-524
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                             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                                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                                    240      12  95.00%   200-203, 245, 263, 489, 537-538, 585, 660, 686
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                                        10888    1328  87.80%

Diff against develop

Filename                      Stmts    Miss  Cover
--------------------------  -------  ------  -------
plugins/search/base.py           +1      -3  +1.57%
plugins/search/cop_ghsl.py     +406     +85  +79.06%
TOTAL                          +407     +82  -0.31%

Results for commit: 6040f11

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@eodag-bot
Copy link
Copy Markdown
Collaborator

eodag-bot commented Jan 7, 2026

badge

Code Coverage (Windows)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         251      11  95.62%   104-115, 377, 644
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                                    778      57  92.67%   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, 1481-1482, 1556-1561, 1573-1576, 1688, 1921, 2078, 2189, 2277-2278
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                          54       4  92.59%   97, 191, 202-206
api/product/_product.py                        304      24  92.11%   200, 344, 370-373, 410, 421-422, 531, 560, 567, 606, 718, 761-764, 773-776, 830, 896, 908, 975
api/product/metadata_mapping.py                806      60  92.56%   125-127, 221-226, 250, 308-309, 355-356, 397, 418, 470-471, 508, 529-532, 555, 567-568, 609, 632, 657-660, 662-667, 732-737, 746, 752, 768, 776, 1010, 1163, 1185, 1194-1198, 1215-1220, 1353, 1376, 1385, 1407, 1412, 1464, 1536, 1557, 1583, 1597, 1622, 1668, 1737, 1812
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                           182      25  86.26%   157, 263, 297, 339-341, 346, 374-375, 380, 410-417, 428-433, 455-461
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                 99       2  97.98%   171, 194
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                   59       0  100.00%
plugins/crunch/filter_latest_intersect.py       54       6  88.89%   92-93, 100-101, 103-107
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       0  100.00%
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                       288      26  90.97%   135, 165, 232-234, 371-372, 416, 450, 527-531, 561, 596-597, 622-631, 690, 711, 733, 741
plugins/download/http.py                       574      75  86.93%   233, 275-278, 340-343, 346, 353-358, 389-391, 408, 423, 483, 518, 532, 546, 556-560, 576-581, 592, 611, 648-651, 672, 682, 689, 745, 854, 886, 916-925, 961, 1006-1011, 1020, 1035-1037, 1041, 1044, 1059-1060, 1070, 1145, 1197, 1239-1240, 1252, 1262, 1318-1319, 1349, 1369, 1397, 1477-1478
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         197      18  90.86%   109, 113, 137-143, 218-221, 296, 317, 443, 493, 526-529, 538
plugins/search/build_search_result.py          520      91  82.50%   260-261, 297, 301, 321, 380, 550-561, 571-573, 659-665, 711, 735, 737, 804, 812-816, 837, 847, 873, 918, 943, 971, 989-1004, 1054, 1079, 1082, 1086, 1095, 1101, 1139-1160, 1201, 1228-1229, 1238-1247, 1311, 1326, 1332, 1351-1360, 1481-1482, 1526, 1535-1537, 1594, 1642-1652
plugins/search/cop_ghsl.py                     406      85  79.06%   54-55, 90-91, 155, 157, 199, 230-233, 278, 294, 297, 331, 335-340, 355, 377, 398, 432, 448, 483, 498, 512-513, 527-529, 534, 538-540, 543-546, 564-624, 635-650
plugins/search/cop_marine.py                   273      59  78.39%   57, 65-67, 77-78, 83, 88-89, 105, 107, 110, 176-177, 220, 238, 244, 248, 252, 263, 274-275, 283, 315-318, 324, 334, 347, 351, 355, 359, 363-367, 373-376, 379-396, 413-416, 469-473, 478, 490, 504-505
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                     839      95  88.68%   380, 425-426, 543-544, 567-568, 580-584, 815-821, 879, 945, 975, 982, 1053, 1074, 1077-1078, 1096, 1105-1106, 1133, 1205, 1214, 1219-1236, 1245, 1260, 1269, 1282, 1304, 1400, 1423, 1496-1497, 1503, 1593, 1700-1704, 1775, 1778, 1782-1783, 1804-1807, 1819, 1841-1853, 1861, 1896-1898, 1921-1927, 1934, 1988, 2011, 2016-2017, 2032, 2038, 2048, 2138, 2142, 2153, 2177, 2190, 2198-2208, 2246-2250
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                         120      16  86.67%   95, 116-117, 150, 180-194, 203-210
utils/__init__.py                              572      39  93.18%   60, 197, 228-229, 238-264, 267, 282, 362-366, 441-445, 525, 565-566, 595, 973-976, 1027, 1046-1047, 1076, 1094-1095, 1207, 1295, 1459, 1697
utils/cache.py                                  22       0  100.00%
utils/dates.py                                 182       4  97.80%   172, 516, 523-524
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                             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                                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                                    240      12  95.00%   200-203, 245, 263, 489, 537-538, 585, 660, 686
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                                        10888    1330  87.78%

Diff against develop

Filename                      Stmts    Miss  Cover
--------------------------  -------  ------  -------
plugins/search/base.py           +1      -3  +1.57%
plugins/search/cop_ghsl.py     +406     +85  +79.06%
TOTAL                          +407     +82  -0.31%

Results for commit: 6040f11

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@sbrunato sbrunato marked this pull request as draft February 2, 2026 09:13
@jlahovnik jlahovnik marked this pull request as ready for review February 5, 2026 15:39
@jlahovnik jlahovnik requested a review from sbrunato February 5, 2026 15:42
@sbrunato sbrunato marked this pull request as draft February 12, 2026 08:56
@jlahovnik
Copy link
Copy Markdown
Collaborator Author

Please set order:status to succeeded for consistency between providers. This property is used by stac-fastapi-eodag to set properly the storage:tier.

Please set order:status to succeeded for consistency between providers. This property is used by stac-fastapi-eodag to set properly the storage:tier.

Please set order:status to succeeded for consistency between providers. This property is used by stac-fastapi-eodag to set properly the storage:tier.

"order:status" added

for const in constraints:
constraints_values.extend(const[filter_key])
raise ValidationError(
f"No values for {filter_key} available in given range; available values {set(constraints_values)}"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
f"No values for {filter_key} available in given range; available values {set(constraints_values)}"
f"No values for {filter_key} available in given range; available values {sorted(set(constraints_values))}"

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed

GHS_SMOD:
_collection: SMOD
tile_size: 1k
proj:code: '54009'
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bad formatted proj:code, see https://github.com/stac-extensions/projection?tab=readme-ov-file#projcode
It should be EPSG:54009

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed

@sbrunato sbrunato marked this pull request as draft April 10, 2026 06:52
@jlahovnik jlahovnik marked this pull request as ready for review April 10, 2026 15:06
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.

4 participants