Skip to content

fix(core): advanced assets harmonisation using properties#2003

Merged
sbrunato merged 1 commit into
developfrom
feat-use-proerties-to-choose-asset-harmonization-driver-1998
Feb 6, 2026
Merged

fix(core): advanced assets harmonisation using properties#2003
sbrunato merged 1 commit into
developfrom
feat-use-proerties-to-choose-asset-harmonization-driver-1998

Conversation

@pdavid-cssopra

@pdavid-cssopra pdavid-cssopra commented Jan 19, 2026

Copy link
Copy Markdown
Collaborator

Fixes #1998

~ refactor(driver): set match method deported into each driver
~ feat: update Sentinel2Driver.criteria_match, including new fields match
~ feat: steadify match criteria (sensitive case, chunk, junk characters)

  • test: update tests with match and mismatch criterias

@github-actions

github-actions Bot commented Jan 19, 2026

Copy link
Copy Markdown
Contributor

Test Results

    4 files  ±0      4 suites  ±0   3m 36s ⏱️ +20s
  684 tests +1    683 ✅ +1  1 💤 ±0  0 ❌ ±0 
2 778 runs  +4  2 772 ✅ +4  6 💤 ±0  0 ❌ ±0 

Results for commit cc7f8f1. ± Comparison against base commit 780eabf.

♻️ This comment has been updated with latest results.

@eodag-bot

eodag-bot commented Jan 19, 2026

Copy link
Copy Markdown
Collaborator

badge

Code Coverage (Ubuntu)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         247      10  95.95%   104-115, 629
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                                    758      50  93.40%   266, 552, 600, 643, 683, 703, 744-749, 774, 858-877, 891, 897, 1050, 1055, 1150, 1287, 1330, 1343, 1410, 1424-1425, 1501-1506, 1518-1521, 2009, 2131, 2194-2195, 2224-2225
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      19  89.50%   104, 113, 120, 134, 178, 195, 295, 350-353, 423, 428-429, 463, 477, 500-501, 507
api/product/__init__.py                         18       2  88.89%   57, 59
api/product/_assets.py                          52       4  92.31%   97, 191, 194-198
api/product/_product.py                        248      20  91.94%   189, 304-305, 323-324, 433, 462, 469, 576, 596, 619-622, 631-634, 688, 754, 766
api/product/metadata_mapping.py                788      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, 1787
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       4  81.82%   48, 55, 68-69
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      10  90.10%   178-180, 228-229, 255-257, 288-289
plugins/apis/usgs.py                           182      25  86.26%   161, 267, 301, 343-345, 350, 378-379, 384, 414-421, 432-437, 459-465
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%   55-60, 63-64
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                       559      78  86.05%   229, 271-274, 336-339, 342, 349-354, 385-387, 404, 419, 479, 514, 528, 542, 550-554, 570-575, 586, 605, 642-645, 666, 676, 683, 703, 843, 875, 905-914, 950, 975-976, 995-1000, 1009, 1024-1026, 1030, 1033, 1048-1049, 1133, 1185, 1227-1228, 1240, 1250, 1300-1301, 1331, 1351, 1392-1394, 1448-1449
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         191      18  90.58%   108, 112, 136-142, 199-202, 295, 316, 441, 491, 513-516, 525
plugins/search/build_search_result.py          504      83  83.53%   259-260, 296, 300, 320, 550-561, 576-578, 701, 725, 727, 794, 802-806, 827, 837, 863, 908, 932, 960, 978-993, 1043, 1068, 1071, 1075, 1084, 1090, 1128-1149, 1190, 1217-1218, 1227-1236, 1300, 1315, 1321, 1340-1349, 1470-1471, 1515, 1524-1526, 1583, 1631-1641
plugins/search/cop_marine.py                   268      56  79.10%   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                     822      94  88.56%   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, 2203-2207
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                              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                             88       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
types/stac_extensions.py                       178       1  99.44%   282
types/stac_metadata.py                         116      16  86.21%   92, 113-114, 147, 177-191, 200-207
utils/__init__.py                              610      45  92.62%   71, 172, 205-206, 215-241, 244, 259, 339-343, 418-422, 502, 542-543, 572, 947-950, 958-959, 1001, 1020-1021, 1050, 1068-1069, 1181, 1269, 1433, 1522, 1537, 1546, 1558, 1748
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                                    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                                        10081    1326  86.85%

