Skip to content

feat(#1538): add cop_dataspace_s3 provider#1819

Open
timothey-cs wants to merge 11 commits intodevelopfrom
1538-cop_dataspace_s3
Open

feat(#1538): add cop_dataspace_s3 provider#1819
timothey-cs wants to merge 11 commits intodevelopfrom
1538-cop_dataspace_s3

Conversation

@timothey-cs
Copy link
Copy Markdown
Collaborator

Fixes #1538
Add cop_dataspace_s3 provider

@timothey-cs timothey-cs self-assigned this Sep 5, 2025
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Sep 5, 2025

Test Results

    4 files  ±0      4 suites  ±0   3m 35s ⏱️ +4s
  736 tests ±0    736 ✅ ±0  0 💤 ±0  0 ❌ ±0 
2 986 runs  ±0  2 984 ✅ ±0  2 💤 ±0  0 ❌ ±0 

Results for commit 1a123e3. ± Comparison against base commit 379db43.

♻️ This comment has been updated with latest results.

@eodag-bot
Copy link
Copy Markdown
Collaborator

eodag-bot commented Sep 5, 2025

badge

Code Coverage (Ubuntu)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         334      68  79.64%   64-65, 89, 129-131, 721-785, 887-938, 942
config.py                                      453      30  93.38%   81-83, 92, 100, 104-106, 177, 188, 205-206, 732-734, 858-861, 905-906, 915-916, 950, 1030, 1089-1094, 1096
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/core.py                                    788      47  94.04%   337, 604, 635, 679-682, 720, 764, 798, 843-848, 874, 960, 1300, 1342, 1376-1387, 1491-1494, 1531-1551, 1620-1625, 1637-1640, 2222, 2285-2286, 2315-2316
api/search_result.py                           126      12  90.48%   87, 96, 103, 117, 282, 287-288, 322, 336, 359-360, 366
api/product/__init__.py                         18       1  94.44%   62
api/product/_assets.py                          52       5  90.38%   97, 183, 191, 194-198
api/product/_product.py                        213      19  91.08%   72-74, 238-239, 345, 372, 473, 491, 515-518, 527-530, 585-588
api/product/metadata_mapping.py                776      44  94.33%   123-125, 259-260, 367, 419-420, 457, 478-481, 504, 516-517, 554, 620-625, 637, 645, 749-750, 958, 1111, 1120-1124, 1141-1146, 1273, 1296, 1305, 1327, 1332, 1456, 1498, 1512, 1537, 1583, 1652, 1724
api/product/drivers/__init__.py                 20       2  90.00%   33-36
api/product/drivers/base.py                     29       1  96.55%   98
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       2  90.91%   48, 55
plugins/manager.py                             173      19  89.02%   106-111, 146-151, 155, 193, 215, 219, 243, 282-283, 383-386, 398-399
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                           97      10  89.69%   167-169, 216-217, 243-245, 298-299
plugins/apis/usgs.py                           180      26  85.56%   157, 259, 293, 328-330, 335, 361-362, 367, 397-404, 415-420, 442-448, 479
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py             109      31  71.56%   50-52, 67-68, 136-140, 168-194, 217, 249-253, 270
plugins/authentication/base.py                  19       3  84.21%   46, 59, 82
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/oauth.py                 15       7  53.33%   48-50, 54-57
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              53       3  94.34%   67, 88, 134
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       8  82.98%   52-53, 69, 78-81, 83, 90-93
plugins/crunch/filter_latest_tpl_name.py        31       1  96.77%   83
plugins/crunch/filter_overlap.py                66      18  72.73%   28-30, 66-69, 76-79, 85, 93, 104-120
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                        378      70  81.48%   267, 303, 341-344, 364-368, 463-465, 469, 502-503, 509-513, 544, 609-617, 681-778, 789-794, 832, 858, 903-905, 1125
plugins/download/base.py                       260      35  86.54%   130, 159, 306-307, 365-366, 408, 412-423, 437, 505-509, 539-540, 565-573, 575-579, 629, 650, 672, 680
plugins/download/creodias_s3.py                 10       0  100.00%
plugins/download/http.py                       545      77  85.87%   238, 280-283, 345-348, 351, 358-363, 394-396, 413, 428, 482, 517, 531, 545, 553-557, 573-578, 589, 607, 643-646, 667, 677, 684, 704, 839, 871, 901-910, 946, 971-972, 991-996, 1005, 1020-1022, 1026, 1029, 1044-1045, 1123-1124, 1128, 1180, 1226-1227, 1233, 1243, 1271, 1306, 1326, 1363-1365
plugins/download/s3rest.py                     122      26  78.69%   125, 159, 166, 201, 228-235, 238-240, 244, 255-261, 269-270, 273-277, 292-295, 304, 325-328
plugins/search/__init__.py                      22       0  100.00%
plugins/search/base.py                         170      14  91.76%   104, 108, 132-138, 275, 296, 435, 457-460, 469
plugins/search/build_search_result.py          480      56  88.33%   246-247, 283, 286, 311, 314, 345-347, 559, 561, 565, 568, 695, 697, 758, 765, 789, 826, 877, 927-942, 990, 1015, 1018, 1022, 1143-1144, 1153-1162, 1225, 1246, 1265-1274, 1391-1392, 1437, 1446-1448, 1508, 1554
plugins/search/cop_marine.py                   254      47  81.50%   56, 64-66, 76-77, 82, 87-88, 104, 106, 109, 175-176, 232, 238, 242, 246, 259, 270-271, 279, 312, 316, 337, 341, 345, 349, 353-357, 363-366, 369-383, 400, 449-453, 458, 470
plugins/search/creodias_s3.py                   29       1  96.55%   59
plugins/search/csw.py                          105      81  22.86%   98-99, 103-104, 112-160, 166-179, 187-219, 237-278
plugins/search/data_request_search.py          208      26  87.50%   195-198, 214, 225, 229-230, 241, 246, 251, 258, 271-274, 328-329, 333, 343-349, 354, 501, 511, 522, 535, 561
plugins/search/qssearch.py                     725      69  90.48%   416-417, 558-559, 571-575, 632-648, 765-768, 839-840, 891, 910, 917, 929, 986, 1007, 1010-1011, 1020-1021, 1030-1031, 1040-1041, 1068, 1208, 1231, 1304-1305, 1311, 1401, 1566, 1569, 1575-1576, 1597, 1625-1637, 1644, 1676-1678, 1688-1694, 1724, 1747, 1752-1753, 1768, 1784, 1871, 1878, 1889, 1912-1917, 1926, 1935
plugins/search/stac_list_assets.py              25      10  60.00%   44-51, 75-85
plugins/search/static_stac_search.py            79      13  83.54%   100-126, 170, 183
rest/__init__.py                                 4       2  50.00%   21-22
rest/cache.py                                   33       7  78.79%   35-37, 53-55, 59, 68
rest/config.py                                  25       0  100.00%
rest/constants.py                                6       0  100.00%
rest/core.py                                   261      60  77.01%   265, 304, 319-355, 451, 488-527, 604, 634-637, 710, 717-764
rest/errors.py                                  74       5  93.24%   126, 136, 147, 172-173
rest/server.py                                 196      24  87.76%   94, 117-119, 293-298, 326, 526-528, 545-550, 579, 581, 585-586, 590-591
rest/stac.py                                   333      71  78.68%   320, 342, 394-397, 424-451, 482-484, 507, 539-540, 622-662, 684-700, 792-796, 854-855, 865-870, 880-884, 933, 1023-1025
rest/types/__init__.py                           0       0  100.00%
rest/types/collections_search.py                13      13  0.00%    18-44
rest/types/eodag_search.py                     180       6  96.67%   225-229, 282, 285, 353, 375
rest/types/queryables.py                        64      12  81.25%   61, 71-79, 105-110, 174
rest/types/stac_search.py                      125       7  94.40%   128, 174, 189-191, 199, 203
rest/utils/__init__.py                          94      12  87.23%   101-102, 121-123, 175, 185-199
rest/utils/cql_evaluate.py                      48       5  89.58%   69, 76, 90, 97, 105
rest/utils/rfc3339.py                           23       3  86.96%   48, 60, 62
types/__init__.py                              161      40  75.16%   67, 80-84, 95-107, 135-137, 144-149, 252, 262-278, 283, 285, 307, 312, 320, 330
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                            111       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
utils/__init__.py                              564      40  92.91%   69, 193-194, 203-229, 232, 247, 327-331, 406-410, 489, 504, 544-545, 574, 949-952, 960-961, 999-1000, 1047-1048, 1188, 1441, 1456, 1465, 1477
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       8  78.95%   51, 53, 57, 98, 122-129
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                                        10880    1456  86.62%

Diff against develop

Filename      Stmts    Miss  Cover
----------  -------  ------  --------
TOTAL             0       0  +100.00%

Results for commit: 47ee89c

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@eodag-bot
Copy link
Copy Markdown
Collaborator

eodag-bot commented Sep 5, 2025

badge

Code Coverage (Windows)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         334      68  79.64%   64-65, 89, 129-131, 721-785, 887-938, 942
config.py                                      453      31  93.16%   81-83, 92, 100, 104-106, 177, 188, 205-206, 732-734, 858-861, 905-906, 915-916, 950, 1030, 1059, 1089-1094, 1096
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/core.py                                    788      47  94.04%   337, 604, 635, 679-682, 720, 764, 798, 843-848, 874, 960, 1300, 1342, 1376-1387, 1491-1494, 1531-1551, 1620-1625, 1637-1640, 2222, 2285-2286, 2315-2316
api/search_result.py                           126      12  90.48%   87, 96, 103, 117, 282, 287-288, 322, 336, 359-360, 366
api/product/__init__.py                         18       1  94.44%   62
api/product/_assets.py                          52       5  90.38%   97, 183, 191, 194-198
api/product/_product.py                        213      19  91.08%   72-74, 238-239, 345, 372, 473, 491, 515-518, 527-530, 585-588
api/product/metadata_mapping.py                776      44  94.33%   123-125, 259-260, 367, 419-420, 457, 478-481, 504, 516-517, 554, 620-625, 637, 645, 749-750, 958, 1111, 1120-1124, 1141-1146, 1273, 1296, 1305, 1327, 1332, 1456, 1498, 1512, 1537, 1583, 1652, 1724
api/product/drivers/__init__.py                 20       2  90.00%   33-36
api/product/drivers/base.py                     29       1  96.55%   98
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      19  89.02%   106-111, 146-151, 155, 193, 215, 219, 243, 282-283, 383-386, 398-399
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                           97      10  89.69%   167-169, 216-217, 243-245, 298-299
plugins/apis/usgs.py                           180      26  85.56%   157, 259, 293, 328-330, 335, 361-362, 367, 397-404, 415-420, 442-448, 479
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py             109      31  71.56%   50-52, 67-68, 136-140, 168-194, 217, 249-253, 270
plugins/authentication/base.py                  19       3  84.21%   46, 59, 82
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/oauth.py                 15       7  53.33%   48-50, 54-57
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              53       3  94.34%   67, 88, 134
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-112
plugins/crunch/filter_latest_tpl_name.py        31       1  96.77%   83
plugins/crunch/filter_overlap.py                66      18  72.73%   28-30, 66-69, 76-79, 85, 93, 104-120
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                        378      70  81.48%   267, 303, 341-344, 364-368, 463-465, 469, 502-503, 509-513, 544, 609-617, 681-778, 789-794, 832, 858, 903-905, 1125
plugins/download/base.py                       260      37  85.77%   130, 159, 226-228, 306-307, 365-366, 408, 412-423, 437, 505-509, 539-540, 565-573, 575-579, 629, 650, 672, 680
plugins/download/creodias_s3.py                 10       0  100.00%
plugins/download/http.py                       545      77  85.87%   238, 280-283, 345-348, 351, 358-363, 394-396, 413, 428, 482, 517, 531, 545, 553-557, 573-578, 589, 607, 643-646, 667, 677, 684, 704, 839, 871, 901-910, 946, 971-972, 991-996, 1005, 1020-1022, 1026, 1029, 1044-1045, 1123-1124, 1128, 1180, 1226-1227, 1233, 1243, 1271, 1306, 1326, 1363-1365
plugins/download/s3rest.py                     122      26  78.69%   125, 159, 166, 201, 228-235, 238-240, 244, 255-261, 269-270, 273-277, 292-295, 304, 325-328
plugins/search/__init__.py                      22       0  100.00%
plugins/search/base.py                         170      14  91.76%   104, 108, 132-138, 275, 296, 435, 457-460, 469
plugins/search/build_search_result.py          480      63  86.88%   246-247, 283, 286, 311, 314, 345-347, 557-568, 695, 697, 758, 765, 789, 826, 877, 893, 927-942, 990, 1015, 1018, 1022, 1143-1144, 1153-1162, 1225, 1240, 1246, 1265-1274, 1391-1392, 1437, 1446-1448, 1508, 1554
plugins/search/cop_marine.py                   254      47  81.50%   56, 64-66, 76-77, 82, 87-88, 104, 106, 109, 175-176, 232, 238, 242, 246, 259, 270-271, 279, 312, 316, 337, 341, 345, 349, 353-357, 363-366, 369-383, 400, 449-453, 458, 470
plugins/search/creodias_s3.py                   29       1  96.55%   59
plugins/search/csw.py                          105      81  22.86%   98-99, 103-104, 112-160, 166-179, 187-219, 237-278
plugins/search/data_request_search.py          208      26  87.50%   195-198, 214, 225, 229-230, 241, 246, 251, 258, 271-274, 328-329, 333, 343-349, 354, 501, 511, 522, 535, 561
plugins/search/qssearch.py                     725      81  88.83%   416-417, 558-559, 571-575, 632-648, 765-768, 839-840, 891, 910, 917, 929, 986, 1007, 1010-1011, 1020-1021, 1030-1031, 1040-1041, 1068, 1208, 1231, 1304-1305, 1311, 1401, 1498-1502, 1566, 1569, 1575-1576, 1597, 1625-1637, 1644, 1676-1678, 1688-1694, 1724, 1747, 1752-1753, 1768, 1784, 1859, 1871, 1878, 1889, 1912-1917, 1926, 1934-1944, 1962, 1978-1982
plugins/search/stac_list_assets.py              25      10  60.00%   44-51, 75-85
plugins/search/static_stac_search.py            79      13  83.54%   100-126, 170, 183
rest/__init__.py                                 4       2  50.00%   21-22
rest/cache.py                                   33      22  33.33%   35-37, 44-70
rest/config.py                                  25       1  96.00%   35
rest/constants.py                                6       0  100.00%
rest/core.py                                   261     151  42.15%   164, 166, 168, 171-172, 186-196, 205-206, 212, 215, 256-306, 319-355, 387-425, 440-456, 472-481, 488-527, 544, 586-671, 710, 717-764
rest/errors.py                                  74      51  31.08%   72, 77-120, 125-128, 135-138, 146-176, 184-189, 204-210
rest/server.py                                 196     196  0.00%    18-604
rest/stac.py                                   333      76  77.18%   254, 320, 342, 394-397, 424-451, 482-484, 507, 539-540, 622-662, 684-700, 727, 792-796, 854-855, 861, 865-870, 880-884, 933, 971, 1004, 1023-1025
rest/types/__init__.py                           0       0  100.00%
rest/types/collections_search.py                13      13  0.00%    18-44
rest/types/eodag_search.py                     180      20  88.89%   225-229, 262-264, 282, 285, 291, 295, 353, 371-386
rest/types/queryables.py                        64      20  68.75%   54-55, 60-63, 68-79, 105-110, 119-120, 174
rest/types/stac_search.py                      125      11  91.20%   126-128, 174, 189-191, 199, 203, 251, 254
rest/utils/__init__.py                          94      30  68.09%   72-78, 98, 101-102, 121-123, 136, 143, 168-176, 183-204
rest/utils/cql_evaluate.py                      48       5  89.58%   69, 76, 90, 97, 105
rest/utils/rfc3339.py                           23       5  78.26%   43-44, 48, 60, 62
types/__init__.py                              161      41  74.53%   67, 80-84, 95-107, 135-137, 144-149, 214, 252, 262-278, 283, 285, 307, 312, 320, 330
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                            111       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
utils/__init__.py                              564      40  92.91%   69, 193-194, 203-229, 232, 247, 327-331, 406-410, 489, 504, 544-545, 574, 949-952, 960-961, 999-1000, 1047-1048, 1188, 1441, 1456, 1465, 1477
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       8  78.95%   51, 53, 57, 98, 122-129
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                                        10880    1882  82.70%

Diff against develop

Filename      Stmts    Miss  Cover
----------  -------  ------  --------
TOTAL             0       0  +100.00%

Results for commit: 47ee89c

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@timothey-cs timothey-cs marked this pull request as ready for review September 8, 2025 12:35
@timothey-cs timothey-cs requested a review from sbrunato September 8, 2025 12:35
@sbrunato sbrunato marked this pull request as draft September 18, 2025 14:10
@timothey-cs timothey-cs marked this pull request as ready for review September 19, 2025 08:04
@sbrunato sbrunato marked this pull request as draft September 19, 2025 20:00
@timothey-cs timothey-cs marked this pull request as ready for review September 22, 2025 07:37
Copy link
Copy Markdown
Collaborator

@sbrunato sbrunato Sep 24, 2025

Choose a reason for hiding this comment

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

@sbrunato sbrunato marked this pull request as draft September 24, 2025 12:46

def test_end_to_end_search_download_cop_dataspace_s3(self):
product = self.execute_search(*COP_DATASPACE_S3_SEARCH_ARGS)
expected_filename = "{}.zip".format(product.properties["title"])
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
expected_filename = "{}.zip".format(product.properties["title"])
expected_filename = product.properties["title"]

not zip extension expected

@timothey-cs timothey-cs force-pushed the 1538-cop_dataspace_s3 branch 2 times, most recently from 3b2fa90 to 25e273b Compare September 25, 2025 09:23
@timothey-cs timothey-cs marked this pull request as ready for review September 25, 2025 09:33
@timothey-cs timothey-cs force-pushed the 1538-cop_dataspace_s3 branch from 47ee89c to da5e122 Compare April 8, 2026 15:19
@eodag-bot
Copy link
Copy Markdown
Collaborator

eodag-bot commented Apr 8, 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                                      307      24  92.18%   70-72, 75, 78, 81, 85, 89, 93-95, 590-592, 714-716, 735, 743, 773-778, 780
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                804      58  92.79%   125-127, 221-226, 250, 308-309, 397, 418, 470-471, 508, 529-532, 555, 567-568, 609, 632, 657-660, 662-667, 732-737, 746, 752, 768, 776, 1008, 1161, 1183, 1192-1196, 1213-1218, 1351, 1374, 1383, 1405, 1410, 1462, 1534, 1555, 1581, 1595, 1620, 1666, 1735, 1810
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                          101       8  92.08%   178-180, 228-229, 255-257
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                         196      18  90.82%   109, 113, 137-143, 200-203, 296, 317, 442, 492, 525-528, 537
plugins/search/build_search_result.py          505      83  83.56%   259-260, 296, 300, 320, 550-561, 576-578, 701, 725, 727, 794, 802-806, 827, 837, 863, 908, 933, 961, 979-994, 1044, 1069, 1072, 1076, 1085, 1091, 1129-1150, 1191, 1218-1219, 1228-1237, 1301, 1316, 1322, 1341-1350, 1471-1472, 1516, 1525-1527, 1584, 1632-1642
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                     836      95  88.64%   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, 1770, 1773, 1777-1778, 1799-1802, 1814, 1836-1848, 1856, 1891-1893, 1916-1922, 1929, 1983, 2006, 2011-2012, 2027, 2033, 2043, 2133, 2137, 2148, 2172, 2185, 2193-2203, 2241-2245
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                                 113       4  96.46%   171, 329-331
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                                        10399    1233  88.14%

Diff against develop

Filename       Stmts    Miss  Cover
-----------  -------  ------  -------
utils/s3.py        0      -1  +0.42%
TOTAL              0      -1  +0.01%

Results for commit: 1a123e3

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@eodag-bot
Copy link
Copy Markdown
Collaborator

eodag-bot commented Apr 8, 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                                      307      24  92.18%   70-72, 75, 78, 81, 85, 89, 93-95, 590-592, 714-716, 735, 743, 773-778, 780
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                804      58  92.79%   125-127, 221-226, 250, 308-309, 397, 418, 470-471, 508, 529-532, 555, 567-568, 609, 632, 657-660, 662-667, 732-737, 746, 752, 768, 776, 1008, 1161, 1183, 1192-1196, 1213-1218, 1351, 1374, 1383, 1405, 1410, 1462, 1534, 1555, 1581, 1595, 1620, 1666, 1735, 1810
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                          101       8  92.08%   178-180, 228-229, 255-257
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                         196      18  90.82%   109, 113, 137-143, 200-203, 296, 317, 442, 492, 525-528, 537
plugins/search/build_search_result.py          505      83  83.56%   259-260, 296, 300, 320, 550-561, 576-578, 701, 725, 727, 794, 802-806, 827, 837, 863, 908, 933, 961, 979-994, 1044, 1069, 1072, 1076, 1085, 1091, 1129-1150, 1191, 1218-1219, 1228-1237, 1301, 1316, 1322, 1341-1350, 1471-1472, 1516, 1525-1527, 1584, 1632-1642
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                     836      95  88.64%   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, 1770, 1773, 1777-1778, 1799-1802, 1814, 1836-1848, 1856, 1891-1893, 1916-1922, 1929, 1983, 2006, 2011-2012, 2027, 2033, 2043, 2133, 2137, 2148, 2172, 2185, 2193-2203, 2241-2245
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                                 113       4  96.46%   171, 329-331
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                                        10399    1235  88.12%

Diff against develop

Filename      Stmts    Miss  Cover
----------  -------  ------  --------
TOTAL             0       0  +100.00%

Results for commit: 1a123e3

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@timothey-cs timothey-cs force-pushed the 1538-cop_dataspace_s3 branch 2 times, most recently from ede8749 to 7eba2d6 Compare April 9, 2026 12:07
@timothey-cs timothey-cs force-pushed the 1538-cop_dataspace_s3 branch from 7eba2d6 to 1a123e3 Compare April 9, 2026 12:28
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.

COP Dataspace fails to get access token if 2FA is active on the account

3 participants