Repository: CS-SI/eodag
Pull request #1259 (2024-07-12 07:40:38)

fix(plugins): default disabled product-types discovery on StaticStacSearch
If not specified in provider configuration, product-types discovery will be disabled by default when using `StaticStacSearch` plugin, in order to avoid using pre-configured and not adapted STAC API endpoint

github-actions[bot]: ## Test Results
    4 files  ±0      4 suites  ±0   6m 5s :stopwatch: -2s
  551 tests ±0    548 :white_check_mark: ±0    3 :zzz: ±0  0 :x: ±0 
2 204 runs  ±0  2 102 :white_check_mark: ±0  102 :zzz: ±0  0 :x: ±0 

Results for commit 707eab78. ± Comparison against base commit f4575270.

[test-results]:data:application/gzip;base64,H4sIAAHfkGYC/03MSw7CMAxF0a1UGTNwk6Y1bAYF15Ei+kH5jCr2TgJt6PAey28T1k0cxK3pLo0IycUaY/ImunXJqXqdIZ9iOWrdHnUPiahQh396ulf5qWCNmzJABfZ+9bv4tJRNKaHb69iULchKv82TnEa/fd6kdZ5dzCEGGNg8BjQE2GqC3iKjRGYajVE8oqYrWVDi/QELBicXCQEAAA==