Diff against develop

Filename                            Stmts    Miss  Cover
--------------------------------  -------  ------  --------
api/product/_product.py                +5       0  +0.17%
api/product/drivers/__init__.py        -1       0  +100.00%
api/product/drivers/base.py            +5       0  +100.00%
api/product/drivers/generic.py         +4       0  +100.00%
api/product/drivers/sentinel1.py      +18       0  +100.00%
api/product/drivers/sentinel2.py      +18       0  +100.00%
TOTAL                                 +49       0  +0.07%

Results for commit: cc7f8f1

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@pdavid-cssopra pdavid-cssopra force-pushed the feat-use-proerties-to-choose-asset-harmonization-driver-1998 branch from 724f8b5 to 106eccc Compare January 19, 2026 17:06
@eodag-bot

eodag-bot commented Jan 19, 2026

Copy link
Copy Markdown
Collaborator

badge

Code Coverage (Windows)

Details
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         247      10  95.95%   104-115, 629
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                                    758      50  93.40%   266, 552, 600, 643, 683, 703, 744-749, 774, 858-877, 891, 897, 1050, 1055, 1150, 1287, 1330, 1343, 1410, 1424-1425, 1501-1506, 1518-1521, 2009, 2131, 2194-2195, 2224-2225
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      19  89.50%   104, 113, 120, 134, 178, 195, 295, 350-353, 423, 428-429, 463, 477, 500-501, 507
api/product/__init__.py                         18       2  88.89%   57, 59
api/product/_assets.py                          52       4  92.31%   97, 191, 194-198
api/product/_product.py                        248      20  91.94%   189, 304-305, 323-324, 433, 462, 469, 576, 596, 619-622, 631-634, 688, 754, 766
api/product/metadata_mapping.py                788      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, 1787
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       4  81.82%   48, 55, 68-69
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      10  90.10%   178-180, 228-229, 255-257, 288-289
plugins/apis/usgs.py                           182      25  86.26%   161, 267, 301, 343-345, 350, 378-379, 384, 414-421, 432-437, 459-465
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%   55-60, 63-64
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      37  86.79%   133, 162, 229-231, 309-310, 368-369, 411, 415-426, 440, 517-521, 551, 586-587, 612-621, 680, 701, 723, 731, 765
plugins/download/http.py                       559      78  86.05%   229, 271-274, 336-339, 342, 349-354, 385-387, 404, 419, 479, 514, 528, 542, 550-554, 570-575, 586, 605, 642-645, 666, 676, 683, 703, 843, 875, 905-914, 950, 975-976, 995-1000, 1009, 1024-1026, 1030, 1033, 1048-1049, 1133, 1185, 1227-1228, 1240, 1250, 1300-1301, 1331, 1351, 1392-1394, 1448-1449
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         191      18  90.58%   108, 112, 136-142, 199-202, 295, 316, 441, 491, 513-516, 525
plugins/search/build_search_result.py          504      83  83.53%   259-260, 296, 300, 320, 550-561, 576-578, 701, 725, 727, 794, 802-806, 827, 837, 863, 908, 932, 960, 978-993, 1043, 1068, 1071, 1075, 1084, 1090, 1128-1149, 1190, 1217-1218, 1227-1236, 1300, 1315, 1321, 1340-1349, 1470-1471, 1515, 1524-1526, 1583, 1631-1641
plugins/search/cop_marine.py                   268      56  79.10%   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                     822      94  88.56%   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, 2203-2207
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                              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                             88       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
types/stac_extensions.py                       178       1  99.44%   282
types/stac_metadata.py                         116      16  86.21%   92, 113-114, 147, 177-191, 200-207
utils/__init__.py                              610      45  92.62%   71, 172, 205-206, 215-241, 244, 259, 339-343, 418-422, 502, 542-543, 572, 947-950, 958-959, 1001, 1020-1021, 1050, 1068-1069, 1181, 1269, 1433, 1522, 1537, 1546, 1558, 1748
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                                    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                                        10081    1328  86.83%

