Skip to content

Conversation

@cauriol
Copy link
Collaborator

@cauriol cauriol commented Jan 5, 2026

This PR fixes asset naming issues for Sentinel-1 assets coming from Planetary Computer and creodias_s3.

Asset names are now normalized to the name.extension format.
For example:

previ.png?foo → previ.png

calibration-vh-12a34b.xml → calibration-vh.xml

This PR updates the ASSET_KEYS_PATTERNS_ROLES and REPLACE_PATTERNS lists in sentinel1.py and adds new tests.

@cauriol cauriol self-assigned this Jan 5, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Jan 5, 2026

Test Results

    4 files  ±0      4 suites  ±0   3m 1s ⏱️ +2s
  670 tests ±0    669 ✅ ±0  1 💤 ±0  0 ❌ ±0 
2 722 runs  ±0  2 716 ✅ ±0  6 💤 ±0  0 ❌ ±0 

Results for commit 81a6f47. ± Comparison against base commit 652c927.

♻️ This comment has been updated with latest results.

@eodag-bot
Copy link
Collaborator

eodag-bot commented Jan 5, 2026

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                                      302      24  92.05%   69-71, 74, 77, 80, 84, 88, 92-94, 582-584, 689-691, 710, 718, 748-753, 755
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/collection.py                              125       7  94.40%   173, 209, 212, 302, 305, 323, 326
api/core.py                                    739      50  93.23%   262, 548, 596, 639, 679, 699, 740-745, 770, 854-873, 887, 893, 1046, 1051, 1146, 1283, 1326, 1339, 1406, 1420-1421, 1497-1502, 1514-1517, 1850, 2092, 2155-2156, 2185-2186
api/provider.py                                380      35  90.79%   186, 190-191, 316-337, 405, 520, 524-525, 530-533, 544, 620-630, 820-821, 869, 876, 907-910, 946-947, 955-956
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                        217      18  91.71%   177, 246-247, 265-266, 375, 404, 411, 518, 538, 561-564, 573-576, 622
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      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       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                        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                       557      78  86.00%   237, 279-282, 344-347, 350, 357-362, 393-395, 412, 427, 485, 520, 534, 548, 556-560, 576-581, 592, 611, 648-651, 672, 682, 689, 709, 849, 881, 911-920, 956, 981-982, 1001-1006, 1015, 1030-1032, 1036, 1039, 1054-1055, 1139, 1191, 1233-1234, 1246, 1256, 1306-1307, 1337, 1357, 1398-1400, 1454-1455
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         188      18  90.43%   107, 111, 135-141, 198-201, 294, 315, 439, 486, 508-511, 520
plugins/search/build_search_result.py          526      81  84.60%   254-255, 291, 294, 332, 335, 366-368, 611-622, 752, 776, 778, 845, 853-857, 878, 890, 916, 961, 985, 1019-1034, 1082, 1107, 1110, 1114, 1154-1174, 1215, 1242-1243, 1252-1261, 1325, 1340, 1346, 1365-1374, 1495-1496, 1540, 1549-1551, 1608, 1656-1666
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                     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                                   39      19  51.28%   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                                  61       4  93.44%   75-77, 150
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                                         9592    1300  86.45%

Diff against develop

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

Results for commit: 81a6f47

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@eodag-bot
Copy link
Collaborator

eodag-bot commented Jan 5, 2026

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                                      302      24  92.05%   69-71, 74, 77, 80, 84, 88, 92-94, 582-584, 689-691, 710, 718, 748-753, 755
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/collection.py                              125       7  94.40%   173, 209, 212, 302, 305, 323, 326
api/core.py                                    739      50  93.23%   262, 548, 596, 639, 679, 699, 740-745, 770, 854-873, 887, 893, 1046, 1051, 1146, 1283, 1326, 1339, 1406, 1420-1421, 1497-1502, 1514-1517, 1850, 2092, 2155-2156, 2185-2186
api/provider.py                                380      35  90.79%   186, 190-191, 316-337, 405, 520, 524-525, 530-533, 544, 620-630, 820-821, 869, 876, 907-910, 946-947, 955-956
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                        217      18  91.71%   177, 246-247, 265-266, 375, 404, 411, 518, 538, 561-564, 573-576, 622
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      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       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                        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                       557      78  86.00%   237, 279-282, 344-347, 350, 357-362, 393-395, 412, 427, 485, 520, 534, 548, 556-560, 576-581, 592, 611, 648-651, 672, 682, 689, 709, 849, 881, 911-920, 956, 981-982, 1001-1006, 1015, 1030-1032, 1036, 1039, 1054-1055, 1139, 1191, 1233-1234, 1246, 1256, 1306-1307, 1337, 1357, 1398-1400, 1454-1455
plugins/search/__init__.py                      25       0  100.00%
plugins/search/base.py                         188      18  90.43%   107, 111, 135-141, 198-201, 294, 315, 439, 486, 508-511, 520
plugins/search/build_search_result.py          526      81  84.60%   254-255, 291, 294, 332, 335, 366-368, 611-622, 752, 776, 778, 845, 853-857, 878, 890, 916, 961, 985, 1019-1034, 1082, 1107, 1110, 1114, 1154-1174, 1215, 1242-1243, 1252-1261, 1325, 1340, 1346, 1365-1374, 1495-1496, 1540, 1549-1551, 1608, 1656-1666
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                     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                                   39      19  51.28%   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                                  61       4  93.44%   75-77, 150
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                                         9592    1302  86.43%

Diff against develop

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

Results for commit: 81a6f47

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@cauriol cauriol requested a review from jlahovnik January 6, 2026 09:13
@cauriol cauriol marked this pull request as ready for review January 6, 2026 09:13
@cauriol cauriol marked this pull request as draft January 6, 2026 16:12
@cauriol cauriol marked this pull request as ready for review January 6, 2026 17:28
Copy link
Collaborator

@jlahovnik jlahovnik left a comment

Choose a reason for hiding this comment

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

Please add a test case and update the PR description!

@cauriol cauriol marked this pull request as draft January 7, 2026 10:38
@cauriol cauriol force-pushed the asset_name_harmonisation branch from f71a118 to 774456a Compare January 7, 2026 10:46
@cauriol cauriol marked this pull request as ready for review January 7, 2026 15:05
@cauriol cauriol requested a review from jlahovnik January 7, 2026 15:05
@jlahovnik jlahovnik requested a review from sbrunato January 8, 2026 09:26
@cauriol cauriol changed the title fix: asset name harmonisation for EO.ESA.DAT.SENTINEL-1.L1_GRD fix: asset name harmonisation for S1_SAR_GRD Jan 8, 2026
Copy link
Collaborator

Choose a reason for hiding this comment

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

on S1_SAR_GRD from earth_search, manifest.safe gets renamed to manifest.s when it shouldn't

self.product.driver.guess_asset_key_and_roles(
"s3://foo/1/28/0/preview.png?collection=foo&items=foo", self.product
),
("previ.png", ["overview"]),
Copy link
Collaborator

Choose a reason for hiding this comment

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

previ.png is not the expected output. Please update driver patterns of chars that could be included in other words (ew, iw, sm, raw) with something like r"(?<![A-Za-z])ew(?![A-Za-z])", to avoid letters on both sides

Copy link
Collaborator

Choose a reason for hiding this comment

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

these fixes should also be applied to other drivers

@sbrunato sbrunato marked this pull request as draft January 9, 2026 08:52
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.

5 participants