Skip to content

Conversation

@bjgiraudon
Copy link
Collaborator

@bjgiraudon bjgiraudon commented Jul 3, 2025

Description

This pull request introduces a new Provider class and a ProvidersDict collection to the EODAG codebase, replacing the previous usage of plain dictionaries for provider configurations. The new classes encapsulate provider metadata, configuration, and utility methods, making the codebase more modular, readable, and maintainable.

Key changes

  • Added a Provider dataclass that wraps provider configuration and exposes useful properties and methods.
  • Added a ProvidersDict class (subclassing UserDict) to manage collections of Provider objects, keyed by provider name.
  • Refactored credential sharing logic for clarity and maintainability, with helper methods for collecting and copying credentials.
  • Improved merging logic for provider configurations, ensuring that plugin configs are merged correctly and that new providers are added as needed.
  • Updated docstrings and type hints for clarity and consistency.
  • These changes are backward compatible with existing code that expects dictionary-like access to providers, but enable richer object-oriented usage and future extensibility.

Further comments

This is a foundational refactor that will make it easier to add new provider-related features, improve plugin management, and enhance the user and developer experience. The new structure also simplifies testing and debugging of provider logic.

Alternatives considered included using only plain dictionaries or a simple list, but these approaches would not provide the encapsulation and extensibility needed for future development.

Thank you!

@bjgiraudon bjgiraudon marked this pull request as draft July 3, 2025 08:16
@github-actions
Copy link
Contributor

github-actions bot commented Jul 3, 2025

Test Results

    4 files  ±0      4 suites  ±0   4m 0s ⏱️ +19s
  673 tests ±0    670 ✅ ±0    3 💤 ±0  0 ❌ ±0 
2 692 runs  ±0  2 590 ✅ ±0  102 💤 ±0  0 ❌ ±0 

Results for commit ff0f5f2. ± Comparison against base commit 1bdf8a9.

♻️ This comment has been updated with latest results.

@eodag-bot
Copy link
Collaborator

eodag-bot commented Jul 3, 2025

badge

