eodag 3.4.2__tar.gz → 3.4.3__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 (261) hide show
  1. {eodag-3.4.2 → eodag-3.4.3}/.github/pull_request_template.md +1 -1
  2. {eodag-3.4.2 → eodag-3.4.3}/CHANGES.rst +57 -0
  3. {eodag-3.4.2/eodag.egg-info → eodag-3.4.3}/PKG-INFO +2 -2
  4. {eodag-3.4.2 → eodag-3.4.3}/README.rst +1 -1
  5. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/Chart.yaml +2 -2
  6. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/ingress.yaml +1 -5
  7. {eodag-3.4.2 → eodag-3.4.3}/docs/getting_started_guide/configure.rst +9 -4
  8. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/2_providers_products_available.ipynb +1 -1
  9. {eodag-3.4.2 → eodag-3.4.3}/docs/stac_rest.rst +1 -1
  10. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/core.py +12 -11
  11. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/product/_product.py +6 -6
  12. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/product/metadata_mapping.py +6 -6
  13. {eodag-3.4.2 → eodag-3.4.3}/eodag/config.py +2 -2
  14. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/apis/ecmwf.py +5 -7
  15. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/apis/usgs.py +1 -1
  16. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/generic.py +5 -1
  17. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/openid_connect.py +68 -30
  18. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/sas_auth.py +1 -1
  19. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/crunch/filter_date.py +4 -8
  20. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/crunch/filter_property.py +1 -1
  21. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/download/aws.py +3 -3
  22. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/download/base.py +14 -7
  23. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/download/http.py +18 -12
  24. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/download/s3rest.py +9 -5
  25. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/base.py +3 -3
  26. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/build_search_result.py +4 -5
  27. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/data_request_search.py +4 -4
  28. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/qssearch.py +22 -29
  29. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/ext_product_types.json +1 -1
  30. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/providers.yml +2 -1
  31. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/server.py +3 -3
  32. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/stac.py +2 -2
  33. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/types/queryables.py +2 -2
  34. {eodag-3.4.2 → eodag-3.4.3}/eodag/types/__init__.py +27 -14
  35. {eodag-3.4.2 → eodag-3.4.3}/eodag/types/queryables.py +23 -5
  36. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/__init__.py +1 -1
  37. {eodag-3.4.2 → eodag-3.4.3/eodag.egg-info}/PKG-INFO +2 -2
  38. {eodag-3.4.2 → eodag-3.4.3}/pyproject.toml +1 -1
  39. {eodag-3.4.2 → eodag-3.4.3}/.dockerignore +0 -0
  40. {eodag-3.4.2 → eodag-3.4.3}/.editorconfig +0 -0
  41. {eodag-3.4.2 → eodag-3.4.3}/.gitattributes +0 -0
  42. {eodag-3.4.2 → eodag-3.4.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  43. {eodag-3.4.2 → eodag-3.4.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  44. {eodag-3.4.2 → eodag-3.4.3}/.github/workflows/changelog.yml +0 -0
  45. {eodag-3.4.2 → eodag-3.4.3}/.github/workflows/deploy.yml +0 -0
  46. {eodag-3.4.2 → eodag-3.4.3}/.github/workflows/fetch.yml +0 -0
  47. {eodag-3.4.2 → eodag-3.4.3}/.github/workflows/github-pages.yml +0 -0
  48. {eodag-3.4.2 → eodag-3.4.3}/.github/workflows/lint-pr-title.yml +0 -0
  49. {eodag-3.4.2 → eodag-3.4.3}/.github/workflows/publish.yml +0 -0
  50. {eodag-3.4.2 → eodag-3.4.3}/.github/workflows/test.yml +0 -0
  51. {eodag-3.4.2 → eodag-3.4.3}/.gitignore +0 -0
  52. {eodag-3.4.2 → eodag-3.4.3}/.pre-commit-config.yaml +0 -0
  53. {eodag-3.4.2 → eodag-3.4.3}/BREAKING_CHANGES.rst +0 -0
  54. {eodag-3.4.2 → eodag-3.4.3}/CODE_OF_CONDUCT.md +0 -0
  55. {eodag-3.4.2 → eodag-3.4.3}/CONTRIBUTING.rst +0 -0
  56. {eodag-3.4.2 → eodag-3.4.3}/LICENSE +0 -0
  57. {eodag-3.4.2 → eodag-3.4.3}/MANIFEST.in +0 -0
  58. {eodag-3.4.2 → eodag-3.4.3}/NOTICE +0 -0
  59. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/Chart.lock +0 -0
  60. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/README.md +0 -0
  61. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/NOTES.txt +0 -0
  62. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/_helpers.tpl +0 -0
  63. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/configmap.yaml +0 -0
  64. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/deployment.yaml +0 -0
  65. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/extra-list.yaml +0 -0
  66. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/hpa.yaml +0 -0
  67. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/pv.yaml +0 -0
  68. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/pvc.yaml +0 -0
  69. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/secret.yaml +0 -0
  70. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/service.yaml +0 -0
  71. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/templates/serviceaccount.yaml +0 -0
  72. {eodag-3.4.2 → eodag-3.4.3}/charts/eodag-server/values.yaml +0 -0
  73. {eodag-3.4.2 → eodag-3.4.3}/docker/run-stac-server.sh +0 -0
  74. {eodag-3.4.2 → eodag-3.4.3}/docker/stac-browser.dockerfile +0 -0
  75. {eodag-3.4.2 → eodag-3.4.3}/docker/stac-server.dockerfile +0 -0
  76. {eodag-3.4.2 → eodag-3.4.3}/docker-compose.yml +0 -0
  77. {eodag-3.4.2 → eodag-3.4.3}/docs/Makefile +0 -0
  78. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/custom.css +0 -0
  79. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/download_methods.png +0 -0
  80. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/eodag_advanced_calls_graph.svg +0 -0
  81. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/eodag_bycs.png +0 -0
  82. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/eodag_fetch_product_types.png +0 -0
  83. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/eodag_logo_160.png +0 -0
  84. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/eodag_logo_160r.png +0 -0
  85. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/eodag_main_calls_graph.svg +0 -0
  86. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/eodag_overview.png +0 -0
  87. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/eodag_stac_client.png +0 -0
  88. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/eodag_stac_server.png +0 -0
  89. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/favicon-32x32.png +0 -0
  90. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/params_mapping_extra.csv +0 -0
  91. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/params_mapping_offline_infos.json +0 -0
  92. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/params_mapping_opensearch.csv +0 -0
  93. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/product_types_information.csv +0 -0
  94. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/progress_1.png +0 -0
  95. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/progress_1_none.png +0 -0
  96. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/progress_2.png +0 -0
  97. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/progress_2_none.png +0 -0
  98. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/stac_browser_example.png +0 -0
  99. {eodag-3.4.2 → eodag-3.4.3}/docs/_static/stac_browser_example_600.png +0 -0
  100. {eodag-3.4.2 → eodag-3.4.3}/docs/add_product_type.rst +0 -0
  101. {eodag-3.4.2 → eodag-3.4.3}/docs/add_provider.rst +0 -0
  102. {eodag-3.4.2 → eodag-3.4.3}/docs/api_reference/assets.rst +0 -0
  103. {eodag-3.4.2 → eodag-3.4.3}/docs/api_reference/call_graphs.rst +0 -0
  104. {eodag-3.4.2 → eodag-3.4.3}/docs/api_reference/core.rst +0 -0
  105. {eodag-3.4.2 → eodag-3.4.3}/docs/api_reference/eoproduct.rst +0 -0
  106. {eodag-3.4.2 → eodag-3.4.3}/docs/api_reference/exceptions.rst +0 -0
  107. {eodag-3.4.2 → eodag-3.4.3}/docs/api_reference/index.rst +0 -0
  108. {eodag-3.4.2 → eodag-3.4.3}/docs/api_reference/searchresult.rst +0 -0
  109. {eodag-3.4.2 → eodag-3.4.3}/docs/api_reference/types.rst +0 -0
  110. {eodag-3.4.2 → eodag-3.4.3}/docs/api_reference/utils.rst +0 -0
  111. {eodag-3.4.2 → eodag-3.4.3}/docs/api_user_guide.rst +0 -0
  112. {eodag-3.4.2 → eodag-3.4.3}/docs/breaking_changes.rst +0 -0
  113. {eodag-3.4.2 → eodag-3.4.3}/docs/changelog.rst +0 -0
  114. {eodag-3.4.2 → eodag-3.4.3}/docs/cli_user_guide.rst +0 -0
  115. {eodag-3.4.2 → eodag-3.4.3}/docs/conf.py +0 -0
  116. {eodag-3.4.2 → eodag-3.4.3}/docs/contribute.rst +0 -0
  117. {eodag-3.4.2 → eodag-3.4.3}/docs/drivers.rst +0 -0
  118. {eodag-3.4.2 → eodag-3.4.3}/docs/getting_started_guide/index.rst +0 -0
  119. {eodag-3.4.2 → eodag-3.4.3}/docs/getting_started_guide/install.rst +0 -0
  120. {eodag-3.4.2 → eodag-3.4.3}/docs/getting_started_guide/overview.rst +0 -0
  121. {eodag-3.4.2 → eodag-3.4.3}/docs/getting_started_guide/product_storage_status.rst +0 -0
  122. {eodag-3.4.2 → eodag-3.4.3}/docs/getting_started_guide/product_types.rst +0 -0
  123. {eodag-3.4.2 → eodag-3.4.3}/docs/getting_started_guide/providers.rst +0 -0
  124. {eodag-3.4.2 → eodag-3.4.3}/docs/getting_started_guide/register.rst +0 -0
  125. {eodag-3.4.2 → eodag-3.4.3}/docs/getting_started_guide/side_projects.rst +0 -0
  126. {eodag-3.4.2 → eodag-3.4.3}/docs/index.rst +0 -0
  127. {eodag-3.4.2 → eodag-3.4.3}/docs/make.bat +0 -0
  128. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/1_overview.ipynb +0 -0
  129. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/3_configuration.ipynb +0 -0
  130. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/4_search.ipynb +0 -0
  131. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/5_queryables.ipynb +0 -0
  132. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/6_serialize_deserialize.ipynb +0 -0
  133. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/7_crunch.ipynb +0 -0
  134. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/8_download.ipynb +0 -0
  135. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/9_post_process.ipynb +0 -0
  136. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/data/crunch_search_results.geojson +0 -0
  137. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/api_user_guide/data/download_search_results.geojson +0 -0
  138. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/intro_notebooks.ipynb +0 -0
  139. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.cpg +0 -0
  140. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.dbf +0 -0
  141. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.prj +0 -0
  142. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.qix +0 -0
  143. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.qpj +0 -0
  144. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.shp +0 -0
  145. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.shx +0 -0
  146. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/auxdata/sentinel2_tiling_grid_centroids.zip +0 -0
  147. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/tuto_burnt_areas_snappy.ipynb +0 -0
  148. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/tuto_cds.ipynb +0 -0
  149. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/tuto_cop_dem.ipynb +0 -0
  150. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/tuto_ecmwf.ipynb +0 -0
  151. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/tuto_meteoblue.ipynb +0 -0
  152. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/tuto_search_location_tile.ipynb +0 -0
  153. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/tuto_ship_detection.ipynb +0 -0
  154. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/tuto_stac_client.ipynb +0 -0
  155. {eodag-3.4.2 → eodag-3.4.3}/docs/notebooks/tutos/tuto_wekeo.ipynb +0 -0
  156. {eodag-3.4.2 → eodag-3.4.3}/docs/params_mapping.rst +0 -0
  157. {eodag-3.4.2 → eodag-3.4.3}/docs/plugins.rst +0 -0
  158. {eodag-3.4.2 → eodag-3.4.3}/docs/plugins_reference/api.rst +0 -0
  159. {eodag-3.4.2 → eodag-3.4.3}/docs/plugins_reference/auth.rst +0 -0
  160. {eodag-3.4.2 → eodag-3.4.3}/docs/plugins_reference/crunch.rst +0 -0
  161. {eodag-3.4.2 → eodag-3.4.3}/docs/plugins_reference/download.rst +0 -0
  162. {eodag-3.4.2 → eodag-3.4.3}/docs/plugins_reference/search.rst +0 -0
  163. {eodag-3.4.2 → eodag-3.4.3}/docs/stac.rst +0 -0
  164. {eodag-3.4.2 → eodag-3.4.3}/docs/tutos.rst +0 -0
  165. {eodag-3.4.2 → eodag-3.4.3}/eodag/__init__.py +0 -0
  166. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/__init__.py +0 -0
  167. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/product/__init__.py +0 -0
  168. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/product/_assets.py +0 -0
  169. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/product/drivers/__init__.py +0 -0
  170. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/product/drivers/base.py +0 -0
  171. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/product/drivers/generic.py +0 -0
  172. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/product/drivers/sentinel1.py +0 -0
  173. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/product/drivers/sentinel2.py +0 -0
  174. {eodag-3.4.2 → eodag-3.4.3}/eodag/api/search_result.py +0 -0
  175. {eodag-3.4.2 → eodag-3.4.3}/eodag/cli.py +0 -0
  176. {eodag-3.4.2 → eodag-3.4.3}/eodag/crunch.py +0 -0
  177. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/__init__.py +0 -0
  178. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/apis/__init__.py +0 -0
  179. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/apis/base.py +0 -0
  180. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/__init__.py +0 -0
  181. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/aws_auth.py +0 -0
  182. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/base.py +0 -0
  183. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/header.py +0 -0
  184. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/keycloak.py +0 -0
  185. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/oauth.py +0 -0
  186. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/qsauth.py +0 -0
  187. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/token.py +0 -0
  188. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/authentication/token_exchange.py +0 -0
  189. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/base.py +0 -0
  190. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/crunch/__init__.py +0 -0
  191. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/crunch/base.py +0 -0
  192. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/crunch/filter_latest_intersect.py +0 -0
  193. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/crunch/filter_latest_tpl_name.py +0 -0
  194. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/crunch/filter_overlap.py +0 -0
  195. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/download/__init__.py +0 -0
  196. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/download/creodias_s3.py +0 -0
  197. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/manager.py +0 -0
  198. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/__init__.py +0 -0
  199. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/cop_marine.py +0 -0
  200. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/creodias_s3.py +0 -0
  201. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/csw.py +0 -0
  202. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/stac_list_assets.py +0 -0
  203. {eodag-3.4.2 → eodag-3.4.3}/eodag/plugins/search/static_stac_search.py +0 -0
  204. {eodag-3.4.2 → eodag-3.4.3}/eodag/py.typed +0 -0
  205. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/locations_conf_template.yml +0 -0
  206. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/product_types.yml +0 -0
  207. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/shp/ne_110m_admin_0_map_units.VERSION.txt +0 -0
  208. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/shp/ne_110m_admin_0_map_units.cpg +0 -0
  209. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/shp/ne_110m_admin_0_map_units.dbf +0 -0
  210. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/shp/ne_110m_admin_0_map_units.prj +0 -0
  211. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/shp/ne_110m_admin_0_map_units.shp +0 -0
  212. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/shp/ne_110m_admin_0_map_units.shx +0 -0
  213. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/stac.yml +0 -0
  214. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/stac_api.yml +0 -0
  215. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/stac_provider.yml +0 -0
  216. {eodag-3.4.2 → eodag-3.4.3}/eodag/resources/user_conf_template.yml +0 -0
  217. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/__init__.py +0 -0
  218. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/cache.py +0 -0
  219. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/config.py +0 -0
  220. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/constants.py +0 -0
  221. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/core.py +0 -0
  222. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/errors.py +0 -0
  223. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/server.wsgi +0 -0
  224. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/templates/README +0 -0
  225. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/types/__init__.py +0 -0
  226. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/types/collections_search.py +0 -0
  227. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/types/eodag_search.py +0 -0
  228. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/types/stac_search.py +0 -0
  229. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/utils/__init__.py +0 -0
  230. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/utils/cql_evaluate.py +0 -0
  231. {eodag-3.4.2 → eodag-3.4.3}/eodag/rest/utils/rfc3339.py +0 -0
  232. {eodag-3.4.2 → eodag-3.4.3}/eodag/types/bbox.py +0 -0
  233. {eodag-3.4.2 → eodag-3.4.3}/eodag/types/download_args.py +0 -0
  234. {eodag-3.4.2 → eodag-3.4.3}/eodag/types/search_args.py +0 -0
  235. {eodag-3.4.2 → eodag-3.4.3}/eodag/types/whoosh.py +0 -0
  236. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/exceptions.py +0 -0
  237. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/import_system.py +0 -0
  238. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/logging.py +0 -0
  239. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/notebook.py +0 -0
  240. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/repr.py +0 -0
  241. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/requests.py +0 -0
  242. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/rest.py +0 -0
  243. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/s3.py +0 -0
  244. {eodag-3.4.2 → eodag-3.4.3}/eodag/utils/stac_reader.py +0 -0
  245. {eodag-3.4.2 → eodag-3.4.3}/eodag.egg-info/SOURCES.txt +0 -0
  246. {eodag-3.4.2 → eodag-3.4.3}/eodag.egg-info/dependency_links.txt +0 -0
  247. {eodag-3.4.2 → eodag-3.4.3}/eodag.egg-info/entry_points.txt +0 -0
  248. {eodag-3.4.2 → eodag-3.4.3}/eodag.egg-info/requires.txt +0 -0
  249. {eodag-3.4.2 → eodag-3.4.3}/eodag.egg-info/top_level.txt +0 -0
  250. {eodag-3.4.2 → eodag-3.4.3}/get_pypi_latest_version.sh +0 -0
  251. {eodag-3.4.2 → eodag-3.4.3}/pytest.ini +0 -0
  252. {eodag-3.4.2 → eodag-3.4.3}/readthedocs.yml +0 -0
  253. {eodag-3.4.2 → eodag-3.4.3}/requirements-dev.txt +0 -0
  254. {eodag-3.4.2 → eodag-3.4.3}/requirements-docs.txt +0 -0
  255. {eodag-3.4.2 → eodag-3.4.3}/requirements-tutorials.txt +0 -0
  256. {eodag-3.4.2 → eodag-3.4.3}/requirements.txt +0 -0
  257. {eodag-3.4.2 → eodag-3.4.3}/setup.cfg +0 -0
  258. {eodag-3.4.2 → eodag-3.4.3}/setup.py +0 -0
  259. {eodag-3.4.2 → eodag-3.4.3}/tox.ini +0 -0
  260. {eodag-3.4.2 → eodag-3.4.3}/utils/params_mapping_to_csv.py +0 -0
  261. {eodag-3.4.2 → eodag-3.4.3}/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.
@@ -3,6 +3,63 @@ Release history
3
3
  ===============
4
4
 
5
5
 
6
+ v3.4.3 (2025-06-12)
7
+ ===================
8
+
9
+ Bug Fixes
10
+ ---------
11
+
12
+ * **core**: Queryables mismatch when list of possible values contains a single value (`#1666`_,
13
+ `538331d`_)
14
+
15
+ * **plugins**: GenericAuth missing credentials handle (`#1678`_, `576a2ac`_)
16
+
17
+ * **plugins**: Openid_connect requests error handling (#1320) (`#1663`_, `9926083`_)
18
+
19
+ * **plugins**: Order retry (`#1676`_, `3602426`_)
20
+
21
+ * **providers**: Dedl mapping for CORINE collection (`#1661`_, `4c61b54`_)
22
+
23
+ * **providers**: Wekeo_main orderable products download (`#1670`_, `d573846`_)
24
+
25
+ Chores
26
+ ------
27
+
28
+ * **deploy**: Remove deprecated common values (`154ea6d`_)
29
+
30
+ Documentation
31
+ -------------
32
+
33
+ * Configuration environment variables defaults (`#1681`_, `6e8eb6b`_)
34
+
35
+ * Updated contribution guidelines link in PR template (`#1667`_, `e5cd082`_)
36
+
37
+ Refactoring
38
+ -----------
39
+
40
+ * Typing fixes following mypy 1.16.0 (`#1673`_, `ece52c0`_)
41
+
42
+ .. _#1661: https://github.com/CS-SI/eodag/pull/1661
43
+ .. _#1663: https://github.com/CS-SI/eodag/pull/1663
44
+ .. _#1666: https://github.com/CS-SI/eodag/pull/1666
45
+ .. _#1667: https://github.com/CS-SI/eodag/pull/1667
46
+ .. _#1670: https://github.com/CS-SI/eodag/pull/1670
47
+ .. _#1673: https://github.com/CS-SI/eodag/pull/1673
48
+ .. _#1676: https://github.com/CS-SI/eodag/pull/1676
49
+ .. _#1678: https://github.com/CS-SI/eodag/pull/1678
50
+ .. _#1681: https://github.com/CS-SI/eodag/pull/1681
51
+ .. _154ea6d: https://github.com/CS-SI/eodag/commit/154ea6d035572e64c3a434bb41c095c9b4cc76b2
52
+ .. _3602426: https://github.com/CS-SI/eodag/commit/360242653ddc2a5c8587b37b3d91800459f4c243
53
+ .. _4c61b54: https://github.com/CS-SI/eodag/commit/4c61b540ee46a8ae70932d64e9d373653763eb16
54
+ .. _538331d: https://github.com/CS-SI/eodag/commit/538331d30085a814307173913ff831ca5a3397af
55
+ .. _576a2ac: https://github.com/CS-SI/eodag/commit/576a2ac95044d10367e91e5ef843fb33a921f5f5
56
+ .. _6e8eb6b: https://github.com/CS-SI/eodag/commit/6e8eb6b94eaad6294fea45d764a0e7c18a4e6823
57
+ .. _9926083: https://github.com/CS-SI/eodag/commit/99260837837c3b5f2eeac8b95dc2b2feae7a0390
58
+ .. _d573846: https://github.com/CS-SI/eodag/commit/d5738465930e08b24d562af3b7bc040464ff970a
59
+ .. _e5cd082: https://github.com/CS-SI/eodag/commit/e5cd082aa81eedb62cd48b7974362c99a6899d9c
60
+ .. _ece52c0: https://github.com/CS-SI/eodag/commit/ece52c07685e5df21cfda0b6ddc6a7416194406c
61
+
62
+
6
63
  v3.4.2 (2025-05-15)
7
64
  ===================
8
65
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eodag
3
- Version: 3.4.2
3
+ Version: 3.4.3
4
4
  Summary: Earth Observation Data Access Gateway
5
5
  Home-page: https://github.com/CS-SI/eodag
6
6
  Author: CS GROUP - France
@@ -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.4.3
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.4.3
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.4.3
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.4.3
@@ -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,21 @@ 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.
155
160
 
156
161
  CLI configuration
157
162
  ^^^^^^^^^^^^^^^^^
@@ -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.4.3
119
119
 
120
120
  Example
121
121
  -------
@@ -658,7 +658,7 @@ class EODataAccessGateway:
658
658
  discovery_conf = getattr(
659
659
  provider_search_config, "discover_product_types", {}
660
660
  )
661
- if discovery_conf.get("fetch_url", None):
661
+ if discovery_conf.get("fetch_url"):
662
662
  providers_discovery_configs_fetchable[
663
663
  provider_to_fetch
664
664
  ] = discovery_conf
@@ -744,7 +744,7 @@ class EODataAccessGateway:
744
744
  user_discovery_conf == default_discovery_conf
745
745
  or user_discovery_conf == default_discovery_conf_parsed
746
746
  ) and (
747
- not default_discovery_conf.get("fetch_url", None)
747
+ not default_discovery_conf.get("fetch_url")
748
748
  or "ext_product_types_conf" not in locals()
749
749
  or "ext_product_types_conf" in locals()
750
750
  and (
@@ -856,7 +856,7 @@ class EODataAccessGateway:
856
856
  continue
857
857
  if not getattr(
858
858
  search_plugin_config, "discover_product_types", {}
859
- ).get("fetch_url", None):
859
+ ).get("fetch_url"):
860
860
  # conf has been updated and provider product types are no more discoverable
861
861
  continue
862
862
  provider_products_config = (
@@ -980,7 +980,7 @@ class EODataAccessGateway:
980
980
  product_types = [
981
981
  k
982
982
  for k, v in self.product_types_config.items()
983
- if v.get("alias", None) == alias_or_id
983
+ if v.get("alias") == alias_or_id
984
984
  ]
985
985
 
986
986
  if len(product_types) > 1:
@@ -1310,8 +1310,8 @@ class EODataAccessGateway:
1310
1310
  # since it might be modified if the next_page_url mechanism is used by the
1311
1311
  # plugin. (same thing for next_page_query_obj, next_page_query_obj with POST reqs)
1312
1312
  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)
1313
+ prev_next_page_url_tpl = pagination_config.get("next_page_url_tpl")
1314
+ prev_next_page_query_obj = pagination_config.get("next_page_query_obj")
1315
1315
  # Page has to be set to a value even if use_next is True, this is required
1316
1316
  # internally by the search plugin (see collect_search_urls)
1317
1317
  kwargs.update(
@@ -1549,7 +1549,7 @@ class EODataAccessGateway:
1549
1549
  :param kwargs: Search criteria to help finding the right product
1550
1550
  :returns: A search result with one EO product or None at all
1551
1551
  """
1552
- product_type = kwargs.get("productType", None)
1552
+ product_type = kwargs.get("productType")
1553
1553
  if product_type is not None:
1554
1554
  try:
1555
1555
  product_type = self.get_product_type_from_alias(product_type)
@@ -1686,7 +1686,7 @@ class EODataAccessGateway:
1686
1686
  * other criteria compatible with the provider
1687
1687
  :returns: Search plugins list and the prepared kwargs to make a query.
1688
1688
  """
1689
- product_type = kwargs.get("productType", None)
1689
+ product_type: Optional[str] = kwargs.get("productType")
1690
1690
  if product_type is None:
1691
1691
  try:
1692
1692
  guesses = self.guess_product_type(**kwargs)
@@ -1706,7 +1706,7 @@ class EODataAccessGateway:
1706
1706
  # By now, only use the best bet
1707
1707
  product_type = guesses[0]
1708
1708
  except NoMatchingProductType:
1709
- queried_id = kwargs.get("id", None)
1709
+ queried_id = kwargs.get("id")
1710
1710
  if queried_id is None:
1711
1711
  logger.info(
1712
1712
  "No product type could be guessed with provided arguments"
@@ -1750,7 +1750,7 @@ class EODataAccessGateway:
1750
1750
  product_type
1751
1751
  not in self._plugins_manager.product_type_to_provider_config_map.keys()
1752
1752
  ):
1753
- if provider:
1753
+ if provider and product_type:
1754
1754
  # Try to get specific product type from external provider
1755
1755
  logger.debug(f"Fetching {provider} to find {product_type} product type")
1756
1756
  self._fetch_external_product_type(provider, product_type)
@@ -1795,7 +1795,8 @@ class EODataAccessGateway:
1795
1795
  # Add product_types_config to plugin config. This dict contains product
1796
1796
  # type metadata that will also be stored in each product's properties.
1797
1797
  for search_plugin in search_plugins:
1798
- self._attach_product_type_config(search_plugin, product_type)
1798
+ if product_type is not None:
1799
+ self._attach_product_type_config(search_plugin, product_type)
1799
1800
 
1800
1801
  return search_plugins, kwargs
1801
1802
 
@@ -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(
@@ -424,7 +424,7 @@ def format_metadata(search_param: str, *args: Any, **kwargs: Any) -> str:
424
424
  return Polygon(polygon_args)
425
425
  elif len(georss) == 1 and "multisurface" in georss[0].tag.lower():
426
426
  # Multipolygon
427
- from_proj = getattr(georss[0], "attrib", {}).get("srsName", None)
427
+ from_proj = getattr(georss[0], "attrib", {}).get("srsName")
428
428
  if from_proj:
429
429
  from_proj = pyproj.CRS(from_proj)
430
430
  to_proj = pyproj.CRS(DEFAULT_PROJ)
@@ -1030,8 +1030,8 @@ def properties_from_json(
1030
1030
  if not discovery_config:
1031
1031
  discovery_config = {}
1032
1032
 
1033
- discovery_pattern = discovery_config.get("metadata_pattern", None)
1034
- discovery_path = discovery_config.get("metadata_path", None)
1033
+ discovery_pattern = discovery_config.get("metadata_pattern")
1034
+ discovery_path = discovery_config.get("metadata_path")
1035
1035
  if discovery_pattern and discovery_path:
1036
1036
  discovery_jsonpath = string_to_jsonpath(discovery_path)
1037
1037
  discovered_properties = (
@@ -1215,8 +1215,8 @@ def properties_from_xml(
1215
1215
  # adds missing discovered properties
1216
1216
  if not discovery_config:
1217
1217
  discovery_config = {}
1218
- discovery_pattern = discovery_config.get("metadata_pattern", None)
1219
- discovery_path = discovery_config.get("metadata_path", None)
1218
+ discovery_pattern = discovery_config.get("metadata_pattern")
1219
+ discovery_path = discovery_config.get("metadata_path")
1220
1220
  if discovery_pattern and discovery_path:
1221
1221
  discovered_properties = root.xpath(
1222
1222
  discovery_path,
@@ -1524,7 +1524,7 @@ def get_provider_queryable_path(
1524
1524
  :param metadata_mapping: metadata-mapping configuration
1525
1525
  :returns: EODAG configured queryable path or None
1526
1526
  """
1527
- parameter_conf = metadata_mapping.get(queryable, None)
1527
+ parameter_conf = metadata_mapping.get(queryable)
1528
1528
  if isinstance(parameter_conf, list):
1529
1529
  return parameter_conf[0]
1530
1530
  else:
@@ -851,7 +851,7 @@ def override_config_from_env(config: dict[str, Any]) -> None:
851
851
  iter_parts = iter(parts)
852
852
  env_type = get_type_hints(PluginConfig).get(next(iter_parts, ""), str)
853
853
  child_env_type = (
854
- get_type_hints(env_type).get(next(iter_parts, ""), None)
854
+ get_type_hints(env_type).get(next(iter_parts, ""))
855
855
  if isclass(env_type)
856
856
  else None
857
857
  )
@@ -961,7 +961,7 @@ def merge_configs(config: dict[str, Any], other_config: dict[str, Any]) -> None:
961
961
  other_config = dict(config, **other_config)
962
962
 
963
963
  for provider, new_conf in other_config.items():
964
- old_conf = config.get(provider, None)
964
+ old_conf = config.get(provider)
965
965
 
966
966
  if old_conf:
967
967
  # update non-objects values
@@ -123,16 +123,14 @@ class EcmwfApi(Api, ECMWFSearch):
123
123
  # start date
124
124
  if "startTimeFromAscendingNode" not in kwargs:
125
125
  kwargs["startTimeFromAscendingNode"] = (
126
- getattr(self.config, "product_type_config", {}).get(
127
- "missionStartDate", None
128
- )
126
+ getattr(self.config, "product_type_config", {}).get("missionStartDate")
129
127
  or DEFAULT_MISSION_START_DATE
130
128
  )
131
129
  # end date
132
130
  if "completionTimeFromAscendingNode" not in kwargs:
133
131
  kwargs["completionTimeFromAscendingNode"] = getattr(
134
132
  self.config, "product_type_config", {}
135
- ).get("missionEndDate", None) or datetime.now(timezone.utc).isoformat(
133
+ ).get("missionEndDate") or datetime.now(timezone.utc).isoformat(
136
134
  timespec="seconds"
137
135
  )
138
136
 
@@ -149,8 +147,8 @@ class EcmwfApi(Api, ECMWFSearch):
149
147
  :raises: :class:`~eodag.utils.exceptions.AuthenticationError`
150
148
  """
151
149
  # Get credentials from eodag or using ecmwf conf
152
- email = getattr(self.config, "credentials", {}).get("username", None)
153
- key = getattr(self.config, "credentials", {}).get("password", None)
150
+ email = getattr(self.config, "credentials", {}).get("username")
151
+ key = getattr(self.config, "credentials", {}).get("password")
154
152
  url = getattr(self.config, "auth_endpoint", None)
155
153
  if not all([email, key, url]):
156
154
  key, url, email = get_apikey_values()
@@ -295,5 +293,5 @@ class EcmwfApi(Api, ECMWFSearch):
295
293
  arguments)
296
294
  :returns: fetched queryable parameters dict
297
295
  """
298
- product_type = kwargs.get("productType", None)
296
+ product_type = kwargs.get("productType")
299
297
  return self.queryables_from_metadata_mapping(product_type)
@@ -241,7 +241,7 @@ class UsgsApi(Api):
241
241
  download_options = api.download_options(
242
242
  usgs_dataset, list(results_by_entity_id.keys())
243
243
  )
244
- if download_options.get("data", None) is not None:
244
+ if download_options.get("data") is not None:
245
245
  for download_option in download_options["data"]:
246
246
  # update results with available downloadSystem
247
247
  if (
@@ -46,7 +46,11 @@ class GenericAuth(Authentication):
46
46
  """Authenticate"""
47
47
  self.validate_config_credentials()
48
48
  method = getattr(self.config, "method", "basic")
49
-
49
+ if not all(x in self.config.credentials for x in ["username", "password"]):
50
+ raise MisconfiguredError(
51
+ f"Missing credentials for provider {self.provider}",
52
+ "You must provide 'username' and 'password' in the configuration.",
53
+ )
50
54
  if method == "digest":
51
55
  return HTTPDigestAuth(
52
56
  self.config.credentials["username"],
@@ -31,7 +31,12 @@ from requests.auth import AuthBase
31
31
 
32
32
  from eodag.plugins.authentication import Authentication
33
33
  from eodag.utils import HTTP_REQ_TIMEOUT, USER_AGENT, parse_qs, repeatfunc, urlparse
34
- from eodag.utils.exceptions import AuthenticationError, MisconfiguredError, TimeOutError
34
+ from eodag.utils.exceptions import (
35
+ AuthenticationError,
36
+ MisconfiguredError,
37
+ RequestError,
38
+ TimeOutError,
39
+ )
35
40
 
36
41
  if TYPE_CHECKING:
37
42
  from requests import PreparedRequest, Response
@@ -304,12 +309,17 @@ class OIDCAuthorizationCodeFlowAuth(OIDCRefreshTokenBase):
304
309
  state = self.compute_state()
305
310
  authentication_response = self.authenticate_user(state)
306
311
  exchange_url = authentication_response.url
312
+
307
313
  for err_pattern, err_message in getattr(
308
314
  self.config, "exchange_url_error_pattern", {}
309
315
  ).items():
310
316
  if err_pattern in exchange_url:
311
317
  raise AuthenticationError(err_message)
318
+
312
319
  if not exchange_url.startswith(self.config.redirect_uri):
320
+ if "Invalid username or password" in authentication_response.text:
321
+ raise AuthenticationError("Invalid username or password")
322
+
313
323
  raise AuthenticationError(
314
324
  f"Could not authenticate user with provider {self.provider}.",
315
325
  "Please verify your credentials",
@@ -369,13 +379,20 @@ class OIDCAuthorizationCodeFlowAuth(OIDCRefreshTokenBase):
369
379
  "redirect_uri": self.config.redirect_uri,
370
380
  }
371
381
  ssl_verify = getattr(self.config, "ssl_verify", True)
372
- authorization_response = self.session.get(
373
- self.authorization_endpoint,
374
- params=params,
375
- headers=USER_AGENT,
376
- timeout=HTTP_REQ_TIMEOUT,
377
- verify=ssl_verify,
378
- )
382
+ try:
383
+ authorization_response = self.session.get(
384
+ self.authorization_endpoint,
385
+ params=params,
386
+ headers=USER_AGENT,
387
+ timeout=HTTP_REQ_TIMEOUT,
388
+ verify=ssl_verify,
389
+ )
390
+ except requests.exceptions.Timeout as exc:
391
+ raise TimeoutError(exc, "The authentication request timed out.") from exc
392
+ except requests.RequestException as exc:
393
+ raise RequestError.from_error(
394
+ exc, "An error occurred while authenticating the user."
395
+ ) from exc
379
396
 
380
397
  login_document = etree.HTML(authorization_response.text)
381
398
  login_forms = login_document.xpath(self.config.login_form_xpath)
@@ -413,13 +430,20 @@ class OIDCAuthorizationCodeFlowAuth(OIDCRefreshTokenBase):
413
430
  auth_uri = getattr(self.config, "authentication_uri", None)
414
431
  if not auth_uri:
415
432
  raise MisconfiguredError("authentication_uri is missing")
416
- return self.session.post(
417
- auth_uri,
418
- data=login_data,
419
- headers=USER_AGENT,
420
- timeout=HTTP_REQ_TIMEOUT,
421
- verify=ssl_verify,
422
- )
433
+ try:
434
+ return self.session.post(
435
+ auth_uri,
436
+ data=login_data,
437
+ headers=USER_AGENT,
438
+ timeout=HTTP_REQ_TIMEOUT,
439
+ verify=ssl_verify,
440
+ )
441
+ except requests.exceptions.Timeout as exc:
442
+ raise TimeoutError(exc, "The authentication request timed out.") from exc
443
+ except requests.RequestException as exc:
444
+ raise RequestError.from_error(
445
+ exc, "An error occurred while authenticating the user."
446
+ ) from exc
423
447
 
424
448
  def grant_user_consent(self, authentication_response: Response) -> Response:
425
449
  """Grant user consent"""
@@ -433,13 +457,20 @@ class OIDCAuthorizationCodeFlowAuth(OIDCRefreshTokenBase):
433
457
  for key, value in self.config.user_consent_form_data.items()
434
458
  }
435
459
  ssl_verify = getattr(self.config, "ssl_verify", True)
436
- return self.session.post(
437
- self.authorization_endpoint,
438
- data=user_consent_data,
439
- headers=USER_AGENT,
440
- timeout=HTTP_REQ_TIMEOUT,
441
- verify=ssl_verify,
442
- )
460
+ try:
461
+ return self.session.post(
462
+ self.authorization_endpoint,
463
+ data=user_consent_data,
464
+ headers=USER_AGENT,
465
+ timeout=HTTP_REQ_TIMEOUT,
466
+ verify=ssl_verify,
467
+ )
468
+ except requests.exceptions.Timeout as exc:
469
+ raise TimeoutError(exc, "The authentication request timed out.") from exc
470
+ except requests.RequestException as exc:
471
+ raise RequestError.from_error(
472
+ exc, "An error occurred while authenticating the user."
473
+ ) from exc
443
474
 
444
475
  def _prepare_token_post_data(self, token_data: dict[str, Any]) -> dict[str, Any]:
445
476
  """Prepare the common data to post to the token URI"""
@@ -487,14 +518,21 @@ class OIDCAuthorizationCodeFlowAuth(OIDCRefreshTokenBase):
487
518
  self.config.token_exchange_post_data_method: token_exchange_data
488
519
  }
489
520
  ssl_verify = getattr(self.config, "ssl_verify", True)
490
- r = self.session.post(
491
- self.token_endpoint,
492
- headers=USER_AGENT,
493
- timeout=HTTP_REQ_TIMEOUT,
494
- verify=ssl_verify,
495
- **post_request_kwargs,
496
- )
497
- return r
521
+ try:
522
+ r = self.session.post(
523
+ self.token_endpoint,
524
+ headers=USER_AGENT,
525
+ timeout=HTTP_REQ_TIMEOUT,
526
+ verify=ssl_verify,
527
+ **post_request_kwargs,
528
+ )
529
+ return r
530
+ except requests.exceptions.Timeout as exc:
531
+ raise TimeoutError(exc, "The authentication request timed out.") from exc
532
+ except requests.RequestException as exc:
533
+ raise RequestError.from_error(
534
+ exc, "An error occurred while authenticating the user."
535
+ ) from exc
498
536
 
499
537
  def _constant_or_xpath_extracted(
500
538
  self, value: str, form_element: Any
@@ -116,7 +116,7 @@ class SASAuth(Authentication):
116
116
  headers = deepcopy(USER_AGENT)
117
117
 
118
118
  # update headers with subscription key if exists
119
- apikey = getattr(self.config, "credentials", {}).get("apikey", None)
119
+ apikey = getattr(self.config, "credentials", {}).get("apikey")
120
120
  ssl_verify = getattr(self.config, "ssl_verify", True)
121
121
  if apikey:
122
122
  headers_update = format_dict_items(self.config.headers, apikey=apikey)
@@ -69,7 +69,7 @@ class FilterDate(Crunch):
69
69
  return []
70
70
 
71
71
  # filter start date
72
- filter_start_str = self.config.__dict__.get("start", None)
72
+ filter_start_str = self.config.__dict__.get("start")
73
73
  if filter_start_str:
74
74
  filter_start = dateutil.parser.parse(filter_start_str)
75
75
  if not filter_start.tzinfo:
@@ -78,7 +78,7 @@ class FilterDate(Crunch):
78
78
  filter_start = None
79
79
 
80
80
  # filter end date
81
- filter_end_str = self.config.__dict__.get("end", None)
81
+ filter_end_str = self.config.__dict__.get("end")
82
82
  if filter_end_str:
83
83
  filter_end = dateutil.parser.parse(filter_end_str)
84
84
  if not filter_end.tzinfo:
@@ -93,9 +93,7 @@ class FilterDate(Crunch):
93
93
  for product in products:
94
94
 
95
95
  # product start date
96
- product_start_str = product.properties.get(
97
- "startTimeFromAscendingNode", None
98
- )
96
+ product_start_str = product.properties.get("startTimeFromAscendingNode")
99
97
  if product_start_str:
100
98
  product_start = dateutil.parser.parse(product_start_str)
101
99
  if not product_start.tzinfo:
@@ -104,9 +102,7 @@ class FilterDate(Crunch):
104
102
  product_start = None
105
103
 
106
104
  # product end date
107
- product_end_str = product.properties.get(
108
- "completionTimeFromAscendingNode", None
109
- )
105
+ product_end_str = product.properties.get("completionTimeFromAscendingNode")
110
106
  if product_end_str:
111
107
  product_end = dateutil.parser.parse(product_end_str)
112
108
  if not product_end.tzinfo:
@@ -64,7 +64,7 @@ class FilterProperty(Crunch):
64
64
  return products
65
65
 
66
66
  property_key = next(iter(self.config.__dict__))
67
- property_value = self.config.__dict__.get(property_key, None)
67
+ property_value = self.config.__dict__.get(property_key)
68
68
 
69
69
  logger.debug(
70
70
  "Start filtering for products matching operator.%s(product.properties['%s'], %s)",