Diff against develop

Filename                            Stmts    Miss  Cover
--------------------------------  -------  ------  --------
api/product/_product.py                +5       0  +0.17%
api/product/drivers/__init__.py        -1       0  +100.00%
api/product/drivers/base.py            +5       0  +100.00%
api/product/drivers/generic.py         +4       0  +100.00%
api/product/drivers/sentinel1.py      +18       0  +100.00%
api/product/drivers/sentinel2.py      +18       0  +100.00%
TOTAL                                 +49       0  +0.07%

Results for commit: cc7f8f1

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@pdavid-cssopra pdavid-cssopra force-pushed the feat-use-proerties-to-choose-asset-harmonization-driver-1998 branch 5 times, most recently from ca2a490 to 5e4de1c Compare January 23, 2026 11:04
@pdavid-cssopra pdavid-cssopra force-pushed the feat-use-proerties-to-choose-asset-harmonization-driver-1998 branch 4 times, most recently from 1ad66ee to 081525c Compare January 30, 2026 15:03
Comment thread eodag/api/product/drivers/base.py Outdated
Comment thread eodag/api/product/drivers/generic.py Outdated
Comment thread eodag/api/product/drivers/sentinel1.py Outdated
Comment thread eodag/api/product/drivers/sentinel2.py Outdated
Comment thread tests/units/test_eoproduct_driver_base.py Outdated
Comment thread eodag/api/product/drivers/base.py Outdated
Comment thread eodag/api/product/drivers/generic.py
Comment thread eodag/api/product/drivers/sentinel1.py
@sbrunato sbrunato marked this pull request as draft February 2, 2026 10:19
@pdavid-cssopra pdavid-cssopra force-pushed the feat-use-proerties-to-choose-asset-harmonization-driver-1998 branch from a158d5e to 46eaa90 Compare February 2, 2026 11:01
Comment thread eodag/api/product/drivers/sentinel1.py
@pdavid-cssopra pdavid-cssopra force-pushed the feat-use-proerties-to-choose-asset-harmonization-driver-1998 branch 2 times, most recently from 177801e to 813e0b2 Compare February 3, 2026 14:59
@pdavid-cssopra pdavid-cssopra marked this pull request as ready for review February 5, 2026 11:32
~ refactor(driver): set match method deported into each driver
~ feat: update Sentinel2Driver.criteria_match, including new fields match
~ feat: steadify match criteria (sensitive case, chunk, junk characters)
+ test: update tests with match and mismatch criterias
@pdavid-cssopra pdavid-cssopra force-pushed the feat-use-proerties-to-choose-asset-harmonization-driver-1998 branch from 813e0b2 to cc7f8f1 Compare February 6, 2026 13:49
@sbrunato sbrunato changed the title feat(driver): use properties to choose asset harmonisation drive #1998 fix(driver): advanced assets harmonisation using properties Feb 6, 2026
@sbrunato sbrunato changed the title fix(driver): advanced assets harmonisation using properties fix(core): advanced assets harmonisation using properties Feb 6, 2026
@sbrunato sbrunato merged commit 49e8f9f into develop Feb 6, 2026
13 checks passed
@sbrunato sbrunato deleted the feat-use-proerties-to-choose-asset-harmonization-driver-1998 branch February 6, 2026 14:17
@sbrunato sbrunato added this to the 4.0.0b2.dev milestone Feb 6, 2026
@pdavid-cssopra pdavid-cssopra self-assigned this Feb 26, 2026
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.

use properties to choose asset harmonization driver

3 participants