Code Coverage (Ubuntu)

Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         322      65  79.81%   63-64, 88, 689-753, 855-906, 910
config.py                                      293      19  93.52%   68-70, 79, 87, 91-93, 559-561, 666-668, 725-730, 732
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/core.py                                    744      73  90.19%   234, 516, 564, 607, 647, 667, 708-713, 739, 822, 1150-1162, 1202, 1204, 1234, 1238-1249, 1262-1268, 1353-1356, 1393-1413, 1482-1487, 1499-1502, 1520-1532, 1827-1833, 2084, 2088-2092, 2101-2103, 2147-2148, 2177-2178
api/plugin.py                                  222     222  0.00%    18-568
api/provider.py                                351      50  85.75%   114-116, 161, 187, 191-192, 264, 272, 277, 282, 290-302, 357, 416-418, 475, 479-480, 485-488, 537-538, 549-550, 559, 567-577, 586, 644-652, 724-727, 763-764, 772-773
api/search_result.py                           126      11  91.27%   87, 96, 103, 117, 282, 287-288, 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                        215      19  91.16%   73-75, 241-242, 348, 375, 475, 493, 516-519, 528-531, 585-588
api/product/metadata_mapping.py                726      63  91.32%   123-125, 256-257, 314-326, 328, 339, 364, 416-417, 454, 475-478, 501, 512-514, 615-616, 640-641, 651-654, 669-670, 827, 878, 1031, 1040-1044, 1061-1066, 1193, 1207-1227, 1247, 1252, 1405, 1419, 1444, 1490, 1551, 1574-1575, 1595-1599, 1615, 1623
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                                 21       2  90.48%   48, 55
plugins/manager.py                             173      17  90.17%   102-107, 179, 201, 205, 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                           97      10  89.69%   165-167, 214-215, 241-243, 296-297
plugins/apis/usgs.py                           180      26  85.56%   156, 258, 292, 327-329, 334, 360-361, 366, 396-403, 414-419, 441-447, 478
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py              20       0  100.00%
plugins/authentication/base.py                  17       2  88.24%   45, 58
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, 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       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                        493     126  74.44%   271, 284, 353-356, 370-374, 466-468, 472, 505-506, 512-516, 547, 594, 598, 605, 635-643, 647, 682-690, 701-703, 764-852, 863-868, 921, 936-938, 941, 951-960, 968-982, 992-1015, 1022-1035, 1073, 1099, 1144-1146, 1366
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/creodias_s3.py                 26      10  61.54%   58-73
plugins/download/http.py                       545      99  81.83%   236, 278-281, 342-345, 348, 355-360, 391-393, 410, 425, 479, 514, 528, 542, 550-554, 570-575, 586, 604, 640-643, 664, 674, 681, 701, 779, 797-826, 833-848, 868, 898-907, 943, 968-969, 988-993, 1002, 1017-1019, 1023, 1026, 1041-1042, 1120-1121, 1125, 1177, 1223-1224, 1230, 1240, 1268, 1303, 1323, 1360-1362
plugins/download/s3rest.py                     122      26  78.69%   123, 157, 164, 199, 226-233, 236-238, 242, 253-259, 267-268, 271-275, 290-293, 302, 323-326
plugins/search/__init__.py                      22       0  100.00%
plugins/search/base.py                         170      14  91.76%   103, 107, 131-137, 274, 295, 434, 456-459, 468
plugins/search/build_search_result.py          479      56  88.31%   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                   25       1  96.00%   51
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      72  65.38%   195-198, 214, 225, 229-230, 241, 246, 251, 258, 271-274, 328-329, 333, 343-349, 354, 372-376, 392-395, 403-414, 431, 433, 440-443, 445-446, 464-468, 501, 511, 522, 535, 541-556, 561
plugins/search/qssearch.py                     724      95  86.88%   416-417, 461, 519, 533, 537-543, 558-559, 571-575, 632-648, 708-720, 765-768, 839-840, 891, 910, 917, 929, 986, 1007, 1010-1011, 1020-1021, 1030-1031, 1040-1041, 1068, 1154-1159, 1163-1172, 1206, 1229, 1302-1303, 1309, 1399, 1564, 1567, 1573-1574, 1595, 1623-1635, 1642, 1674-1676, 1686-1692, 1722, 1745, 1750-1751, 1766, 1782, 1869, 1876, 1887, 1910-1915, 1924, 1933
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                                   259      60  76.83%   257, 296, 311-347, 443, 480-519, 596, 626-629, 702, 709-756
rest/errors.py                                  72       5  93.06%   117, 127, 138, 163-164
rest/server.py                                 194      24  87.63%   86, 109-111, 285-290, 318, 518-520, 537-542, 571, 573, 577-578, 582-583
rest/stac.py                                   333      72  78.38%   200, 311, 333, 385-388, 415-442, 473-475, 498, 530-531, 613-653, 675-691, 783-787, 845-846, 856-861, 871-875, 924, 1014-1016
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                              587      44  92.50%   71, 197-198, 207-233, 236, 251, 331-335, 410-414, 433-435, 449, 541, 556, 596-597, 626, 1001-1004, 1012-1013, 1051-1052, 1099-1100, 1240, 1493, 1508, 1517, 1529
utils/cache.py                                  22       0  100.00%
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/rest.py                                   36       1  97.22%   55
utils/s3.py                                    249      12  95.18%   203-206, 248, 266, 492, 541-542, 605, 680, 706
utils/stac_reader.py                           113      44  61.06%   63-85, 95-97, 101, 138, 154-159, 206-216, 226-256
TOTAL                                        11227    1886  83.20%

Diff against develop

Filename                   Stmts    Miss  Cover
-----------------------  -------  ------  --------
config.py                   -159     -11  +0.16%
api/core.py                  -44      -3  -0.17%
api/plugin.py               +222    +222  +100.00%
api/provider.py             +351     +50  +85.75%
api/product/_product.py       +2       0  +0.08%
plugins/manager.py             0      -2  +1.15%
rest/stac.py                  +2      +1  -0.17%
TOTAL                       +374    +257  -1.79%