github-actions[bot]: ![badge](https://raw.githubusercontent.com/CS-SI/eodag/_xml_coverage_reports/data/static-stac-product-types-discovery/./badge.svg)


## Code Coverage (Ubuntu)

<details>


```
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         305      51  83.28%   60, 654-700, 802-853, 857
config.py                                      351      27  92.31%   81-83, 92, 100, 104-106, 183, 195, 460-462, 526-529, 576-577, 586-587, 666, 735-740, 742
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/core.py                                    762      84  88.98%   91-100, 373, 598, 642-645, 683, 720, 750, 798, 802-807, 833, 929, 1012, 1149, 1239-1251, 1291, 1293, 1321, 1325-1336, 1349-1355, 1445-1448, 1481-1501, 1557, 1574-1577, 1589-1592, 1614-1621, 1947, 1980-1986, 2253, 2257-2260, 2274-2276, 2311
api/search_result.py                            54       6  88.89%   33-35, 75, 84, 91, 105
api/product/__init__.py                          6       0  100.00%
api/product/_assets.py                          52       8  84.62%   28-30, 80, 157, 167, 170-174
api/product/_product.py                        195      27  86.15%   59-66, 70-72, 242-243, 325, 354, 415, 429-432, 445, 469-472, 515-521
api/product/metadata_mapping.py                678      83  87.76%   67-69, 131-133, 234, 266-267, 313-314, 324-336, 338, 349, 355-367, 412-413, 450, 471-474, 497, 505-506, 582-583, 607-608, 614-617, 632-633, 782, 828, 1002-1007, 1138, 1152-1172, 1192, 1197, 1307, 1329, 1343, 1356-1375, 1414, 1466, 1504-1508, 1527
api/product/drivers/__init__.py                  6       0  100.00%
api/product/drivers/base.py                      8       2  75.00%   23, 41
plugins/__init__.py                              0       0  100.00%
plugins/base.py                                 23       3  86.96%   25, 48, 55
plugins/manager.py                             134      15  88.81%   49-51, 105-110, 156, 197, 219, 223, 249, 288-289
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                           99      15  84.85%   46-54, 150-152, 199-200, 226-228
plugins/apis/usgs.py                           175      36  79.43%   60-65, 132, 205, 239, 274-276, 281, 307-308, 313, 343-350, 361-366, 388-394, 396-402, 425
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py              20       2  90.00%   25-27
plugins/authentication/base.py                  19       3  84.21%   26, 34, 47
plugins/authentication/generic.py               16       3  81.25%   28, 40, 50
plugins/authentication/header.py                21       1  95.24%   28
plugins/authentication/keycloak.py              49       6  87.76%   33-35, 132, 156-161
plugins/authentication/oauth.py                 15       8  46.67%   25, 32-34, 38-41
plugins/authentication/openid_connect.py       185      19  89.73%   41-43, 119, 133-158, 166, 320-323, 347
plugins/authentication/qsauth.py                36       2  94.44%   32, 83
plugins/authentication/sas_auth.py              49       2  95.92%   32, 76
plugins/authentication/token.py                 90      17  81.11%   35-37, 79, 107, 109, 131-143, 198-201
plugins/authentication/token_exchange.py        35      19  45.71%   74-80, 92-120
plugins/crunch/__init__.py                       0       0  100.00%
plugins/crunch/base.py                          12       2  83.33%   26, 40
plugins/crunch/filter_date.py                   61      15  75.41%   30, 51-56, 70, 79, 88, 91, 103-105, 114-116, 123
plugins/crunch/filter_latest_intersect.py       50      10  80.00%   32-34, 51-52, 71, 80-83, 85, 92-95
plugins/crunch/filter_latest_tpl_name.py        33       2  93.94%   28, 87
plugins/crunch/filter_overlap.py                68      19  72.06%   28-30, 33, 72-75, 82-85, 91, 99, 110-126
plugins/crunch/filter_property.py               32       8  75.00%   29, 58-63, 66-67, 83-87
plugins/download/__init__.py                     0       0  100.00%
plugins/download/aws.py                        492     165  66.46%   77-83, 272, 285, 352-355, 369-373, 419-421, 425, 459-460, 466-470, 503, 538, 542, 549, 579-587, 591, 629-637, 644-646, 687-761, 779-840, 851-856, 872-885, 914, 929-931, 934, 944-952, 960-973, 983-1002, 1009-1021, 1062, 1088, 1133-1135, 1355
plugins/download/base.py                       260      57  78.08%   58-64, 145, 180, 319-320, 340-346, 377-381, 387-388, 432, 435-449, 461, 465, 538-542, 572-573, 581-598, 605-613, 615-619, 666, 688, 710, 718
plugins/download/creodias_s3.py                 17       9  47.06%   44-58
plugins/download/http.py                       535     132  75.33%   86-92, 203-215, 217-218, 253-256, 320-323, 325-326, 333-338, 356-371, 388-390, 402, 450, 457-463, 481, 495, 509, 517-519, 535-540, 551, 569, 611-615, 637, 677, 722, 736-742, 778-842, 860, 893-902, 928-929, 956-961, 967, 970, 986, 1003-1004, 1031-1032, 1039, 1101-1107, 1162-1163, 1169, 1179, 1213, 1249, 1267-1283
plugins/download/s3rest.py                     119      27  77.31%   55-58, 121, 162, 197, 227-234, 237-239, 243, 256-262, 270-271, 274-278, 301, 322-325
plugins/search/__init__.py                      26       3  88.46%   27-31
plugins/search/base.py                         133      13  90.23%   48-53, 104, 108, 121, 271, 291, 350-351, 371, 380
plugins/search/build_search_result.py          183      24  86.89%   62, 97, 141-142, 148, 159, 295-298, 327, 384-401, 463, 466, 476, 493, 521, 523
plugins/search/cop_marine.py                   200      49  75.50%   43-44, 55, 63-65, 71-72, 88, 90, 93, 128-130, 142-143, 183-192, 196, 199, 203, 221, 251, 255, 270, 274, 278, 282, 286-290, 296-299, 302-316, 333, 356, 359, 365
plugins/search/creodias_s3.py                   55       3  94.55%   56, 74, 108
plugins/search/csw.py                          108      83  23.15%   44-46, 58-59, 63-64, 72-120, 126-139, 147-179, 197-238
plugins/search/data_request_search.py          202      68  66.34%   53, 90-93, 109, 121, 125-126, 137, 142, 147, 154, 167-170, 224-225, 229, 239-245, 250, 276-279, 287-298, 315, 317, 324-325, 327-328, 346-350, 383, 393, 404, 417, 423-438, 443
plugins/search/qssearch.py                     655      77  88.24%   103, 387, 391-397, 405-406, 512-518, 568, 584, 594, 621, 623, 666-669, 743-744, 792, 811, 826, 884, 905, 908-909, 918-919, 928-929, 938-939, 966, 1037-1042, 1046-1055, 1090, 1164, 1213, 1287-1291, 1357-1358, 1379, 1406-1418, 1425, 1457-1459, 1469-1475, 1519, 1534, 1556, 1665-1675
plugins/search/static_stac_search.py            75      12  84.00%   37-38, 101-128, 144, 157
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                                  26       0  100.00%
rest/constants.py                                7       0  100.00%
rest/core.py                                   238      30  87.39%   83-87, 281, 365, 475, 702, 709-757
rest/server.py                                 286      55  80.77%   81-82, 108, 131-133, 246-248, 304-305, 317-333, 425-430, 458, 626-633, 662, 706-707, 730, 803-805, 822-827, 856, 858, 862-863, 867-868
rest/stac.py                                   466     123  73.61%   65-67, 320, 342, 390-393, 417-443, 448-454, 477-479, 502, 537-538, 566, 579, 624-664, 692-708, 787-800, 807, 863-864, 931, 999-1001, 1220, 1230-1242, 1255-1277, 1291-1336, 1498-1499
rest/types/__init__.py                           0       0  100.00%
rest/types/collections_search.py                13      13  0.00%    18-44
rest/types/eodag_search.py                     184       9  95.11%   52-55, 235-239, 292, 295, 363
rest/types/queryables.py                        58       2  96.55%   38, 172
rest/types/stac_search.py                      131      11  91.60%   51-54, 133, 179, 194-196, 204, 208
rest/utils/__init__.py                          95      13  86.32%   51, 108-109, 128-130, 182, 192-206
rest/utils/cql_evaluate.py                      48       5  89.58%   69, 76, 90, 97, 105
rest/utils/rfc3339.py                           23       3  86.96%   49, 61, 63
types/__init__.py                              110      11  90.00%   53, 70, 129-132, 199, 214-218, 245, 258
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                             81       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 104
types/whoosh.py                                 15       0  100.00%
utils/__init__.py                              503      39  92.25%   84, 89, 110-112, 193-194, 203-230, 233, 247, 329-333, 409-413, 434-436, 518, 533, 571-572, 968-971, 979-980, 1021-1022, 1204
utils/constraints.py                           119      37  68.91%   94-103, 144, 149, 153, 164, 190-192, 202, 216-232, 241-252
utils/exceptions.py                             37       2  94.59%   23, 93
utils/import_system.py                          30      20  33.33%   27, 67-81, 93-103
utils/logging.py                                29       1  96.55%   123
utils/notebook.py                               44      23  47.73%   25-29, 36-41, 58-62, 72-78, 83-87
utils/repr.py                                   30       8  73.33%   36, 38, 42, 76, 94-101
utils/requests.py                               55      11  80.00%   69, 96, 98, 100, 102, 104, 123, 128-130, 138
utils/rest.py                                   36       1  97.22%   57
utils/stac_reader.py                           111      45  59.46%   56-57, 63-85, 95-97, 101, 143, 159-162, 215-224, 234-264
TOTAL                                         9656    1731  82.07%
```

</details>


### Diff against develop

```
Filename                                Stmts    Miss  Cover
------------------------------------  -------  ------  --------
api/core.py                                +5      +1  -0.06%
plugins/search/static_stac_search.py       +2       0  +0.44%
TOTAL                                      +7      +1  +100.00%
```


Results for commit: 707eab78ac0815c06f8e828eecdaa3ed85c9cf03


_Minimum allowed coverage is `70%`_


:recycle: This comment has been updated with latest results


<!-- Sticky Pull Request Commentartifacts/unit-test-results-python3.12-ubuntu-latest/coverage.xml -->
github-actions[bot]: ![badge](https://raw.githubusercontent.com/CS-SI/eodag/_xml_coverage_reports_win/data/static-stac-product-types-discovery/./badge.svg)


## Code Coverage (Windows)

<details>


```
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         305      51  83.28%   60, 654-700, 802-853, 857
config.py                                      351      28  92.02%   81-83, 92, 100, 104-106, 183, 195, 460-462, 526-529, 576-577, 586-587, 666, 700, 735-740, 742
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/core.py                                    762      84  88.98%   91-100, 373, 598, 642-645, 683, 720, 750, 798, 802-807, 833, 929, 1012, 1149, 1239-1251, 1291, 1293, 1321, 1325-1336, 1349-1355, 1445-1448, 1481-1501, 1557, 1574-1577, 1589-1592, 1614-1621, 1947, 1980-1986, 2253, 2257-2260, 2274-2276, 2311
api/search_result.py                            54       6  88.89%   33-35, 75, 84, 91, 105
api/product/__init__.py                          6       0  100.00%
api/product/_assets.py                          52       8  84.62%   28-30, 80, 157, 167, 170-174
api/product/_product.py                        195      27  86.15%   59-66, 70-72, 242-243, 325, 354, 415, 429-432, 445, 469-472, 515-521
api/product/metadata_mapping.py                678      83  87.76%   67-69, 131-133, 234, 266-267, 313-314, 324-336, 338, 349, 355-367, 412-413, 450, 471-474, 497, 505-506, 582-583, 607-608, 614-617, 632-633, 782, 828, 1002-1007, 1138, 1152-1172, 1192, 1197, 1307, 1329, 1343, 1356-1375, 1414, 1466, 1504-1508, 1527
api/product/drivers/__init__.py                  6       0  100.00%
api/product/drivers/base.py                      8       2  75.00%   23, 41
plugins/__init__.py                              0       0  100.00%
plugins/base.py                                 23       4  82.61%   25, 48, 55, 68
plugins/manager.py                             134      15  88.81%   49-51, 105-110, 156, 197, 219, 223, 249, 288-289
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                           99      15  84.85%   46-54, 150-152, 199-200, 226-228
plugins/apis/usgs.py                           175      36  79.43%   60-65, 132, 205, 239, 274-276, 281, 307-308, 313, 343-350, 361-366, 388-394, 396-402, 425
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py              20       2  90.00%   25-27
plugins/authentication/base.py                  19       3  84.21%   26, 34, 47
plugins/authentication/generic.py               16       3  81.25%   28, 40, 50
plugins/authentication/header.py                21       1  95.24%   28
plugins/authentication/keycloak.py              49       6  87.76%   33-35, 132, 156-161
plugins/authentication/oauth.py                 15       8  46.67%   25, 32-34, 38-41
plugins/authentication/openid_connect.py       185      19  89.73%   41-43, 119, 133-158, 166, 320-323, 347
plugins/authentication/qsauth.py                36       2  94.44%   32, 83
plugins/authentication/sas_auth.py              49       2  95.92%   32, 76
plugins/authentication/token.py                 90      17  81.11%   35-37, 79, 107, 109, 131-143, 198-201
plugins/authentication/token_exchange.py        35      19  45.71%   74-80, 92-120
plugins/crunch/__init__.py                       0       0  100.00%
plugins/crunch/base.py                          12       2  83.33%   26, 40
plugins/crunch/filter_date.py                   61      15  75.41%   30, 51-56, 70, 79, 88, 91, 103-105, 114-116, 123
plugins/crunch/filter_latest_intersect.py       50      35  30.00%   32-34, 48-53, 69-114
plugins/crunch/filter_latest_tpl_name.py        33       2  93.94%   28, 87
plugins/crunch/filter_overlap.py                68      19  72.06%   28-30, 33, 72-75, 82-85, 91, 99, 110-126
plugins/crunch/filter_property.py               32       8  75.00%   29, 58-63, 66-67, 83-87
plugins/download/__init__.py                     0       0  100.00%
plugins/download/aws.py                        492     165  66.46%   77-83, 272, 285, 352-355, 369-373, 419-421, 425, 459-460, 466-470, 503, 538, 542, 549, 579-587, 591, 629-637, 644-646, 687-761, 779-840, 851-856, 872-885, 914, 929-931, 934, 944-952, 960-973, 983-1002, 1009-1021, 1062, 1088, 1133-1135, 1355
plugins/download/base.py                       260      59  77.31%   58-64, 145, 180, 250-252, 319-320, 340-346, 377-381, 387-388, 432, 435-449, 461, 465, 538-542, 572-573, 581-598, 605-613, 615-619, 666, 688, 710, 718
plugins/download/creodias_s3.py                 17       9  47.06%   44-58
plugins/download/http.py                       535     132  75.33%   86-92, 203-215, 217-218, 253-256, 320-323, 325-326, 333-338, 356-371, 388-390, 402, 450, 457-463, 481, 495, 509, 517-519, 535-540, 551, 569, 611-615, 637, 677, 722, 736-742, 778-842, 860, 893-902, 928-929, 956-961, 967, 970, 986, 1003-1004, 1031-1032, 1039, 1101-1107, 1162-1163, 1169, 1179, 1213, 1249, 1267-1283
plugins/download/s3rest.py                     119      27  77.31%   55-58, 121, 162, 197, 227-234, 237-239, 243, 256-262, 270-271, 274-278, 301, 322-325
plugins/search/__init__.py                      26       3  88.46%   27-31
plugins/search/base.py                         133      18  86.47%   48-53, 104, 108, 121, 271, 291, 350-351, 371, 374-382, 384
plugins/search/build_search_result.py          183      31  83.06%   62, 97, 141-142, 148, 159, 295-298, 327, 384-401, 463, 466, 476, 493, 513-528
plugins/search/cop_marine.py                   200      49  75.50%   43-44, 55, 63-65, 71-72, 88, 90, 93, 128-130, 142-143, 183-192, 196, 199, 203, 221, 251, 255, 270, 274, 278, 282, 286-290, 296-299, 302-316, 333, 356, 359, 365
plugins/search/creodias_s3.py                   55       3  94.55%   56, 74, 108
plugins/search/csw.py                          108      83  23.15%   44-46, 58-59, 63-64, 72-120, 126-139, 147-179, 197-238
plugins/search/data_request_search.py          202      68  66.34%   53, 90-93, 109, 121, 125-126, 137, 142, 147, 154, 167-170, 224-225, 229, 239-245, 250, 276-279, 287-298, 315, 317, 324-325, 327-328, 346-350, 383, 393, 404, 417, 423-438, 443
plugins/search/qssearch.py                     655     105  83.97%   103, 387, 391-397, 405-406, 512-518, 568, 571, 584, 594, 613-628, 666-669, 743-744, 792, 811, 826, 884, 905, 908-909, 918-919, 928-929, 938-939, 966, 1037-1042, 1046-1055, 1090, 1164, 1213, 1287-1291, 1357-1358, 1379, 1406-1418, 1425, 1457-1459, 1469-1475, 1519, 1534, 1556, 1624-1695
plugins/search/static_stac_search.py            75      12  84.00%   37-38, 101-128, 144, 157
rest/__init__.py                                 4       2  50.00%   21-22
rest/cache.py                                   33      22  33.33%   35-37, 44-70
rest/config.py                                  26       4  84.62%   34-36, 68
rest/constants.py                                7       0  100.00%
rest/core.py                                   238     153  35.71%   83-87, 167-248, 272-326, 339-375, 412-444, 464-480, 503-514, 523-559, 578, 624-663, 702, 709-757
rest/server.py                                 286     286  0.00%    18-879
rest/stac.py                                   466     394  15.45%   65-67, 128-134, 142-165, 196-201, 233, 253-376, 386-455, 473-512, 528-581, 591-614, 624-664, 692-708, 718, 734-737, 756-826, 844-880, 909-934, 942-958, 966-971, 981-1008, 1018-1020, 1028-1030, 1043-1045, 1059-1076, 1086-1107, 1117-1139, 1147-1164, 1187-1210, 1220, 1230-1242, 1255-1277, 1291-1336, 1344-1361, 1371-1529
rest/types/__init__.py                           0       0  100.00%
rest/types/collections_search.py                13      13  0.00%    18-44
rest/types/eodag_search.py                     184      19  89.67%   52-55, 125, 235-239, 272-274, 292, 295, 301, 305, 363, 375-378
rest/types/queryables.py                        58      14  75.86%   38, 51-52, 58-59, 65-66, 95-100, 109-110, 172
rest/types/stac_search.py                      131      22  83.21%   51-54, 131-133, 157-158, 163-164, 179, 194-196, 204, 208, 255-260
rest/utils/__init__.py                          95      31  67.37%   51, 79-85, 105, 108-109, 128-130, 143, 150, 175-183, 190-211
rest/utils/cql_evaluate.py                      48       5  89.58%   69, 76, 90, 97, 105
rest/utils/rfc3339.py                           23       6  73.91%   41, 44-45, 49, 61, 63
types/__init__.py                              110      36  67.27%   53, 66-70, 81-93, 120-122, 129-132, 172, 199, 209-221, 226, 245, 250, 258, 268
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                             81       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 104
types/whoosh.py                                 15       0  100.00%
utils/__init__.py                              503      41  91.85%   84, 89, 110-112, 193-194, 203-230, 233, 247, 329-333, 409-413, 434-436, 518, 533, 571-572, 968-971, 979-980, 1021-1022, 1055, 1204, 1380
utils/constraints.py                           119      37  68.91%   94-103, 144, 149, 153, 164, 190-192, 202, 216-232, 241-252
utils/exceptions.py                             37       2  94.59%   23, 93
utils/import_system.py                          30      20  33.33%   27, 67-81, 93-103
utils/logging.py                                29       1  96.55%   123
utils/notebook.py                               44      23  47.73%   25-29, 36-41, 58-62, 72-78, 83-87
utils/repr.py                                   30       8  73.33%   36, 38, 42, 76, 94-101
utils/requests.py                               55      11  80.00%   69, 96, 98, 100, 102, 104, 123, 128-130, 138
utils/rest.py                                   36       1  97.22%   57
utils/stac_reader.py                           111      45  59.46%   56-57, 63-85, 95-97, 101, 143, 159-162, 215-224, 234-264
TOTAL                                         9656    2525  73.85%
```

</details>


### Diff against develop

```
Filename                                Stmts    Miss  Cover
------------------------------------  -------  ------  -------
api/core.py                                +5      +1  -0.06%
plugins/search/static_stac_search.py       +2       0  +0.44%
TOTAL                                      +7      +1  +0.01%
```


Results for commit: 707eab78ac0815c06f8e828eecdaa3ed85c9cf03


_Minimum allowed coverage is `70%`_


:recycle: This comment has been updated with latest results


<!-- Sticky Pull Request Commentartifacts/unit-test-results-python3.12-windows-latest/coverage.xml -->

Patch:
diff --git a/eodag/api/core.py b/eodag/api/core.py
index b35b561a..0b934520 100644
--- a/eodag/api/core.py
+++ b/eodag/api/core.py
@@ -743,6 +743,11 @@ class EODataAccessGateway:
                 search_plugin: Union[Search, Api] = next(
                     self._plugins_manager.get_search_plugins(provider=provider)
                 )
+                # check after plugin init if still fetchable
+                if not getattr(search_plugin.config, "discover_product_types", {}).get(
+                    "fetch_url"
+                ):
+                    continue
                 # append auth to search plugin if needed
                 if getattr(search_plugin.config, "need_auth", False):
                     auth_plugin = self._plugins_manager.get_auth_plugin(
@@ -1598,6 +1603,10 @@ class EODataAccessGateway:
         plugins = self._plugins_manager.get_search_plugins(provider=provider)
         plugin = next(plugins)
 
+        # check after plugin init if still fetchable
+        if not getattr(plugin.config, "discover_product_types", {}).get("fetch_url"):
+            return None
+
         kwargs: Dict[str, Any] = {"productType": product_type}
 
         # append auth if needed
@@ -1726,18 +1735,15 @@ class EODataAccessGateway:
             product_type
             not in self._plugins_manager.product_type_to_provider_config_map.keys()
         ):
-            logger.debug(
-                f"Fetching external product types sources to find {product_type} product type"
-            )
             if provider:
                 # Try to get specific product type from external provider
+                logger.debug(f"Fetching {provider} to find {product_type} product type")
                 self._fetch_external_product_type(provider, product_type)
-            if (
-                not provider
-                or product_type
-                not in self._plugins_manager.product_type_to_provider_config_map.keys()
-            ):
+            if not provider:
                 # no provider or still not found -> fetch all external product types
+                logger.debug(
+                    f"Fetching external product types sources to find {product_type} product type"
+                )
                 self.fetch_product_types_list()
 
         preferred_provider = self.get_preferred_provider()[0]
diff --git a/eodag/plugins/search/static_stac_search.py b/eodag/plugins/search/static_stac_search.py
index 8fb4d163..80d838a3 100644
--- a/eodag/plugins/search/static_stac_search.py
+++ b/eodag/plugins/search/static_stac_search.py
@@ -85,6 +85,12 @@ class StaticStacSearch(StacSearch):
             "total_items_nb_key_path", "$.null"
         )
         self.config.__dict__["pagination"].setdefault("max_items_per_page", -1)
+        # disable product types discovery by default (if endpoints equals to STAC API default)
+        if (
+            getattr(self.config, "discover_product_types", {}).get("fetch_url")
+            == "{api_endpoint}/../collections"
+        ):
+            self.config.discover_product_types = {"fetch_url": None}
 
     def discover_product_types(self, **kwargs: Any) -> Optional[Dict[str, Any]]:
         """Fetch product types list from a static STAC Catalog provider using `discover_product_types` conf


Test patch:
diff --git a/tests/integration/test_search_stac_static.py b/tests/integration/test_search_stac_static.py
index 2a150b4f..041b0e02 100644
--- a/tests/integration/test_search_stac_static.py
+++ b/tests/integration/test_search_stac_static.py
@@ -152,12 +152,11 @@ class TestSearchStacStatic(unittest.TestCase):
             self.assertEqual(item.provider, self.stac_provider)
             self.assertEqual(item.product_type, self.product_type)
 
-    @mock.patch(
-        "eodag.api.core.EODataAccessGateway.fetch_product_types_list", autospec=True
-    )
-    def test_search_stac_static(self, mock_fetch_product_types_list):
+    def test_search_stac_static(self):
         """Use StaticStacSearch plugin to search all items"""
-        search_result = self.dag.search(count=True)
+        # mock on fetch_product_types_list not needed with provider specified,
+        #    as product types discovery must be disabled by default for stac static
+        search_result = self.dag.search(provider=self.static_stac_provider, count=True)
         self.assertEqual(len(search_result), self.root_cat_len)
         self.assertEqual(search_result.number_matched, self.root_cat_len)
         for item in search_result: