eodag 3.4.3__tar.gz → 3.5.1__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.
- {eodag-3.4.3 → eodag-3.5.1}/.github/workflows/deploy.yml +6 -0
- {eodag-3.4.3 → eodag-3.5.1}/CHANGES.rst +83 -0
- {eodag-3.4.3/eodag.egg-info → eodag-3.5.1}/PKG-INFO +3 -3
- {eodag-3.4.3 → eodag-3.5.1}/README.rst +1 -1
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/Chart.yaml +2 -2
- {eodag-3.4.3 → eodag-3.5.1}/docs/getting_started_guide/configure.rst +20 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/getting_started_guide/register.rst +1 -1
- {eodag-3.4.3 → eodag-3.5.1}/docs/stac_rest.rst +1 -1
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/core.py +90 -27
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/product/_product.py +33 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/product/metadata_mapping.py +31 -2
- {eodag-3.4.3 → eodag-3.5.1}/eodag/config.py +56 -10
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/keycloak.py +3 -1
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/openid_connect.py +21 -3
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/token.py +14 -2
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/token_exchange.py +1 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/download/aws.py +1 -1
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/manager.py +1 -1
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/base.py +3 -2
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/build_search_result.py +13 -6
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/data_request_search.py +14 -1
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/qssearch.py +8 -2
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/ext_product_types.json +1 -1
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/providers.yml +4 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/core.py +3 -1
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/errors.py +9 -4
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/server.py +3 -1
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/stac.py +22 -1
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/__init__.py +3 -0
- eodag-3.5.1/eodag/utils/cache.py +68 -0
- eodag-3.5.1/eodag/utils/env.py +29 -0
- {eodag-3.4.3 → eodag-3.5.1/eodag.egg-info}/PKG-INFO +3 -3
- {eodag-3.4.3 → eodag-3.5.1}/eodag.egg-info/SOURCES.txt +2 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag.egg-info/requires.txt +1 -1
- {eodag-3.4.3 → eodag-3.5.1}/pyproject.toml +1 -1
- {eodag-3.4.3 → eodag-3.5.1}/setup.cfg +1 -1
- {eodag-3.4.3 → eodag-3.5.1}/.dockerignore +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.editorconfig +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.gitattributes +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.github/pull_request_template.md +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.github/workflows/changelog.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.github/workflows/fetch.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.github/workflows/github-pages.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.github/workflows/lint-pr-title.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.github/workflows/publish.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.github/workflows/test.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.gitignore +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/.pre-commit-config.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/BREAKING_CHANGES.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/CODE_OF_CONDUCT.md +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/CONTRIBUTING.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/LICENSE +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/MANIFEST.in +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/NOTICE +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/Chart.lock +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/README.md +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/NOTES.txt +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/_helpers.tpl +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/configmap.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/deployment.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/extra-list.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/hpa.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/ingress.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/pv.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/pvc.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/secret.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/service.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/templates/serviceaccount.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/charts/eodag-server/values.yaml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docker/run-stac-server.sh +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docker/stac-browser.dockerfile +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docker/stac-server.dockerfile +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docker-compose.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/Makefile +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/custom.css +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/download_methods.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/eodag_advanced_calls_graph.svg +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/eodag_bycs.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/eodag_fetch_product_types.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/eodag_logo_160.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/eodag_logo_160r.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/eodag_main_calls_graph.svg +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/eodag_overview.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/eodag_stac_client.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/eodag_stac_server.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/favicon-32x32.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/params_mapping_extra.csv +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/params_mapping_offline_infos.json +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/params_mapping_opensearch.csv +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/product_types_information.csv +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/progress_1.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/progress_1_none.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/progress_2.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/progress_2_none.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/stac_browser_example.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/_static/stac_browser_example_600.png +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/add_product_type.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/add_provider.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_reference/assets.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_reference/call_graphs.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_reference/core.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_reference/eoproduct.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_reference/exceptions.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_reference/index.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_reference/searchresult.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_reference/types.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_reference/utils.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/api_user_guide.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/breaking_changes.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/changelog.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/cli_user_guide.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/conf.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/contribute.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/drivers.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/getting_started_guide/index.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/getting_started_guide/install.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/getting_started_guide/overview.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/getting_started_guide/product_storage_status.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/getting_started_guide/product_types.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/getting_started_guide/providers.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/getting_started_guide/side_projects.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/index.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/make.bat +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/1_overview.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/2_providers_products_available.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/3_configuration.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/4_search.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/5_queryables.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/6_serialize_deserialize.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/7_crunch.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/8_download.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/9_post_process.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/data/crunch_search_results.geojson +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/api_user_guide/data/download_search_results.geojson +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/intro_notebooks.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.cpg +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.dbf +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.prj +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.qix +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.qpj +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.shp +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/auxdata/Gulf_of_Trieste_seamask_UTM33.shx +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/auxdata/sentinel2_tiling_grid_centroids.zip +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/tuto_burnt_areas_snappy.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/tuto_cds.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/tuto_cop_dem.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/tuto_ecmwf.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/tuto_meteoblue.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/tuto_search_location_tile.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/tuto_ship_detection.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/tuto_stac_client.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/notebooks/tutos/tuto_wekeo.ipynb +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/params_mapping.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/plugins.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/plugins_reference/api.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/plugins_reference/auth.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/plugins_reference/crunch.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/plugins_reference/download.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/plugins_reference/search.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/stac.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/docs/tutos.rst +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/product/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/product/_assets.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/product/drivers/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/product/drivers/base.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/product/drivers/generic.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/product/drivers/sentinel1.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/product/drivers/sentinel2.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/api/search_result.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/cli.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/crunch.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/apis/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/apis/base.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/apis/ecmwf.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/apis/usgs.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/aws_auth.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/base.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/generic.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/header.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/oauth.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/qsauth.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/authentication/sas_auth.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/base.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/crunch/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/crunch/base.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/crunch/filter_date.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/crunch/filter_latest_intersect.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/crunch/filter_latest_tpl_name.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/crunch/filter_overlap.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/crunch/filter_property.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/download/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/download/base.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/download/creodias_s3.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/download/http.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/download/s3rest.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/cop_marine.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/creodias_s3.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/csw.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/stac_list_assets.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/plugins/search/static_stac_search.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/py.typed +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/locations_conf_template.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/product_types.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/shp/ne_110m_admin_0_map_units.VERSION.txt +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/shp/ne_110m_admin_0_map_units.cpg +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/shp/ne_110m_admin_0_map_units.dbf +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/shp/ne_110m_admin_0_map_units.prj +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/shp/ne_110m_admin_0_map_units.shp +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/shp/ne_110m_admin_0_map_units.shx +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/stac.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/stac_api.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/stac_provider.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/resources/user_conf_template.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/cache.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/config.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/constants.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/server.wsgi +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/templates/README +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/types/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/types/collections_search.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/types/eodag_search.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/types/queryables.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/types/stac_search.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/utils/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/utils/cql_evaluate.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/rest/utils/rfc3339.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/types/__init__.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/types/bbox.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/types/download_args.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/types/queryables.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/types/search_args.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/types/whoosh.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/exceptions.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/import_system.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/logging.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/notebook.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/repr.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/requests.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/rest.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/s3.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag/utils/stac_reader.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag.egg-info/dependency_links.txt +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag.egg-info/entry_points.txt +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/eodag.egg-info/top_level.txt +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/get_pypi_latest_version.sh +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/pytest.ini +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/readthedocs.yml +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/requirements-dev.txt +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/requirements-docs.txt +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/requirements-tutorials.txt +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/requirements.txt +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/setup.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/tox.ini +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/utils/params_mapping_to_csv.py +0 -0
- {eodag-3.4.3 → eodag-3.5.1}/utils/product_types_information_to_csv.py +0 -0
|
@@ -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,89 @@ Release history
|
|
|
3
3
|
===============
|
|
4
4
|
|
|
5
5
|
|
|
6
|
+
v3.5.1 (2025-06-23)
|
|
7
|
+
===================
|
|
8
|
+
|
|
9
|
+
Bug Fixes
|
|
10
|
+
---------
|
|
11
|
+
|
|
12
|
+
* **core**: Enable count with search iterator (`#1700`_, `bbcc7ba`_)
|
|
13
|
+
|
|
14
|
+
* **plugins**: Lru caching when fetching constraints with ECMWF (`#1698`_, `e23f47e`_)
|
|
15
|
+
|
|
16
|
+
Refactoring
|
|
17
|
+
-----------
|
|
18
|
+
|
|
19
|
+
* **core**: Register downloader using manager from search to EOProduct (`#1699`_, `fd0c149`_)
|
|
20
|
+
|
|
21
|
+
.. _#1698: https://github.com/CS-SI/eodag/pull/1698
|
|
22
|
+
.. _#1699: https://github.com/CS-SI/eodag/pull/1699
|
|
23
|
+
.. _#1700: https://github.com/CS-SI/eodag/pull/1700
|
|
24
|
+
.. _bbcc7ba: https://github.com/CS-SI/eodag/commit/bbcc7ba311fcf25a0231203035166276e704ec8e
|
|
25
|
+
.. _e23f47e: https://github.com/CS-SI/eodag/commit/e23f47ee97a50c0ba1d573801a17177c88f06eae
|
|
26
|
+
.. _fd0c149: https://github.com/CS-SI/eodag/commit/fd0c149277735a3ecdc11588e8ac8e166b591ae8
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
v3.5.0 (2025-06-20)
|
|
30
|
+
===================
|
|
31
|
+
|
|
32
|
+
Bug Fixes
|
|
33
|
+
---------
|
|
34
|
+
|
|
35
|
+
* **core**: Always validate PluginConfig before loading (`#1690`_, `59ac437`_)
|
|
36
|
+
|
|
37
|
+
* **core**: Skip provider empty conf on init (`#1687`_, `0a4104e`_)
|
|
38
|
+
|
|
39
|
+
* **plugins**: Raise errors when metadata discovery is not allowed (`#1534`_, `855ffa3`_)
|
|
40
|
+
|
|
41
|
+
Build System
|
|
42
|
+
------------
|
|
43
|
+
|
|
44
|
+
* Update usgs to 0.3.6 (`#1688`_, `e63cfb1`_)
|
|
45
|
+
|
|
46
|
+
Continuous Integration
|
|
47
|
+
----------------------
|
|
48
|
+
|
|
49
|
+
* Use personal access token for deploy github action (`#1693`_, `ff777d7`_)
|
|
50
|
+
|
|
51
|
+
Documentation
|
|
52
|
+
-------------
|
|
53
|
+
|
|
54
|
+
* Dead-links and out-of-date param fix (`#1692`_, `445a20e`_)
|
|
55
|
+
|
|
56
|
+
Features
|
|
57
|
+
--------
|
|
58
|
+
|
|
59
|
+
* **core**: Add env variable to whitelist providers (`#1672`_, `b93c4c8`_)
|
|
60
|
+
|
|
61
|
+
* **core**: Add strict product types mode (`#1677`_, `5077fa5`_)
|
|
62
|
+
|
|
63
|
+
* **plugins**: Auth token expiration margin (`#1665`_, `ef5fc18`_)
|
|
64
|
+
|
|
65
|
+
* **server**: Added bbox filter support for collections search (`#1671`_, `5717f0d`_)
|
|
66
|
+
|
|
67
|
+
.. _#1534: https://github.com/CS-SI/eodag/pull/1534
|
|
68
|
+
.. _#1665: https://github.com/CS-SI/eodag/pull/1665
|
|
69
|
+
.. _#1671: https://github.com/CS-SI/eodag/pull/1671
|
|
70
|
+
.. _#1672: https://github.com/CS-SI/eodag/pull/1672
|
|
71
|
+
.. _#1677: https://github.com/CS-SI/eodag/pull/1677
|
|
72
|
+
.. _#1687: https://github.com/CS-SI/eodag/pull/1687
|
|
73
|
+
.. _#1688: https://github.com/CS-SI/eodag/pull/1688
|
|
74
|
+
.. _#1690: https://github.com/CS-SI/eodag/pull/1690
|
|
75
|
+
.. _#1692: https://github.com/CS-SI/eodag/pull/1692
|
|
76
|
+
.. _#1693: https://github.com/CS-SI/eodag/pull/1693
|
|
77
|
+
.. _0a4104e: https://github.com/CS-SI/eodag/commit/0a4104e0518abc70e2133ca98472eea87d673a1c
|
|
78
|
+
.. _445a20e: https://github.com/CS-SI/eodag/commit/445a20e060730642e703615c73225c0df3cc84d0
|
|
79
|
+
.. _5077fa5: https://github.com/CS-SI/eodag/commit/5077fa591496811fb100c1e6b6a3e452cbdbe2a5
|
|
80
|
+
.. _5717f0d: https://github.com/CS-SI/eodag/commit/5717f0deddbf022f2c6d5207ade77de6afb0f9d5
|
|
81
|
+
.. _59ac437: https://github.com/CS-SI/eodag/commit/59ac437de01a8996d247b1f8239f332ed5dc5456
|
|
82
|
+
.. _855ffa3: https://github.com/CS-SI/eodag/commit/855ffa39fa9b914eb39cc20d6e5c2cbbc1b2097a
|
|
83
|
+
.. _b93c4c8: https://github.com/CS-SI/eodag/commit/b93c4c88f323af0eecb0950c90c6862ca9a7c3f4
|
|
84
|
+
.. _e63cfb1: https://github.com/CS-SI/eodag/commit/e63cfb19ca64a2ed65f500ae9678e117a2ea4cf8
|
|
85
|
+
.. _ef5fc18: https://github.com/CS-SI/eodag/commit/ef5fc188e515759c9227584b25805db75f537833
|
|
86
|
+
.. _ff777d7: https://github.com/CS-SI/eodag/commit/ff777d7a1e33f612c5227dba4fecfcec55ff18fc
|
|
87
|
+
|
|
88
|
+
|
|
6
89
|
v3.4.3 (2025-06-12)
|
|
7
90
|
===================
|
|
8
91
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: eodag
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.5.1
|
|
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.
|
|
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.
|
|
320
|
+
docker run -p 5000:5000 --rm csspace/eodag-server:3.5.1
|
|
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.
|
|
190
|
+
docker run -p 5000:5000 --rm csspace/eodag-server:3.5.1
|
|
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.
|
|
2
|
+
appVersion: 3.5.1
|
|
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.
|
|
18
|
+
version: 3.5.1
|
|
@@ -157,6 +157,26 @@ Some EODAG core settings can be overriden using environment variables:
|
|
|
157
157
|
<https://eodag.readthedocs.io/en/stable/notebooks/api_user_guide/2_providers_products_available.html#Product-types-discovery>`_
|
|
158
158
|
in place of https://cs-si.github.io/eodag/eodag/resources/ext_product_types.json.
|
|
159
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
|
|
160
180
|
|
|
161
181
|
CLI configuration
|
|
162
182
|
^^^^^^^^^^^^^^^^^
|
|
@@ -150,7 +150,7 @@ No authentication needed.
|
|
|
150
150
|
|
|
151
151
|
``ecmwf``
|
|
152
152
|
^^^^^^^^^
|
|
153
|
-
Create an account `here <https://
|
|
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
|
|
@@ -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.
|
|
118
|
+
$ docker run -p 5000:5000 --rm csspace/eodag-server:3.5.1
|
|
119
119
|
|
|
120
120
|
Example
|
|
121
121
|
-------
|
|
@@ -36,7 +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
|
-
|
|
39
|
+
NOT_AVAILABLE,
|
|
40
40
|
mtd_cfg_as_conversion_and_querypath,
|
|
41
41
|
)
|
|
42
42
|
from eodag.api.search_result import SearchResult
|
|
@@ -79,6 +79,7 @@ from eodag.utils import (
|
|
|
79
79
|
string_to_jsonpath,
|
|
80
80
|
uri_to_path,
|
|
81
81
|
)
|
|
82
|
+
from eodag.utils.env import is_env_var_true
|
|
82
83
|
from eodag.utils.exceptions import (
|
|
83
84
|
AuthenticationError,
|
|
84
85
|
EodagError,
|
|
@@ -175,12 +176,19 @@ class EODataAccessGateway:
|
|
|
175
176
|
share_credentials(self.providers_config)
|
|
176
177
|
|
|
177
178
|
# init updated providers conf
|
|
179
|
+
strict_mode = is_env_var_true("EODAG_STRICT_PRODUCT_TYPES")
|
|
180
|
+
available_product_types = set(self.product_types_config.source.keys())
|
|
181
|
+
|
|
178
182
|
for provider in self.providers_config.keys():
|
|
179
183
|
provider_config_init(
|
|
180
184
|
self.providers_config[provider],
|
|
181
185
|
load_stac_provider_config(),
|
|
182
186
|
)
|
|
183
187
|
|
|
188
|
+
self._sync_provider_product_types(
|
|
189
|
+
provider, available_product_types, strict_mode
|
|
190
|
+
)
|
|
191
|
+
|
|
184
192
|
# re-build _plugins_manager using up-to-date providers_config
|
|
185
193
|
self._plugins_manager.rebuild(self.providers_config)
|
|
186
194
|
|
|
@@ -226,6 +234,61 @@ class EODataAccessGateway:
|
|
|
226
234
|
)
|
|
227
235
|
self.set_locations_conf(locations_conf_path)
|
|
228
236
|
|
|
237
|
+
def _sync_provider_product_types(
|
|
238
|
+
self,
|
|
239
|
+
provider: str,
|
|
240
|
+
available_product_types: set[str],
|
|
241
|
+
strict_mode: bool,
|
|
242
|
+
) -> None:
|
|
243
|
+
"""
|
|
244
|
+
Synchronize product types for a provider based on strict or permissive mode.
|
|
245
|
+
|
|
246
|
+
In strict mode, removes product types not in available_product_types.
|
|
247
|
+
In permissive mode, adds empty product type configs for missing types.
|
|
248
|
+
|
|
249
|
+
:param provider: The provider name whose product types should be synchronized.
|
|
250
|
+
:param available_product_types: The set of available product type IDs.
|
|
251
|
+
:param strict_mode: If True, remove unknown product types; if False, add empty configs for them.
|
|
252
|
+
:returns: None
|
|
253
|
+
"""
|
|
254
|
+
provider_products = self.providers_config[provider].products
|
|
255
|
+
products_to_remove: list[str] = []
|
|
256
|
+
products_to_add: list[str] = []
|
|
257
|
+
|
|
258
|
+
for product_id in provider_products:
|
|
259
|
+
if product_id == GENERIC_PRODUCT_TYPE:
|
|
260
|
+
continue
|
|
261
|
+
|
|
262
|
+
if product_id not in available_product_types:
|
|
263
|
+
if strict_mode:
|
|
264
|
+
products_to_remove.append(product_id)
|
|
265
|
+
continue
|
|
266
|
+
|
|
267
|
+
empty_product = {
|
|
268
|
+
"title": product_id,
|
|
269
|
+
"abstract": NOT_AVAILABLE,
|
|
270
|
+
}
|
|
271
|
+
self.product_types_config.source[
|
|
272
|
+
product_id
|
|
273
|
+
] = empty_product # will update available_product_types
|
|
274
|
+
products_to_add.append(product_id)
|
|
275
|
+
|
|
276
|
+
if products_to_add:
|
|
277
|
+
logger.debug(
|
|
278
|
+
"Product types permissive mode, %s added (provider %s)",
|
|
279
|
+
", ".join(products_to_add),
|
|
280
|
+
provider,
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
if products_to_remove:
|
|
284
|
+
logger.debug(
|
|
285
|
+
"Product types strict mode, ignoring %s (provider %s)",
|
|
286
|
+
", ".join(products_to_remove),
|
|
287
|
+
provider,
|
|
288
|
+
)
|
|
289
|
+
for id in products_to_remove:
|
|
290
|
+
del self.providers_config[provider].products[id]
|
|
291
|
+
|
|
229
292
|
def get_version(self) -> str:
|
|
230
293
|
"""Get eodag package version"""
|
|
231
294
|
return version("eodag")
|
|
@@ -608,11 +671,14 @@ class EODataAccessGateway:
|
|
|
608
671
|
for product_type_id in p.products: # type: ignore
|
|
609
672
|
if product_type_id == GENERIC_PRODUCT_TYPE:
|
|
610
673
|
continue
|
|
674
|
+
|
|
611
675
|
config = self.product_types_config[product_type_id]
|
|
612
676
|
config["_id"] = product_type_id
|
|
677
|
+
|
|
613
678
|
if "alias" in config:
|
|
614
679
|
product_type_id = config["alias"]
|
|
615
680
|
product_type = {"ID": product_type_id, **config}
|
|
681
|
+
|
|
616
682
|
if product_type not in product_types:
|
|
617
683
|
product_types.append(product_type)
|
|
618
684
|
|
|
@@ -620,11 +686,18 @@ class EODataAccessGateway:
|
|
|
620
686
|
return sorted(product_types, key=itemgetter("ID"))
|
|
621
687
|
|
|
622
688
|
def fetch_product_types_list(self, provider: Optional[str] = None) -> None:
|
|
623
|
-
"""Fetch product types list and update if needed
|
|
689
|
+
"""Fetch product types list and update if needed.
|
|
690
|
+
|
|
691
|
+
If strict mode is enabled (by setting the ``EODAG_STRICT_PRODUCT_TYPES`` environment variable
|
|
692
|
+
to a truthy value), this method will not fetch or update product types and will return immediately.
|
|
624
693
|
|
|
625
694
|
:param provider: The name of a provider or provider-group for which product types
|
|
626
695
|
list should be updated. Defaults to all providers (None value).
|
|
627
696
|
"""
|
|
697
|
+
strict_mode = is_env_var_true("EODAG_STRICT_PRODUCT_TYPES")
|
|
698
|
+
if strict_mode:
|
|
699
|
+
return
|
|
700
|
+
|
|
628
701
|
providers_to_fetch = list(self.providers_config.keys())
|
|
629
702
|
# check if some providers are grouped under a group name which is not a provider name
|
|
630
703
|
if provider is not None and provider not in self.providers_config:
|
|
@@ -1321,7 +1394,11 @@ class EODataAccessGateway:
|
|
|
1321
1394
|
prev_product = None
|
|
1322
1395
|
next_page_url = None
|
|
1323
1396
|
next_page_query_obj = None
|
|
1397
|
+
number_matched = None
|
|
1324
1398
|
while True:
|
|
1399
|
+
# if count is enabled, it will only be performed on 1st iteration
|
|
1400
|
+
if iteration == 2:
|
|
1401
|
+
kwargs["count"] = False
|
|
1325
1402
|
if iteration > 1 and next_page_url:
|
|
1326
1403
|
pagination_config["next_page_url_tpl"] = next_page_url
|
|
1327
1404
|
if iteration > 1 and next_page_query_obj:
|
|
@@ -1329,11 +1406,13 @@ class EODataAccessGateway:
|
|
|
1329
1406
|
logger.info("Iterate search over multiple pages: page #%s", iteration)
|
|
1330
1407
|
try:
|
|
1331
1408
|
# remove unwanted kwargs for _do_search
|
|
1332
|
-
kwargs.pop("count", None)
|
|
1333
1409
|
kwargs.pop("raise_errors", None)
|
|
1334
1410
|
search_result = self._do_search(
|
|
1335
|
-
search_plugin,
|
|
1411
|
+
search_plugin, raise_errors=True, **kwargs
|
|
1336
1412
|
)
|
|
1413
|
+
# if count is enabled, it will only be performed on 1st iteration
|
|
1414
|
+
if iteration == 1:
|
|
1415
|
+
number_matched = search_result.number_matched
|
|
1337
1416
|
except Exception:
|
|
1338
1417
|
logger.warning(
|
|
1339
1418
|
"error at retrieval of data from %s, for params: %s",
|
|
@@ -1388,6 +1467,8 @@ class EODataAccessGateway:
|
|
|
1388
1467
|
)
|
|
1389
1468
|
last_page_with_products = iteration - 1
|
|
1390
1469
|
break
|
|
1470
|
+
# use count got from 1st iteration
|
|
1471
|
+
search_result.number_matched = number_matched
|
|
1391
1472
|
yield search_result
|
|
1392
1473
|
prev_product = product
|
|
1393
1474
|
# Prevent a last search if the current one returned less than the
|
|
@@ -1475,6 +1556,9 @@ class EODataAccessGateway:
|
|
|
1475
1556
|
)
|
|
1476
1557
|
self.fetch_product_types_list()
|
|
1477
1558
|
|
|
1559
|
+
# remove unwanted count
|
|
1560
|
+
kwargs.pop("count", None)
|
|
1561
|
+
|
|
1478
1562
|
search_plugins, search_kwargs = self._prepare_search(
|
|
1479
1563
|
start=start, end=end, geom=geom, locations=locations, **kwargs
|
|
1480
1564
|
)
|
|
@@ -1497,6 +1581,7 @@ class EODataAccessGateway:
|
|
|
1497
1581
|
for page_results in self.search_iter_page_plugin(
|
|
1498
1582
|
items_per_page=itp,
|
|
1499
1583
|
search_plugin=search_plugin,
|
|
1584
|
+
count=False,
|
|
1500
1585
|
**search_kwargs,
|
|
1501
1586
|
):
|
|
1502
1587
|
all_results.data.extend(page_results.data)
|
|
@@ -1907,29 +1992,7 @@ class EODataAccessGateway:
|
|
|
1907
1992
|
logger.debug("product type %s not found", eo_product.product_type)
|
|
1908
1993
|
|
|
1909
1994
|
if eo_product.search_intersection is not None:
|
|
1910
|
-
|
|
1911
|
-
eo_product
|
|
1912
|
-
)
|
|
1913
|
-
if len(eo_product.assets) > 0:
|
|
1914
|
-
matching_url = next(iter(eo_product.assets.values()))["href"]
|
|
1915
|
-
elif eo_product.properties.get("storageStatus") != ONLINE_STATUS:
|
|
1916
|
-
matching_url = eo_product.properties.get(
|
|
1917
|
-
"orderLink"
|
|
1918
|
-
) or eo_product.properties.get("downloadLink")
|
|
1919
|
-
else:
|
|
1920
|
-
matching_url = eo_product.properties.get("downloadLink")
|
|
1921
|
-
|
|
1922
|
-
try:
|
|
1923
|
-
auth_plugin = next(
|
|
1924
|
-
self._plugins_manager.get_auth_plugins(
|
|
1925
|
-
search_plugin.provider,
|
|
1926
|
-
matching_url=matching_url,
|
|
1927
|
-
matching_conf=download_plugin.config,
|
|
1928
|
-
)
|
|
1929
|
-
)
|
|
1930
|
-
except StopIteration:
|
|
1931
|
-
auth_plugin = None
|
|
1932
|
-
eo_product.register_downloader(download_plugin, auth_plugin)
|
|
1995
|
+
eo_product._register_downloader_from_manager(self._plugins_manager)
|
|
1933
1996
|
|
|
1934
1997
|
results.extend(res)
|
|
1935
1998
|
total_results = (
|
|
@@ -43,6 +43,7 @@ from eodag.api.product.metadata_mapping import (
|
|
|
43
43
|
DEFAULT_GEOMETRY,
|
|
44
44
|
NOT_AVAILABLE,
|
|
45
45
|
NOT_MAPPED,
|
|
46
|
+
ONLINE_STATUS,
|
|
46
47
|
)
|
|
47
48
|
from eodag.utils import (
|
|
48
49
|
DEFAULT_DOWNLOAD_TIMEOUT,
|
|
@@ -62,6 +63,7 @@ if TYPE_CHECKING:
|
|
|
62
63
|
from eodag.plugins.apis.base import Api
|
|
63
64
|
from eodag.plugins.authentication.base import Authentication
|
|
64
65
|
from eodag.plugins.download.base import Download
|
|
66
|
+
from eodag.plugins.manager import PluginManager
|
|
65
67
|
from eodag.types.download_args import DownloadConf
|
|
66
68
|
from eodag.utils import Unpack
|
|
67
69
|
|
|
@@ -238,6 +240,37 @@ class EOProduct:
|
|
|
238
240
|
f"Unable to get {e.args[0]} key from EOProduct.properties"
|
|
239
241
|
)
|
|
240
242
|
|
|
243
|
+
def _register_downloader_from_manager(self, plugins_manager: PluginManager) -> None:
|
|
244
|
+
"""Register the downloader and authenticator for this EOProduct using the
|
|
245
|
+
provided plugins manager.
|
|
246
|
+
This method is typically called after the EOProduct has been created and
|
|
247
|
+
before any download operation is performed.
|
|
248
|
+
|
|
249
|
+
:param plugins_manager: The plugins manager instance to use for retrieving
|
|
250
|
+
the download and authentication plugins.
|
|
251
|
+
"""
|
|
252
|
+
download_plugin = plugins_manager.get_download_plugin(self)
|
|
253
|
+
if len(self.assets) > 0:
|
|
254
|
+
matching_url = next(iter(self.assets.values()))["href"]
|
|
255
|
+
elif self.properties.get("storageStatus") != ONLINE_STATUS:
|
|
256
|
+
matching_url = self.properties.get("orderLink") or self.properties.get(
|
|
257
|
+
"downloadLink"
|
|
258
|
+
)
|
|
259
|
+
else:
|
|
260
|
+
matching_url = self.properties.get("downloadLink")
|
|
261
|
+
|
|
262
|
+
try:
|
|
263
|
+
auth_plugin = next(
|
|
264
|
+
plugins_manager.get_auth_plugins(
|
|
265
|
+
self.provider,
|
|
266
|
+
matching_url=matching_url,
|
|
267
|
+
matching_conf=download_plugin.config,
|
|
268
|
+
)
|
|
269
|
+
)
|
|
270
|
+
except StopIteration:
|
|
271
|
+
auth_plugin = None
|
|
272
|
+
self.register_downloader(download_plugin, auth_plugin)
|
|
273
|
+
|
|
241
274
|
def register_downloader(
|
|
242
275
|
self, downloader: Union[Api, Download], authenticator: Optional[Authentication]
|
|
243
276
|
) -> None:
|
|
@@ -54,6 +54,7 @@ from eodag.utils import (
|
|
|
54
54
|
string_to_jsonpath,
|
|
55
55
|
update_nested_dict,
|
|
56
56
|
)
|
|
57
|
+
from eodag.utils.exceptions import ValidationError
|
|
57
58
|
|
|
58
59
|
if TYPE_CHECKING:
|
|
59
60
|
from shapely.geometry.base import BaseGeometry
|
|
@@ -1286,7 +1287,10 @@ def mtd_cfg_as_conversion_and_querypath(
|
|
|
1286
1287
|
|
|
1287
1288
|
|
|
1288
1289
|
def format_query_params(
|
|
1289
|
-
product_type: str,
|
|
1290
|
+
product_type: str,
|
|
1291
|
+
config: PluginConfig,
|
|
1292
|
+
query_dict: dict[str, Any],
|
|
1293
|
+
error_context: str = "",
|
|
1290
1294
|
) -> dict[str, Any]:
|
|
1291
1295
|
"""format the search parameters to query parameters"""
|
|
1292
1296
|
if "raise_errors" in query_dict.keys():
|
|
@@ -1299,10 +1303,26 @@ def format_query_params(
|
|
|
1299
1303
|
**config.products.get(product_type, {}).get("metadata_mapping", {}),
|
|
1300
1304
|
)
|
|
1301
1305
|
|
|
1306
|
+
# Raise error if non-queryables parameters are used and raise_mtd_discovery_error configured
|
|
1307
|
+
if (
|
|
1308
|
+
raise_mtd_discovery_error := config.products.get(product_type, {})
|
|
1309
|
+
.get("discover_metadata", {})
|
|
1310
|
+
.get("raise_mtd_discovery_error")
|
|
1311
|
+
) is None:
|
|
1312
|
+
raise_mtd_discovery_error = getattr(config, "discover_metadata", {}).get(
|
|
1313
|
+
"raise_mtd_discovery_error", False
|
|
1314
|
+
)
|
|
1315
|
+
|
|
1302
1316
|
query_params: dict[str, Any] = {}
|
|
1303
1317
|
# Get all the search parameters that are recognised as queryables by the
|
|
1304
1318
|
# provider (they appear in the queryables dictionary)
|
|
1305
|
-
queryables = _get_queryables(
|
|
1319
|
+
queryables = _get_queryables(
|
|
1320
|
+
query_dict,
|
|
1321
|
+
config,
|
|
1322
|
+
product_type_metadata_mapping,
|
|
1323
|
+
raise_mtd_discovery_error,
|
|
1324
|
+
error_context,
|
|
1325
|
+
)
|
|
1306
1326
|
|
|
1307
1327
|
for eodag_search_key, provider_search_key in queryables.items():
|
|
1308
1328
|
user_input = query_dict[eodag_search_key]
|
|
@@ -1438,6 +1458,8 @@ def _get_queryables(
|
|
|
1438
1458
|
search_params: dict[str, Any],
|
|
1439
1459
|
config: PluginConfig,
|
|
1440
1460
|
metadata_mapping: dict[str, Any],
|
|
1461
|
+
raise_mtd_discovery_error: bool,
|
|
1462
|
+
error_context: str,
|
|
1441
1463
|
) -> dict[str, Any]:
|
|
1442
1464
|
"""Retrieve the metadata mappings that are query-able"""
|
|
1443
1465
|
logger.debug("Retrieving queryable metadata from metadata_mapping")
|
|
@@ -1445,6 +1467,13 @@ def _get_queryables(
|
|
|
1445
1467
|
for eodag_search_key, user_input in search_params.items():
|
|
1446
1468
|
if user_input is not None:
|
|
1447
1469
|
md_mapping = metadata_mapping.get(eodag_search_key, (None, NOT_MAPPED))
|
|
1470
|
+
# raise an error when a query param not allowed by the provider is found
|
|
1471
|
+
if not isinstance(md_mapping, list) and raise_mtd_discovery_error:
|
|
1472
|
+
raise ValidationError(
|
|
1473
|
+
"Search parameters which are not queryable are disallowed for this product type on this provider: "
|
|
1474
|
+
f"please remove '{eodag_search_key}' from your search parameters. {error_context}",
|
|
1475
|
+
{eodag_search_key},
|
|
1476
|
+
)
|
|
1448
1477
|
_, md_value = md_mapping
|
|
1449
1478
|
# query param from defined metadata_mapping
|
|
1450
1479
|
if md_mapping is not None and isinstance(md_mapping, list):
|