Results for commit: ff0f5f2

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@bjgiraudon bjgiraudon force-pushed the feat/provider-object branch from 8ad19ad to f87cbd1 Compare July 3, 2025 08:27
@alambare alambare force-pushed the feat/provider-object branch 9 times, most recently from c20a7dd to fb28190 Compare September 12, 2025 20:04
@alambare alambare self-assigned this Sep 15, 2025
@alambare alambare force-pushed the feat/provider-object branch 2 times, most recently from eee0906 to c59a562 Compare September 15, 2025 07:46
@eodag-bot
Copy link
Collaborator

eodag-bot commented Sep 15, 2025

badge

Code Coverage (Windows)

Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         322      65  79.81%   63-64, 88, 689-753, 855-906, 910
config.py                                      293      20  93.17%   68-70, 79, 87, 91-93, 559-561, 666-668, 695, 725-730, 732
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/core.py                                    744      73  90.19%   234, 516, 564, 607, 647, 667, 708-713, 739, 822, 1150-1162, 1202, 1204, 1234, 1238-1249, 1262-1268, 1353-1356, 1393-1413, 1482-1487, 1499-1502, 1520-1532, 1827-1833, 2084, 2088-2092, 2101-2103, 2147-2148, 2177-2178
api/plugin.py                                  222     222  0.00%    18-568
api/provider.py                                351      50  85.75%   114-116, 161, 187, 191-192, 264, 272, 277, 282, 290-302, 357, 416-418, 475, 479-480, 485-488, 537-538, 549-550, 559, 567-577, 586, 644-652, 724-727, 763-764, 772-773
api/search_result.py                           126      11  91.27%   87, 96, 103, 117, 282, 287-288, 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                        215      19  91.16%   73-75, 241-242, 348, 375, 475, 493, 516-519, 528-531, 585-588
api/product/metadata_mapping.py                726      63  91.32%   123-125, 256-257, 314-326, 328, 339, 364, 416-417, 454, 475-478, 501, 512-514, 615-616, 640-641, 651-654, 669-670, 827, 878, 1031, 1040-1044, 1061-1066, 1193, 1207-1227, 1247, 1252, 1405, 1419, 1444, 1490, 1551, 1574-1575, 1595-1599, 1615, 1623
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                                 21       3  85.71%   48, 55, 68
plugins/manager.py                             173      17  90.17%   102-107, 179, 201, 205, 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                           97      10  89.69%   165-167, 214-215, 241-243, 296-297
plugins/apis/usgs.py                           180      26  85.56%   156, 258, 292, 327-329, 334, 360-361, 366, 396-403, 414-419, 441-447, 478
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py              20       0  100.00%
plugins/authentication/base.py                  17       2  88.24%   45, 58
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, 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-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                        493     126  74.44%   271, 284, 353-356, 370-374, 466-468, 472, 505-506, 512-516, 547, 594, 598, 605, 635-643, 647, 682-690, 701-703, 764-852, 863-868, 921, 936-938, 941, 951-960, 968-982, 992-1015, 1022-1035, 1073, 1099, 1144-1146, 1366
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/creodias_s3.py                 26      10  61.54%   58-73
plugins/download/http.py                       545      99  81.83%   236, 278-281, 342-345, 348, 355-360, 391-393, 410, 425, 479, 514, 528, 542, 550-554, 570-575, 586, 604, 640-643, 664, 674, 681, 701, 779, 797-826, 833-848, 868, 898-907, 943, 968-969, 988-993, 1002, 1017-1019, 1023, 1026, 1041-1042, 1120-1121, 1125, 1177, 1223-1224, 1230, 1240, 1268, 1303, 1323, 1360-1362
plugins/download/s3rest.py                     122      26  78.69%   123, 157, 164, 199, 226-233, 236-238, 242, 253-259, 267-268, 271-275, 290-293, 302, 323-326
plugins/search/__init__.py                      22       0  100.00%
plugins/search/base.py                         170      14  91.76%   103, 107, 131-137, 274, 295, 434, 456-459, 468
plugins/search/build_search_result.py          479      63  86.85%   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                   25       1  96.00%   51
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      72  65.38%   195-198, 214, 225, 229-230, 241, 246, 251, 258, 271-274, 328-329, 333, 343-349, 354, 372-376, 392-395, 403-414, 431, 433, 440-443, 445-446, 464-468, 501, 511, 522, 535, 541-556, 561
plugins/search/qssearch.py                     724     107  85.22%   416-417, 461, 519, 533, 537-543, 558-559, 571-575, 632-648, 708-720, 765-768, 839-840, 891, 910, 917, 929, 986, 1007, 1010-1011, 1020-1021, 1030-1031, 1040-1041, 1068, 1154-1159, 1163-1172, 1206, 1229, 1302-1303, 1309, 1399, 1496-1500, 1564, 1567, 1573-1574, 1595, 1623-1635, 1642, 1674-1676, 1686-1692, 1722, 1745, 1750-1751, 1766, 1782, 1857, 1869, 1876, 1887, 1910-1915, 1924, 1932-1942, 1960, 1976-1980
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                                   259     151  41.70%   156, 158, 160, 163-164, 178-188, 197-198, 204, 207, 248-298, 311-347, 379-417, 432-448, 464-473, 480-519, 536, 578-663, 702, 709-756
rest/errors.py                                  72      51  29.17%   63, 68-111, 116-119, 126-129, 137-167, 175-180, 195-201
rest/server.py                                 194     194  0.00%    18-596
rest/stac.py                                   333      77  76.88%   200, 247, 311, 333, 385-388, 415-442, 473-475, 498, 530-531, 613-653, 675-691, 718, 783-787, 845-846, 852, 856-861, 871-875, 924, 962, 995, 1014-1016
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                              587      44  92.50%   71, 197-198, 207-233, 236, 251, 331-335, 410-414, 433-435, 449, 541, 556, 596-597, 626, 1001-1004, 1012-1013, 1051-1052, 1099-1100, 1240, 1493, 1508, 1517, 1529
utils/cache.py                                  22       0  100.00%
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/rest.py                                   36       1  97.22%   55
utils/s3.py                                    249      12  95.18%   203-206, 248, 266, 492, 541-542, 605, 680, 706
utils/stac_reader.py                           113      44  61.06%   63-85, 95-97, 101, 138, 154-159, 206-216, 226-256
TOTAL                                        11227    2309  79.43%

