eodag 3.4.2__tar.gz → 3.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. {eodag-3.4.2 → eodag-3.5.0}/.github/pull_request_template.md +1 -1
  2. {eodag-3.4.2 → eodag-3.5.0}/.github/workflows/deploy.yml +6 -0
  3. {eodag-3.4.2 → eodag-3.5.0}/CHANGES.rst +117 -0
  4. {eodag-3.4.2/eodag.egg-info → eodag-3.5.0}/PKG-INFO +3 -3
  5. {eodag-3.4.2 → eodag-3.5.0}/README.rst +1 -1
  6. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/Chart.yaml +2 -2
  7. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/ingress.yaml +1 -5
  8. {eodag-3.4.2 → eodag-3.5.0}/docs/getting_started_guide/configure.rst +29 -4
  9. {eodag-3.4.2 → eodag-3.5.0}/docs/getting_started_guide/register.rst +1 -1
  10. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/2_providers_products_available.ipynb +1 -1
  11. {eodag-3.4.2 → eodag-3.5.0}/docs/stac_rest.rst +1 -1
  12. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/core.py +87 -12
  13. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/product/_product.py +6 -6
  14. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/product/metadata_mapping.py +37 -8
  15. {eodag-3.4.2 → eodag-3.5.0}/eodag/config.py +58 -12
  16. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/apis/ecmwf.py +5 -7
  17. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/apis/usgs.py +1 -1
  18. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/generic.py +5 -1
  19. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/keycloak.py +3 -1
  20. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/openid_connect.py +89 -33
  21. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/sas_auth.py +1 -1
  22. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/token.py +14 -2
  23. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/token_exchange.py +1 -0
  24. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/crunch/filter_date.py +4 -8
  25. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/crunch/filter_property.py +1 -1
  26. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/download/aws.py +4 -4
  27. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/download/base.py +14 -7
  28. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/download/http.py +18 -12
  29. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/download/s3rest.py +9 -5
  30. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/manager.py +1 -1
  31. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/base.py +6 -5
  32. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/build_search_result.py +14 -9
  33. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/data_request_search.py +18 -5
  34. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/qssearch.py +30 -31
  35. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/ext_product_types.json +1 -1
  36. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/providers.yml +6 -1
  37. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/core.py +3 -1
  38. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/errors.py +9 -4
  39. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/server.py +6 -4
  40. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/stac.py +24 -3
  41. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/types/queryables.py +2 -2
  42. {eodag-3.4.2 → eodag-3.5.0}/eodag/types/__init__.py +27 -14
  43. {eodag-3.4.2 → eodag-3.5.0}/eodag/types/queryables.py +23 -5
  44. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/__init__.py +4 -1
  45. eodag-3.5.0/eodag/utils/env.py +29 -0
  46. {eodag-3.4.2 → eodag-3.5.0/eodag.egg-info}/PKG-INFO +3 -3
  47. {eodag-3.4.2 → eodag-3.5.0}/eodag.egg-info/SOURCES.txt +1 -0
  48. {eodag-3.4.2 → eodag-3.5.0}/eodag.egg-info/requires.txt +1 -1
  49. {eodag-3.4.2 → eodag-3.5.0}/pyproject.toml +1 -1
  50. {eodag-3.4.2 → eodag-3.5.0}/setup.cfg +1 -1
  51. {eodag-3.4.2 → eodag-3.5.0}/.dockerignore +0 -0
  52. {eodag-3.4.2 → eodag-3.5.0}/.editorconfig +0 -0
  53. {eodag-3.4.2 → eodag-3.5.0}/.gitattributes +0 -0
  54. {eodag-3.4.2 → eodag-3.5.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  55. {eodag-3.4.2 → eodag-3.5.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  56. {eodag-3.4.2 → eodag-3.5.0}/.github/workflows/changelog.yml +0 -0
  57. {eodag-3.4.2 → eodag-3.5.0}/.github/workflows/fetch.yml +0 -0
  58. {eodag-3.4.2 → eodag-3.5.0}/.github/workflows/github-pages.yml +0 -0
  59. {eodag-3.4.2 → eodag-3.5.0}/.github/workflows/lint-pr-title.yml +0 -0
  60. {eodag-3.4.2 → eodag-3.5.0}/.github/workflows/publish.yml +0 -0
  61. {eodag-3.4.2 → eodag-3.5.0}/.github/workflows/test.yml +0 -0
  62. {eodag-3.4.2 → eodag-3.5.0}/.gitignore +0 -0
  63. {eodag-3.4.2 → eodag-3.5.0}/.pre-commit-config.yaml +0 -0
  64. {eodag-3.4.2 → eodag-3.5.0}/BREAKING_CHANGES.rst +0 -0
  65. {eodag-3.4.2 → eodag-3.5.0}/CODE_OF_CONDUCT.md +0 -0
  66. {eodag-3.4.2 → eodag-3.5.0}/CONTRIBUTING.rst +0 -0
  67. {eodag-3.4.2 → eodag-3.5.0}/LICENSE +0 -0
  68. {eodag-3.4.2 → eodag-3.5.0}/MANIFEST.in +0 -0
  69. {eodag-3.4.2 → eodag-3.5.0}/NOTICE +0 -0
  70. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/Chart.lock +0 -0
  71. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/README.md +0 -0
  72. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/NOTES.txt +0 -0
  73. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/_helpers.tpl +0 -0
  74. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/configmap.yaml +0 -0
  75. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/deployment.yaml +0 -0
  76. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/extra-list.yaml +0 -0
  77. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/hpa.yaml +0 -0
  78. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/pv.yaml +0 -0
  79. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/pvc.yaml +0 -0
  80. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/secret.yaml +0 -0
  81. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/service.yaml +0 -0
  82. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/templates/serviceaccount.yaml +0 -0
  83. {eodag-3.4.2 → eodag-3.5.0}/charts/eodag-server/values.yaml +0 -0
  84. {eodag-3.4.2 → eodag-3.5.0}/docker/run-stac-server.sh +0 -0
  85. {eodag-3.4.2 → eodag-3.5.0}/docker/stac-browser.dockerfile +0 -0
  86. {eodag-3.4.2 → eodag-3.5.0}/docker/stac-server.dockerfile +0 -0
  87. {eodag-3.4.2 → eodag-3.5.0}/docker-compose.yml +0 -0
  88. {eodag-3.4.2 → eodag-3.5.0}/docs/Makefile +0 -0
  89. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/custom.css +0 -0
  90. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/download_methods.png +0 -0
  91. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/eodag_advanced_calls_graph.svg +0 -0
  92. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/eodag_bycs.png +0 -0
  93. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/eodag_fetch_product_types.png +0 -0
  94. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/eodag_logo_160.png +0 -0
  95. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/eodag_logo_160r.png +0 -0
  96. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/eodag_main_calls_graph.svg +0 -0
  97. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/eodag_overview.png +0 -0
  98. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/eodag_stac_client.png +0 -0
  99. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/eodag_stac_server.png +0 -0
  100. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/favicon-32x32.png +0 -0
  101. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/params_mapping_extra.csv +0 -0
  102. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/params_mapping_offline_infos.json +0 -0
  103. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/params_mapping_opensearch.csv +0 -0
  104. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/product_types_information.csv +0 -0
  105. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/progress_1.png +0 -0
  106. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/progress_1_none.png +0 -0
  107. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/progress_2.png +0 -0
  108. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/progress_2_none.png +0 -0
  109. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/stac_browser_example.png +0 -0
  110. {eodag-3.4.2 → eodag-3.5.0}/docs/_static/stac_browser_example_600.png +0 -0
  111. {eodag-3.4.2 → eodag-3.5.0}/docs/add_product_type.rst +0 -0
  112. {eodag-3.4.2 → eodag-3.5.0}/docs/add_provider.rst +0 -0
  113. {eodag-3.4.2 → eodag-3.5.0}/docs/api_reference/assets.rst +0 -0
  114. {eodag-3.4.2 → eodag-3.5.0}/docs/api_reference/call_graphs.rst +0 -0
  115. {eodag-3.4.2 → eodag-3.5.0}/docs/api_reference/core.rst +0 -0
  116. {eodag-3.4.2 → eodag-3.5.0}/docs/api_reference/eoproduct.rst +0 -0
  117. {eodag-3.4.2 → eodag-3.5.0}/docs/api_reference/exceptions.rst +0 -0
  118. {eodag-3.4.2 → eodag-3.5.0}/docs/api_reference/index.rst +0 -0
  119. {eodag-3.4.2 → eodag-3.5.0}/docs/api_reference/searchresult.rst +0 -0
  120. {eodag-3.4.2 → eodag-3.5.0}/docs/api_reference/types.rst +0 -0
  121. {eodag-3.4.2 → eodag-3.5.0}/docs/api_reference/utils.rst +0 -0
  122. {eodag-3.4.2 → eodag-3.5.0}/docs/api_user_guide.rst +0 -0
  123. {eodag-3.4.2 → eodag-3.5.0}/docs/breaking_changes.rst +0 -0
  124. {eodag-3.4.2 → eodag-3.5.0}/docs/changelog.rst +0 -0
  125. {eodag-3.4.2 → eodag-3.5.0}/docs/cli_user_guide.rst +0 -0
  126. {eodag-3.4.2 → eodag-3.5.0}/docs/conf.py +0 -0
  127. {eodag-3.4.2 → eodag-3.5.0}/docs/contribute.rst +0 -0
  128. {eodag-3.4.2 → eodag-3.5.0}/docs/drivers.rst +0 -0
  129. {eodag-3.4.2 → eodag-3.5.0}/docs/getting_started_guide/index.rst +0 -0
  130. {eodag-3.4.2 → eodag-3.5.0}/docs/getting_started_guide/install.rst +0 -0
  131. {eodag-3.4.2 → eodag-3.5.0}/docs/getting_started_guide/overview.rst +0 -0
  132. {eodag-3.4.2 → eodag-3.5.0}/docs/getting_started_guide/product_storage_status.rst +0 -0
  133. {eodag-3.4.2 → eodag-3.5.0}/docs/getting_started_guide/product_types.rst +0 -0
  134. {eodag-3.4.2 → eodag-3.5.0}/docs/getting_started_guide/providers.rst +0 -0
  135. {eodag-3.4.2 → eodag-3.5.0}/docs/getting_started_guide/side_projects.rst +0 -0
  136. {eodag-3.4.2 → eodag-3.5.0}/docs/index.rst +0 -0
  137. {eodag-3.4.2 → eodag-3.5.0}/docs/make.bat +0 -0
  138. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/1_overview.ipynb +0 -0
  139. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/3_configuration.ipynb +0 -0
  140. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/4_search.ipynb +0 -0
  141. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/5_queryables.ipynb +0 -0
  142. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/6_serialize_deserialize.ipynb +0 -0
  143. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/7_crunch.ipynb +0 -0
  144. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/8_download.ipynb +0 -0
  145. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/9_post_process.ipynb +0 -0
  146. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/data/crunch_search_results.geojson +0 -0
  147. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/api_user_guide/data/download_search_results.geojson +0 -0
  148. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/intro_notebooks.ipynb +0 -0
  149. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.cpg +0 -0
  150. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.dbf +0 -0
  151. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.prj +0 -0
  152. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.qix +0 -0
  153. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.qpj +0 -0
  154. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.shp +0 -0
  155. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.shx +0 -0
  156. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/auxdata/sentinel2_tiling_grid_centroids.zip +0 -0
  157. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/tuto_burnt_areas_snappy.ipynb +0 -0
  158. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/tuto_cds.ipynb +0 -0
  159. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/tuto_cop_dem.ipynb +0 -0
  160. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/tuto_ecmwf.ipynb +0 -0
  161. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/tuto_meteoblue.ipynb +0 -0
  162. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/tuto_search_location_tile.ipynb +0 -0
  163. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/tuto_ship_detection.ipynb +0 -0
  164. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/tuto_stac_client.ipynb +0 -0
  165. {eodag-3.4.2 → eodag-3.5.0}/docs/notebooks/tutos/tuto_wekeo.ipynb +0 -0
  166. {eodag-3.4.2 → eodag-3.5.0}/docs/params_mapping.rst +0 -0
  167. {eodag-3.4.2 → eodag-3.5.0}/docs/plugins.rst +0 -0
  168. {eodag-3.4.2 → eodag-3.5.0}/docs/plugins_reference/api.rst +0 -0
  169. {eodag-3.4.2 → eodag-3.5.0}/docs/plugins_reference/auth.rst +0 -0
  170. {eodag-3.4.2 → eodag-3.5.0}/docs/plugins_reference/crunch.rst +0 -0
  171. {eodag-3.4.2 → eodag-3.5.0}/docs/plugins_reference/download.rst +0 -0
  172. {eodag-3.4.2 → eodag-3.5.0}/docs/plugins_reference/search.rst +0 -0
  173. {eodag-3.4.2 → eodag-3.5.0}/docs/stac.rst +0 -0
  174. {eodag-3.4.2 → eodag-3.5.0}/docs/tutos.rst +0 -0
  175. {eodag-3.4.2 → eodag-3.5.0}/eodag/__init__.py +0 -0
  176. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/__init__.py +0 -0
  177. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/product/__init__.py +0 -0
  178. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/product/_assets.py +0 -0
  179. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/product/drivers/__init__.py +0 -0
  180. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/product/drivers/base.py +0 -0
  181. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/product/drivers/generic.py +0 -0
  182. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/product/drivers/sentinel1.py +0 -0
  183. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/product/drivers/sentinel2.py +0 -0
  184. {eodag-3.4.2 → eodag-3.5.0}/eodag/api/search_result.py +0 -0
  185. {eodag-3.4.2 → eodag-3.5.0}/eodag/cli.py +0 -0
  186. {eodag-3.4.2 → eodag-3.5.0}/eodag/crunch.py +0 -0
  187. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/__init__.py +0 -0
  188. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/apis/__init__.py +0 -0
  189. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/apis/base.py +0 -0
  190. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/__init__.py +0 -0
  191. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/aws_auth.py +0 -0
  192. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/base.py +0 -0
  193. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/header.py +0 -0
  194. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/oauth.py +0 -0
  195. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/authentication/qsauth.py +0 -0
  196. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/base.py +0 -0
  197. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/crunch/__init__.py +0 -0
  198. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/crunch/base.py +0 -0
  199. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/crunch/filter_latest_intersect.py +0 -0
  200. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/crunch/filter_latest_tpl_name.py +0 -0
  201. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/crunch/filter_overlap.py +0 -0
  202. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/download/__init__.py +0 -0
  203. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/download/creodias_s3.py +0 -0
  204. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/__init__.py +0 -0
  205. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/cop_marine.py +0 -0
  206. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/creodias_s3.py +0 -0
  207. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/csw.py +0 -0
  208. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/stac_list_assets.py +0 -0
  209. {eodag-3.4.2 → eodag-3.5.0}/eodag/plugins/search/static_stac_search.py +0 -0
  210. {eodag-3.4.2 → eodag-3.5.0}/eodag/py.typed +0 -0
  211. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/locations_conf_template.yml +0 -0
  212. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/product_types.yml +0 -0
  213. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/shp/ne_110m_admin_0_map_units.VERSION.txt +0 -0
  214. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/shp/ne_110m_admin_0_map_units.cpg +0 -0
  215. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/shp/ne_110m_admin_0_map_units.dbf +0 -0
  216. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/shp/ne_110m_admin_0_map_units.prj +0 -0
  217. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/shp/ne_110m_admin_0_map_units.shp +0 -0
  218. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/shp/ne_110m_admin_0_map_units.shx +0 -0
  219. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/stac.yml +0 -0
  220. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/stac_api.yml +0 -0
  221. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/stac_provider.yml +0 -0
  222. {eodag-3.4.2 → eodag-3.5.0}/eodag/resources/user_conf_template.yml +0 -0
  223. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/__init__.py +0 -0
  224. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/cache.py +0 -0
  225. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/config.py +0 -0
  226. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/constants.py +0 -0
  227. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/server.wsgi +0 -0
  228. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/templates/README +0 -0
  229. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/types/__init__.py +0 -0
  230. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/types/collections_search.py +0 -0
  231. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/types/eodag_search.py +0 -0
  232. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/types/stac_search.py +0 -0
  233. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/utils/__init__.py +0 -0
  234. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/utils/cql_evaluate.py +0 -0
  235. {eodag-3.4.2 → eodag-3.5.0}/eodag/rest/utils/rfc3339.py +0 -0
  236. {eodag-3.4.2 → eodag-3.5.0}/eodag/types/bbox.py +0 -0
  237. {eodag-3.4.2 → eodag-3.5.0}/eodag/types/download_args.py +0 -0
  238. {eodag-3.4.2 → eodag-3.5.0}/eodag/types/search_args.py +0 -0
  239. {eodag-3.4.2 → eodag-3.5.0}/eodag/types/whoosh.py +0 -0
  240. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/exceptions.py +0 -0
  241. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/import_system.py +0 -0
  242. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/logging.py +0 -0
  243. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/notebook.py +0 -0
  244. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/repr.py +0 -0
  245. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/requests.py +0 -0
  246. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/rest.py +0 -0
  247. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/s3.py +0 -0
  248. {eodag-3.4.2 → eodag-3.5.0}/eodag/utils/stac_reader.py +0 -0
  249. {eodag-3.4.2 → eodag-3.5.0}/eodag.egg-info/dependency_links.txt +0 -0
  250. {eodag-3.4.2 → eodag-3.5.0}/eodag.egg-info/entry_points.txt +0 -0
  251. {eodag-3.4.2 → eodag-3.5.0}/eodag.egg-info/top_level.txt +0 -0
  252. {eodag-3.4.2 → eodag-3.5.0}/get_pypi_latest_version.sh +0 -0
  253. {eodag-3.4.2 → eodag-3.5.0}/pytest.ini +0 -0
  254. {eodag-3.4.2 → eodag-3.5.0}/readthedocs.yml +0 -0
  255. {eodag-3.4.2 → eodag-3.5.0}/requirements-dev.txt +0 -0
  256. {eodag-3.4.2 → eodag-3.5.0}/requirements-docs.txt +0 -0
  257. {eodag-3.4.2 → eodag-3.5.0}/requirements-tutorials.txt +0 -0
  258. {eodag-3.4.2 → eodag-3.5.0}/requirements.txt +0 -0
  259. {eodag-3.4.2 → eodag-3.5.0}/setup.py +0 -0
  260. {eodag-3.4.2 → eodag-3.5.0}/tox.ini +0 -0
  261. {eodag-3.4.2 → eodag-3.5.0}/utils/params_mapping_to_csv.py +0 -0
  262. {eodag-3.4.2 → eodag-3.5.0}/utils/product_types_information_to_csv.py +0 -0
@@ -1,5 +1,5 @@
1
1
  ### Your checklist for this pull request
2
- Please review the [guidelines for contributing](../CONTRIBUTING.md) to this repository.
2
+ Please review the [guidelines for contributing](https://eodag.readthedocs.io/en/latest/contribute.html) to this repository.
3
3
 
4
4
  - [ ] Make sure you are making a pull request against the **develop branch** (left side). Also you should start *your branch* off *our develop*.
5
5
  - [ ] Check the commit's or even all commits' message styles matches our requested structure.
@@ -33,9 +33,12 @@ jobs:
33
33
  source .venv/bin/activate
34
34
  uv pip install python-semantic-release packaging
35
35
  - name: Set Git config
36
+ env:
37
+ TOKEN: ${{ secrets.USER_TOKEN }}
36
38
  run: |
37
39
  git config user.name "github-actions[bot]"
38
40
  git config user.email "'github-actions[bot]@users.noreply.github.com"
41
+ git remote set-url origin https://$TOKEN@github.com/${{ github.repository }}.git
39
42
  - name: Git merge develop in master
40
43
  run: |
41
44
  git checkout master
@@ -62,9 +65,12 @@ jobs:
62
65
  # Get history and tags for SCM versioning to work
63
66
  fetch-depth: 0
64
67
  - name: Set Git config
68
+ env:
69
+ TOKEN: ${{ secrets.USER_TOKEN }}
65
70
  run: |
66
71
  git config user.name "github-actions[bot]"
67
72
  git config user.email "'github-actions[bot]@users.noreply.github.com"
73
+ git remote set-url origin https://$TOKEN@github.com/${{ github.repository }}.git
68
74
  - name: Git merge master in develop
69
75
  run: |
70
76
  git checkout develop
@@ -3,6 +3,123 @@ Release history
3
3
  ===============
4
4
 
5
5
 
6
+ v3.5.0 (2025-06-20)
7
+ ===================
8
+
9
+ Bug Fixes
10
+ ---------
11
+
12
+ * **core**: Always validate PluginConfig before loading (`#1690`_, `59ac437`_)
13
+
14
+ * **core**: Skip provider empty conf on init (`#1687`_, `0a4104e`_)
15
+
16
+ * **plugins**: Raise errors when metadata discovery is not allowed (`#1534`_, `855ffa3`_)
17
+
18
+ Build System
19
+ ------------
20
+
21
+ * Update usgs to 0.3.6 (`#1688`_, `e63cfb1`_)
22
+
23
+ Continuous Integration
24
+ ----------------------
25
+
26
+ * Use personal access token for deploy github action (`#1693`_, `ff777d7`_)
27
+
28
+ Documentation
29
+ -------------
30
+
31
+ * Dead-links and out-of-date param fix (`#1692`_, `445a20e`_)
32
+
33
+ Features
34
+ --------
35
+
36
+ * **core**: Add env variable to whitelist providers (`#1672`_, `b93c4c8`_)
37
+
38
+ * **core**: Add strict product types mode (`#1677`_, `5077fa5`_)
39
+
40
+ * **plugins**: Auth token expiration margin (`#1665`_, `ef5fc18`_)
41
+
42
+ * **server**: Added bbox filter support for collections search (`#1671`_, `5717f0d`_)
43
+
44
+ .. _#1534: https://github.com/CS-SI/eodag/pull/1534
45
+ .. _#1665: https://github.com/CS-SI/eodag/pull/1665
46
+ .. _#1671: https://github.com/CS-SI/eodag/pull/1671
47
+ .. _#1672: https://github.com/CS-SI/eodag/pull/1672
48
+ .. _#1677: https://github.com/CS-SI/eodag/pull/1677
49
+ .. _#1687: https://github.com/CS-SI/eodag/pull/1687
50
+ .. _#1688: https://github.com/CS-SI/eodag/pull/1688
51
+ .. _#1690: https://github.com/CS-SI/eodag/pull/1690
52
+ .. _#1692: https://github.com/CS-SI/eodag/pull/1692
53
+ .. _#1693: https://github.com/CS-SI/eodag/pull/1693
54
+ .. _0a4104e: https://github.com/CS-SI/eodag/commit/0a4104e0518abc70e2133ca98472eea87d673a1c
55
+ .. _445a20e: https://github.com/CS-SI/eodag/commit/445a20e060730642e703615c73225c0df3cc84d0
56
+ .. _5077fa5: https://github.com/CS-SI/eodag/commit/5077fa591496811fb100c1e6b6a3e452cbdbe2a5
57
+ .. _5717f0d: https://github.com/CS-SI/eodag/commit/5717f0deddbf022f2c6d5207ade77de6afb0f9d5
58
+ .. _59ac437: https://github.com/CS-SI/eodag/commit/59ac437de01a8996d247b1f8239f332ed5dc5456
59
+ .. _855ffa3: https://github.com/CS-SI/eodag/commit/855ffa39fa9b914eb39cc20d6e5c2cbbc1b2097a
60
+ .. _b93c4c8: https://github.com/CS-SI/eodag/commit/b93c4c88f323af0eecb0950c90c6862ca9a7c3f4
61
+ .. _e63cfb1: https://github.com/CS-SI/eodag/commit/e63cfb19ca64a2ed65f500ae9678e117a2ea4cf8
62
+ .. _ef5fc18: https://github.com/CS-SI/eodag/commit/ef5fc188e515759c9227584b25805db75f537833
63
+ .. _ff777d7: https://github.com/CS-SI/eodag/commit/ff777d7a1e33f612c5227dba4fecfcec55ff18fc
64
+
65
+
66
+ v3.4.3 (2025-06-12)
67
+ ===================
68
+
69
+ Bug Fixes
70
+ ---------
71
+
72
+ * **core**: Queryables mismatch when list of possible values contains a single value (`#1666`_,
73
+ `538331d`_)
74
+
75
+ * **plugins**: GenericAuth missing credentials handle (`#1678`_, `576a2ac`_)
76
+
77
+ * **plugins**: Openid_connect requests error handling (#1320) (`#1663`_, `9926083`_)
78
+
79
+ * **plugins**: Order retry (`#1676`_, `3602426`_)
80
+
81
+ * **providers**: Dedl mapping for CORINE collection (`#1661`_, `4c61b54`_)
82
+
83
+ * **providers**: Wekeo_main orderable products download (`#1670`_, `d573846`_)
84
+
85
+ Chores
86
+ ------
87
+
88
+ * **deploy**: Remove deprecated common values (`154ea6d`_)
89
+
90
+ Documentation
91
+ -------------
92
+
93
+ * Configuration environment variables defaults (`#1681`_, `6e8eb6b`_)
94
+
95
+ * Updated contribution guidelines link in PR template (`#1667`_, `e5cd082`_)
96
+
97
+ Refactoring
98
+ -----------
99
+
100
+ * Typing fixes following mypy 1.16.0 (`#1673`_, `ece52c0`_)
101
+
102
+ .. _#1661: https://github.com/CS-SI/eodag/pull/1661
103
+ .. _#1663: https://github.com/CS-SI/eodag/pull/1663
104
+ .. _#1666: https://github.com/CS-SI/eodag/pull/1666
105
+ .. _#1667: https://github.com/CS-SI/eodag/pull/1667
106
+ .. _#1670: https://github.com/CS-SI/eodag/pull/1670
107
+ .. _#1673: https://github.com/CS-SI/eodag/pull/1673
108
+ .. _#1676: https://github.com/CS-SI/eodag/pull/1676
109
+ .. _#1678: https://github.com/CS-SI/eodag/pull/1678
110
+ .. _#1681: https://github.com/CS-SI/eodag/pull/1681
111
+ .. _154ea6d: https://github.com/CS-SI/eodag/commit/154ea6d035572e64c3a434bb41c095c9b4cc76b2
112
+ .. _3602426: https://github.com/CS-SI/eodag/commit/360242653ddc2a5c8587b37b3d91800459f4c243
113
+ .. _4c61b54: https://github.com/CS-SI/eodag/commit/4c61b540ee46a8ae70932d64e9d373653763eb16
114
+ .. _538331d: https://github.com/CS-SI/eodag/commit/538331d30085a814307173913ff831ca5a3397af
115
+ .. _576a2ac: https://github.com/CS-SI/eodag/commit/576a2ac95044d10367e91e5ef843fb33a921f5f5
116
+ .. _6e8eb6b: https://github.com/CS-SI/eodag/commit/6e8eb6b94eaad6294fea45d764a0e7c18a4e6823
117
+ .. _9926083: https://github.com/CS-SI/eodag/commit/99260837837c3b5f2eeac8b95dc2b2feae7a0390
118
+ .. _d573846: https://github.com/CS-SI/eodag/commit/d5738465930e08b24d562af3b7bc040464ff970a
119
+ .. _e5cd082: https://github.com/CS-SI/eodag/commit/e5cd082aa81eedb62cd48b7974362c99a6899d9c
120
+ .. _ece52c0: https://github.com/CS-SI/eodag/commit/ece52c07685e5df21cfda0b6ddc6a7416194406c
121
+
122
+
6
123
  v3.4.2 (2025-05-15)
7
124
  ===================
8
125
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eodag
3
- Version: 3.4.2
3
+ Version: 3.5.0
4
4
  Summary: Earth Observation Data Access Gateway
5
5
  Home-page: https://github.com/CS-SI/eodag
6
6
  Author: CS GROUP - France
@@ -64,7 +64,7 @@ Requires-Dist: OWSLib>=0.27.1; extra == "csw"
64
64
  Provides-Extra: ecmwf
65
65
  Requires-Dist: ecmwf-api-client; extra == "ecmwf"
66
66
  Provides-Extra: usgs
67
- Requires-Dist: usgs>=0.3.1; extra == "usgs"
67
+ Requires-Dist: usgs>=0.3.6; extra == "usgs"
68
68
  Provides-Extra: server
69
69
  Requires-Dist: fastapi>=0.93.0; extra == "server"
70
70
  Requires-Dist: pygeofilter; extra == "server"
@@ -317,7 +317,7 @@ An eodag instance can be exposed through a STAC compliant REST api from the comm
317
317
 
318
318
  .. code-block:: bash
319
319
 
320
- docker run -p 5000:5000 --rm csspace/eodag-server:3.4.2
320
+ docker run -p 5000:5000 --rm csspace/eodag-server:3.5.0
321
321
 
322
322
  You can also browse over your STAC API server using `STAC Browser <https://github.com/radiantearth/stac-browser>`_.
323
323
  Simply run:
@@ -187,7 +187,7 @@ An eodag instance can be exposed through a STAC compliant REST api from the comm
187
187
 
188
188
  .. code-block:: bash
189
189
 
190
- docker run -p 5000:5000 --rm csspace/eodag-server:3.4.2
190
+ docker run -p 5000:5000 --rm csspace/eodag-server:3.5.0
191
191
 
192
192
  You can also browse over your STAC API server using `STAC Browser <https://github.com/radiantearth/stac-browser>`_.
193
193
  Simply run:
@@ -1,5 +1,5 @@
1
1
  apiVersion: v2
2
- appVersion: 3.4.2
2
+ appVersion: 3.5.0
3
3
  dependencies:
4
4
  - name: common
5
5
  repository: oci://registry-1.docker.io/bitnamicharts
@@ -15,4 +15,4 @@ name: eodag-server
15
15
  sources:
16
16
  - https://github.com/CS-SI/eodag
17
17
  type: application
18
- version: 3.4.2
18
+ version: 3.5.0
@@ -18,7 +18,7 @@ metadata:
18
18
  {{- end }}
19
19
  {{- end }}
20
20
  spec:
21
- {{- if and .Values.ingress.ingressClassName (eq "true" (include "common.ingress.supportsIngressClassname" .)) }}
21
+ {{- if .Values.ingress.ingressClassName }}
22
22
  ingressClassName: {{ .Values.ingress.ingressClassName | quote }}
23
23
  {{- end }}
24
24
  rules:
@@ -30,9 +30,7 @@ spec:
30
30
  {{- toYaml .Values.ingress.extraPaths | nindent 10 }}
31
31
  {{- end }}
32
32
  - path: {{ .Values.ingress.path }}
33
- {{- if eq "true" (include "common.ingress.supportsPathType" .) }}
34
33
  pathType: {{ .Values.ingress.pathType }}
35
- {{- end }}
36
34
  backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.fullname" .) "servicePort" .Values.ingress.servicePort "context" $) | nindent 14 }}
37
35
  {{- end }}
38
36
  {{- range .Values.ingress.extraHosts }}
@@ -40,9 +38,7 @@ spec:
40
38
  http:
41
39
  paths:
42
40
  - path: {{ default "/" .path }}
43
- {{- if eq "true" (include "common.ingress.supportsPathType" $) }}
44
41
  pathType: {{ default "ImplementationSpecific" .pathType }}
45
- {{- end }}
46
42
  backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.fullname" $) "servicePort" .Values.ingress.servicePort "context" $) | nindent 14 }}
47
43
  {{- end }}
48
44
  {{- if .Values.ingress.extraRules }}
@@ -142,16 +142,41 @@ Core configuration using environment variables
142
142
 
143
143
  Some EODAG core settings can be overriden using environment variables:
144
144
 
145
- * ``EODAG_CFG_DIR`` customized configuration directory in place of ``~/.config/eodag``
145
+ * ``EODAG_CFG_DIR`` customized configuration directory in place of `~/.config/eodag`.
146
146
  * ``EODAG_CFG_FILE`` for defining the desired path to the `user configuration file\
147
147
  <https://eodag.readthedocs.io/en/stable/getting_started_guide/configure.html#yaml-user-configuration-file>`_
148
+ in place of `~/.config/eodag/eodag.yml`.
148
149
  * ``EODAG_LOCS_CFG_FILE`` for defining the desired path to the
149
150
  `locations <https://eodag.readthedocs.io/en/stable/notebooks/api_user_guide/4_search.html#Locations-search>`_
150
- configuration file
151
- * ``EODAG_PROVIDERS_CFG_FILE`` for defining the desired path to the providers configuration file
152
- * ``EODAG_PRODUCT_TYPES_CFG_FILE`` for defining the desired path to the product types configuration file
151
+ configuration file in place of `~/.config/eodag/locations.yml`.
152
+ * ``EODAG_PROVIDERS_CFG_FILE`` for defining the desired path to the providers configuration file in place of
153
+ `<python-site-packages>/eodag/resources/providers.yml`.
154
+ * ``EODAG_PRODUCT_TYPES_CFG_FILE`` for defining the desired path to the product types configuration file in place of
155
+ `<python-site-packages>/eodag/resources/product_types.yml`.
153
156
  * ``EODAG_EXT_PRODUCT_TYPES_CFG_FILE`` for defining the desired path to the `external product types configuration file\
154
157
  <https://eodag.readthedocs.io/en/stable/notebooks/api_user_guide/2_providers_products_available.html#Product-types-discovery>`_
158
+ in place of https://cs-si.github.io/eodag/eodag/resources/ext_product_types.json.
159
+ If the file is not readable, only user-modified providers will be fetched.
160
+ * ``EODAG_PROVIDERS_WHITELIST`` to restrict EODAG to only use a specific list of providers.
161
+
162
+ If this environment variable is set (as a comma-separated list of provider names), EODAG will only load and use the specified providers.
163
+ All other providers will be ignored, regardless of their presence in configuration files.
164
+
165
+ This is useful for restricting EODAG to a subset of providers, for example in controlled or production environments.
166
+ * ``EODAG_STRICT_PRODUCT_TYPES`` to control how product types are listed.
167
+
168
+ If this environment variable is set to a truthy value (such as ``1``, ``true``, ``yes``, or ``on``), EODAG will only list product types that are present in the main product types configuration file.
169
+ Product types defined only in provider configurations (but not in the main product types configuration) will be ignored.
170
+ If not set, EODAG will also include product types defined only in provider configurations, with minimal metadata.
171
+
172
+ This is useful if you want to strictly control which product types are available, for example to ensure consistency across environments.
173
+
174
+ Example usage:
175
+
176
+ .. code-block:: bash
177
+
178
+ export EODAG_PROVIDERS_WHITELIST=peps,creodias,theia
179
+ export EODAG_STRICT_PRODUCT_TYPES=true
155
180
 
156
181
  CLI configuration
157
182
  ^^^^^^^^^^^^^^^^^
@@ -150,7 +150,7 @@ No authentication needed.
150
150
 
151
151
  ``ecmwf``
152
152
  ^^^^^^^^^
153
- Create an account `here <https://apps.ecmwf.int/registration/>`__.
153
+ Create an account `here <https://www.ecmwf.int/user/login>`__.
154
154
 
155
155
  Then use *email* as ``username`` and *key* as ``password`` from `here <https://api.ecmwf.int/v1/key/>`__ in eodag credentials.
156
156
  EODAG can be used to request for public datasets as for operational archive. Please note that for public datasets you
@@ -702,7 +702,7 @@
702
702
  "\n",
703
703
  "In EODAG, the discovered *EODAG external product types configuration file* can be set to:\n",
704
704
  "\n",
705
- "* a file automatically built from github actions and stored in [eodag/resources/ext_product_types.json](https://raw.githubusercontent.com/CS-SI/eodag/develop/eodag/resources/ext_product_types.json) (default settings)\n",
705
+ "* a file automatically built from github actions and stored in [eodag/resources/ext_product_types.json](https://cs-si.github.io/eodag/eodag/resources/ext_product_types.json) (default settings)\n",
706
706
  "* a custom remote or local file by setting its path in `EODAG_EXT_PRODUCT_TYPES_CFG_FILE` environment variable (if the file is not readable, only user-modified providers will be fetched).\n",
707
707
  "\n",
708
708
  "Then, when listing product types using [list_product_types(fetch_providers=True)](../../api_reference/core.rst#eodag.api.core.EODataAccessGateway.list_product_types), EODAG will first read the content of the *EODAG external product types configuration file* using [fetch_product_types_list()](../../api_reference/core.rst#eodag.api.core.EODataAccessGateway.fetch_product_types_list) \n",
@@ -115,7 +115,7 @@ available on `https://hub.docker.com/r/csspace/eodag-server <https://hub.docker.
115
115
 
116
116
  .. code-block:: bash
117
117
 
118
- $ docker run -p 5000:5000 --rm csspace/eodag-server:3.4.2
118
+ $ docker run -p 5000:5000 --rm csspace/eodag-server:3.5.0
119
119
 
120
120
  Example
121
121
  -------
@@ -36,6 +36,7 @@ from whoosh.index import exists_in, open_dir
36
36
  from whoosh.qparser import QueryParser
37
37
 
38
38
  from eodag.api.product.metadata_mapping import (
39
+ NOT_AVAILABLE,
39
40
  ONLINE_STATUS,
40
41
  mtd_cfg_as_conversion_and_querypath,
41
42
  )
@@ -79,6 +80,7 @@ from eodag.utils import (
79
80
  string_to_jsonpath,
80
81
  uri_to_path,
81
82
  )
83
+ from eodag.utils.env import is_env_var_true
82
84
  from eodag.utils.exceptions import (
83
85
  AuthenticationError,
84
86
  EodagError,
@@ -175,12 +177,19 @@ class EODataAccessGateway:
175
177
  share_credentials(self.providers_config)
176
178
 
177
179
  # init updated providers conf
180
+ strict_mode = is_env_var_true("EODAG_STRICT_PRODUCT_TYPES")
181
+ available_product_types = set(self.product_types_config.source.keys())
182
+
178
183
  for provider in self.providers_config.keys():
179
184
  provider_config_init(
180
185
  self.providers_config[provider],
181
186
  load_stac_provider_config(),
182
187
  )
183
188
 
189
+ self._sync_provider_product_types(
190
+ provider, available_product_types, strict_mode
191
+ )
192
+
184
193
  # re-build _plugins_manager using up-to-date providers_config
185
194
  self._plugins_manager.rebuild(self.providers_config)
186
195
 
@@ -226,6 +235,61 @@ class EODataAccessGateway:
226
235
  )
227
236
  self.set_locations_conf(locations_conf_path)
228
237
 
238
+ def _sync_provider_product_types(
239
+ self,
240
+ provider: str,
241
+ available_product_types: set[str],
242
+ strict_mode: bool,
243
+ ) -> None:
244
+ """
245
+ Synchronize product types for a provider based on strict or permissive mode.
246
+
247
+ In strict mode, removes product types not in available_product_types.
248
+ In permissive mode, adds empty product type configs for missing types.
249
+
250
+ :param provider: The provider name whose product types should be synchronized.
251
+ :param available_product_types: The set of available product type IDs.
252
+ :param strict_mode: If True, remove unknown product types; if False, add empty configs for them.
253
+ :returns: None
254
+ """
255
+ provider_products = self.providers_config[provider].products
256
+ products_to_remove: list[str] = []
257
+ products_to_add: list[str] = []
258
+
259
+ for product_id in provider_products:
260
+ if product_id == GENERIC_PRODUCT_TYPE:
261
+ continue
262
+
263
+ if product_id not in available_product_types:
264
+ if strict_mode:
265
+ products_to_remove.append(product_id)
266
+ continue
267
+
268
+ empty_product = {
269
+ "title": product_id,
270
+ "abstract": NOT_AVAILABLE,
271
+ }
272
+ self.product_types_config.source[
273
+ product_id
274
+ ] = empty_product # will update available_product_types
275
+ products_to_add.append(product_id)
276
+
277
+ if products_to_add:
278
+ logger.debug(
279
+ "Product types permissive mode, %s added (provider %s)",
280
+ ", ".join(products_to_add),
281
+ provider,
282
+ )
283
+
284
+ if products_to_remove:
285
+ logger.debug(
286
+ "Product types strict mode, ignoring %s (provider %s)",
287
+ ", ".join(products_to_remove),
288
+ provider,
289
+ )
290
+ for id in products_to_remove:
291
+ del self.providers_config[provider].products[id]
292
+
229
293
  def get_version(self) -> str:
230
294
  """Get eodag package version"""
231
295
  return version("eodag")
@@ -608,11 +672,14 @@ class EODataAccessGateway:
608
672
  for product_type_id in p.products: # type: ignore
609
673
  if product_type_id == GENERIC_PRODUCT_TYPE:
610
674
  continue
675
+
611
676
  config = self.product_types_config[product_type_id]
612
677
  config["_id"] = product_type_id
678
+
613
679
  if "alias" in config:
614
680
  product_type_id = config["alias"]
615
681
  product_type = {"ID": product_type_id, **config}
682
+
616
683
  if product_type not in product_types:
617
684
  product_types.append(product_type)
618
685
 
@@ -620,11 +687,18 @@ class EODataAccessGateway:
620
687
  return sorted(product_types, key=itemgetter("ID"))
621
688
 
622
689
  def fetch_product_types_list(self, provider: Optional[str] = None) -> None:
623
- """Fetch product types list and update if needed
690
+ """Fetch product types list and update if needed.
691
+
692
+ If strict mode is enabled (by setting the ``EODAG_STRICT_PRODUCT_TYPES`` environment variable
693
+ to a truthy value), this method will not fetch or update product types and will return immediately.
624
694
 
625
695
  :param provider: The name of a provider or provider-group for which product types
626
696
  list should be updated. Defaults to all providers (None value).
627
697
  """
698
+ strict_mode = is_env_var_true("EODAG_STRICT_PRODUCT_TYPES")
699
+ if strict_mode:
700
+ return
701
+
628
702
  providers_to_fetch = list(self.providers_config.keys())
629
703
  # check if some providers are grouped under a group name which is not a provider name
630
704
  if provider is not None and provider not in self.providers_config:
@@ -658,7 +732,7 @@ class EODataAccessGateway:
658
732
  discovery_conf = getattr(
659
733
  provider_search_config, "discover_product_types", {}
660
734
  )
661
- if discovery_conf.get("fetch_url", None):
735
+ if discovery_conf.get("fetch_url"):
662
736
  providers_discovery_configs_fetchable[
663
737
  provider_to_fetch
664
738
  ] = discovery_conf
@@ -744,7 +818,7 @@ class EODataAccessGateway:
744
818
  user_discovery_conf == default_discovery_conf
745
819
  or user_discovery_conf == default_discovery_conf_parsed
746
820
  ) and (
747
- not default_discovery_conf.get("fetch_url", None)
821
+ not default_discovery_conf.get("fetch_url")
748
822
  or "ext_product_types_conf" not in locals()
749
823
  or "ext_product_types_conf" in locals()
750
824
  and (
@@ -856,7 +930,7 @@ class EODataAccessGateway:
856
930
  continue
857
931
  if not getattr(
858
932
  search_plugin_config, "discover_product_types", {}
859
- ).get("fetch_url", None):
933
+ ).get("fetch_url"):
860
934
  # conf has been updated and provider product types are no more discoverable
861
935
  continue
862
936
  provider_products_config = (
@@ -980,7 +1054,7 @@ class EODataAccessGateway:
980
1054
  product_types = [
981
1055
  k
982
1056
  for k, v in self.product_types_config.items()
983
- if v.get("alias", None) == alias_or_id
1057
+ if v.get("alias") == alias_or_id
984
1058
  ]
985
1059
 
986
1060
  if len(product_types) > 1:
@@ -1310,8 +1384,8 @@ class EODataAccessGateway:
1310
1384
  # since it might be modified if the next_page_url mechanism is used by the
1311
1385
  # plugin. (same thing for next_page_query_obj, next_page_query_obj with POST reqs)
1312
1386
  pagination_config = getattr(search_plugin.config, "pagination", {})
1313
- prev_next_page_url_tpl = pagination_config.get("next_page_url_tpl", None)
1314
- prev_next_page_query_obj = pagination_config.get("next_page_query_obj", None)
1387
+ prev_next_page_url_tpl = pagination_config.get("next_page_url_tpl")
1388
+ prev_next_page_query_obj = pagination_config.get("next_page_query_obj")
1315
1389
  # Page has to be set to a value even if use_next is True, this is required
1316
1390
  # internally by the search plugin (see collect_search_urls)
1317
1391
  kwargs.update(
@@ -1549,7 +1623,7 @@ class EODataAccessGateway:
1549
1623
  :param kwargs: Search criteria to help finding the right product
1550
1624
  :returns: A search result with one EO product or None at all
1551
1625
  """
1552
- product_type = kwargs.get("productType", None)
1626
+ product_type = kwargs.get("productType")
1553
1627
  if product_type is not None:
1554
1628
  try:
1555
1629
  product_type = self.get_product_type_from_alias(product_type)
@@ -1686,7 +1760,7 @@ class EODataAccessGateway:
1686
1760
  * other criteria compatible with the provider
1687
1761
  :returns: Search plugins list and the prepared kwargs to make a query.
1688
1762
  """
1689
- product_type = kwargs.get("productType", None)
1763
+ product_type: Optional[str] = kwargs.get("productType")
1690
1764
  if product_type is None:
1691
1765
  try:
1692
1766
  guesses = self.guess_product_type(**kwargs)
@@ -1706,7 +1780,7 @@ class EODataAccessGateway:
1706
1780
  # By now, only use the best bet
1707
1781
  product_type = guesses[0]
1708
1782
  except NoMatchingProductType:
1709
- queried_id = kwargs.get("id", None)
1783
+ queried_id = kwargs.get("id")
1710
1784
  if queried_id is None:
1711
1785
  logger.info(
1712
1786
  "No product type could be guessed with provided arguments"
@@ -1750,7 +1824,7 @@ class EODataAccessGateway:
1750
1824
  product_type
1751
1825
  not in self._plugins_manager.product_type_to_provider_config_map.keys()
1752
1826
  ):
1753
- if provider:
1827
+ if provider and product_type:
1754
1828
  # Try to get specific product type from external provider
1755
1829
  logger.debug(f"Fetching {provider} to find {product_type} product type")
1756
1830
  self._fetch_external_product_type(provider, product_type)
@@ -1795,7 +1869,8 @@ class EODataAccessGateway:
1795
1869
  # Add product_types_config to plugin config. This dict contains product
1796
1870
  # type metadata that will also be stored in each product's properties.
1797
1871
  for search_plugin in search_plugins:
1798
- self._attach_product_type_config(search_plugin, product_type)
1872
+ if product_type is not None:
1873
+ self._attach_product_type_config(search_plugin, product_type)
1799
1874
 
1800
1875
  return search_plugins, kwargs
1801
1876
 
@@ -143,7 +143,7 @@ class EOProduct:
143
143
  and "defaultGeometry" not in properties
144
144
  ):
145
145
  raise MisconfiguredError(
146
- f"No geometry available to build EOProduct(id={properties.get('id', None)}, provider={provider})"
146
+ f"No geometry available to build EOProduct(id={properties.get('id')}, provider={provider})"
147
147
  )
148
148
  elif not properties["geometry"] or properties["geometry"] == NOT_AVAILABLE:
149
149
  product_geometry = properties.pop("defaultGeometry", DEFAULT_GEOMETRY)
@@ -445,7 +445,7 @@ class EOProduct:
445
445
  }
446
446
  )
447
447
 
448
- if self.properties.get("quicklook", None) is None:
448
+ if self.properties.get("quicklook") is None:
449
449
  logger.warning(
450
450
  "Missing information to retrieve quicklook for EO product: %s",
451
451
  self.properties["id"],
@@ -555,7 +555,7 @@ class EOProduct:
555
555
  return NoDriver()
556
556
 
557
557
  def _repr_html_(self):
558
- thumbnail = self.properties.get("thumbnail", None)
558
+ thumbnail = self.properties.get("thumbnail")
559
559
  thumbnail_html = (
560
560
  f"<img src='{thumbnail}' width=100 alt='thumbnail'/>"
561
561
  if thumbnail and not thumbnail.startswith("s3")
@@ -576,12 +576,12 @@ class EOProduct:
576
576
  {dict_to_html_table({
577
577
  "provider": self.provider,
578
578
  "product_type": self.product_type,
579
- "properties[&quot;id&quot;]": self.properties.get('id', None),
579
+ "properties[&quot;id&quot;]": self.properties.get('id'),
580
580
  "properties[&quot;startTimeFromAscendingNode&quot;]": self.properties.get(
581
- 'startTimeFromAscendingNode', None
581
+ 'startTimeFromAscendingNode'
582
582
  ),
583
583
  "properties[&quot;completionTimeFromAscendingNode&quot;]": self.properties.get(
584
- 'completionTimeFromAscendingNode', None
584
+ 'completionTimeFromAscendingNode'
585
585
  ),
586
586
  }, brackets=False)}
587
587
  <details><summary style='color: grey; margin-top: 10px;'>properties:&ensp;({len(