Diff against develop

Filename                   Stmts    Miss  Cover
-----------------------  -------  ------  --------
config.py                   -159     -11  +0.03%
api/core.py                  -44      -3  -0.17%
api/plugin.py               +222    +222  +100.00%
api/provider.py             +351     +50  +85.75%
api/product/_product.py       +2       0  +0.08%
plugins/manager.py             0      -2  +1.15%
rest/stac.py                  +2      +1  -0.16%
TOTAL                       +374    +257  -1.66%

Results for commit: ff0f5f2

Minimum allowed coverage is 70%

♻️ This comment has been updated with latest results

@alambare alambare force-pushed the feat/provider-object branch from 27a084c to 60c8f84 Compare September 15, 2025 09:58
@alambare alambare requested a review from sbrunato September 15, 2025 10:15
@alambare alambare marked this pull request as ready for review September 15, 2025 10:15
@alambare alambare force-pushed the feat/provider-object branch from e876631 to ff0f5f2 Compare September 15, 2025 10:33
@alambare alambare force-pushed the feat/provider-object branch from ff0f5f2 to 64474e6 Compare October 2, 2025 15:53
* add dedicated tests for Provider classes

* entry in docs api reference

* specific filter for name and group

* method to duplicate config with custom name

Signed-off-by: Aubin Lambaré <[email protected]>
@alambare alambare changed the base branch from develop to v4 October 3, 2025 15:43
@sbrunato sbrunato force-pushed the v4 branch 4 times, most recently from 6b412d0 to bfdbefa Compare October 13, 2025 13:11
@sbrunato sbrunato force-pushed the v4 branch 2 times, most recently from cc266a0 to de34cf5 Compare October 20, 2025 14:37
Base automatically changed from v4 to develop October 20, 2025 14:58
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.

8 participants