eodag 3.0.1__py3-none-any.whl → 3.1.0__py3-none-any.whl

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 (87) hide show
  1. eodag/api/core.py +174 -138
  2. eodag/api/product/_assets.py +44 -15
  3. eodag/api/product/_product.py +58 -47
  4. eodag/api/product/drivers/__init__.py +81 -4
  5. eodag/api/product/drivers/base.py +65 -4
  6. eodag/api/product/drivers/generic.py +65 -0
  7. eodag/api/product/drivers/sentinel1.py +97 -0
  8. eodag/api/product/drivers/sentinel2.py +95 -0
  9. eodag/api/product/metadata_mapping.py +117 -90
  10. eodag/api/search_result.py +13 -23
  11. eodag/cli.py +26 -5
  12. eodag/config.py +86 -92
  13. eodag/plugins/apis/base.py +1 -1
  14. eodag/plugins/apis/ecmwf.py +42 -22
  15. eodag/plugins/apis/usgs.py +17 -16
  16. eodag/plugins/authentication/aws_auth.py +16 -13
  17. eodag/plugins/authentication/base.py +5 -3
  18. eodag/plugins/authentication/header.py +3 -3
  19. eodag/plugins/authentication/keycloak.py +4 -4
  20. eodag/plugins/authentication/oauth.py +7 -3
  21. eodag/plugins/authentication/openid_connect.py +22 -16
  22. eodag/plugins/authentication/sas_auth.py +4 -4
  23. eodag/plugins/authentication/token.py +41 -10
  24. eodag/plugins/authentication/token_exchange.py +1 -1
  25. eodag/plugins/base.py +4 -4
  26. eodag/plugins/crunch/base.py +4 -4
  27. eodag/plugins/crunch/filter_date.py +4 -4
  28. eodag/plugins/crunch/filter_latest_intersect.py +6 -6
  29. eodag/plugins/crunch/filter_latest_tpl_name.py +7 -7
  30. eodag/plugins/crunch/filter_overlap.py +4 -4
  31. eodag/plugins/crunch/filter_property.py +6 -7
  32. eodag/plugins/download/aws.py +146 -87
  33. eodag/plugins/download/base.py +38 -56
  34. eodag/plugins/download/creodias_s3.py +29 -0
  35. eodag/plugins/download/http.py +173 -183
  36. eodag/plugins/download/s3rest.py +10 -11
  37. eodag/plugins/manager.py +10 -20
  38. eodag/plugins/search/__init__.py +6 -5
  39. eodag/plugins/search/base.py +90 -46
  40. eodag/plugins/search/build_search_result.py +1048 -361
  41. eodag/plugins/search/cop_marine.py +22 -12
  42. eodag/plugins/search/creodias_s3.py +9 -73
  43. eodag/plugins/search/csw.py +11 -11
  44. eodag/plugins/search/data_request_search.py +19 -18
  45. eodag/plugins/search/qssearch.py +99 -258
  46. eodag/plugins/search/stac_list_assets.py +85 -0
  47. eodag/plugins/search/static_stac_search.py +4 -4
  48. eodag/resources/ext_product_types.json +1 -1
  49. eodag/resources/product_types.yml +1134 -325
  50. eodag/resources/providers.yml +906 -2006
  51. eodag/resources/stac_api.yml +2 -2
  52. eodag/resources/user_conf_template.yml +10 -9
  53. eodag/rest/cache.py +2 -2
  54. eodag/rest/config.py +3 -3
  55. eodag/rest/core.py +112 -82
  56. eodag/rest/errors.py +5 -5
  57. eodag/rest/server.py +33 -14
  58. eodag/rest/stac.py +41 -38
  59. eodag/rest/types/collections_search.py +3 -3
  60. eodag/rest/types/eodag_search.py +29 -23
  61. eodag/rest/types/queryables.py +42 -31
  62. eodag/rest/types/stac_search.py +15 -25
  63. eodag/rest/utils/__init__.py +14 -21
  64. eodag/rest/utils/cql_evaluate.py +6 -6
  65. eodag/rest/utils/rfc3339.py +2 -2
  66. eodag/types/__init__.py +141 -32
  67. eodag/types/bbox.py +2 -2
  68. eodag/types/download_args.py +3 -3
  69. eodag/types/queryables.py +183 -72
  70. eodag/types/search_args.py +4 -4
  71. eodag/types/whoosh.py +127 -3
  72. eodag/utils/__init__.py +153 -51
  73. eodag/utils/exceptions.py +28 -21
  74. eodag/utils/import_system.py +2 -2
  75. eodag/utils/repr.py +65 -6
  76. eodag/utils/requests.py +13 -13
  77. eodag/utils/rest.py +2 -2
  78. eodag/utils/s3.py +231 -0
  79. eodag/utils/stac_reader.py +10 -10
  80. {eodag-3.0.1.dist-info → eodag-3.1.0.dist-info}/METADATA +77 -76
  81. eodag-3.1.0.dist-info/RECORD +113 -0
  82. {eodag-3.0.1.dist-info → eodag-3.1.0.dist-info}/WHEEL +1 -1
  83. {eodag-3.0.1.dist-info → eodag-3.1.0.dist-info}/entry_points.txt +4 -2
  84. eodag/utils/constraints.py +0 -244
  85. eodag-3.0.1.dist-info/RECORD +0 -109
  86. {eodag-3.0.1.dist-info → eodag-3.1.0.dist-info}/LICENSE +0 -0
  87. {eodag-3.0.1.dist-info → eodag-3.1.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: eodag
3
- Version: 3.0.1
3
+ Version: 3.1.0
4
4
  Summary: Earth Observation Data Access Gateway
5
5
  Home-page: https://github.com/CS-SI/eodag
6
6
  Author: CS GROUP - France
@@ -36,95 +36,96 @@ Requires-Dist: boto3
36
36
  Requires-Dist: botocore
37
37
  Requires-Dist: click
38
38
  Requires-Dist: geojson
39
- Requires-Dist: jsonpath-ng <1.6.0
39
+ Requires-Dist: jsonpath-ng
40
40
  Requires-Dist: lxml
41
- Requires-Dist: pydantic >=2.1.0
42
- Requires-Dist: pydantic-core
43
- Requires-Dist: PyJWT >=2.5.0
44
- Requires-Dist: pyproj >=2.1.0
41
+ Requires-Dist: orjson
42
+ Requires-Dist: pydantic!=2.10.0,>=2.1.0
43
+ Requires-Dist: pydantic_core
44
+ Requires-Dist: PyJWT[crypto]>=2.5.0
45
+ Requires-Dist: pyproj>=2.1.0
45
46
  Requires-Dist: pyshp
46
- Requires-Dist: pystac >=1.0.0b1
47
+ Requires-Dist: pystac>=1.0.0b1
47
48
  Requires-Dist: python-dateutil
48
49
  Requires-Dist: PyYAML
49
50
  Requires-Dist: requests
50
51
  Requires-Dist: setuptools
51
- Requires-Dist: shapely >=2.0.6
52
+ Requires-Dist: shapely>=2.0.6
52
53
  Requires-Dist: stream-zip
53
54
  Requires-Dist: tqdm
54
- Requires-Dist: typing-extensions >=4.8.0
55
+ Requires-Dist: typing_extensions>=4.8.0
55
56
  Requires-Dist: urllib3
56
57
  Requires-Dist: Whoosh
57
- Requires-Dist: orjson ; python_version < "3.12" or platform_system != "Windows"
58
- Requires-Dist: orjson <3.10.0 ; python_version >= "3.12" and platform_system == "Windows"
59
58
  Provides-Extra: all
60
- Requires-Dist: eodag[all-providers,csw,server,tutorials] ; extra == 'all'
59
+ Requires-Dist: eodag[all-providers,csw,server,tutorials]; extra == "all"
61
60
  Provides-Extra: all-providers
62
- Requires-Dist: eodag[ecmwf,usgs] ; extra == 'all-providers'
61
+ Requires-Dist: eodag[ecmwf,usgs]; extra == "all-providers"
63
62
  Provides-Extra: csw
64
- Requires-Dist: OWSLib >=0.27.1 ; extra == 'csw'
65
- Provides-Extra: dev
66
- Requires-Dist: eodag[all-providers,csw,server,stubs] ; extra == 'dev'
67
- Requires-Dist: pytest ; extra == 'dev'
68
- Requires-Dist: pytest-cov ; extra == 'dev'
69
- Requires-Dist: py >=1.8.2 ; extra == 'dev'
70
- Requires-Dist: pytest-html <3.2.0 ; extra == 'dev'
71
- Requires-Dist: pytest-xdist ; extra == 'dev'
72
- Requires-Dist: pytest-socket ; extra == 'dev'
73
- Requires-Dist: pytest-instafail ; extra == 'dev'
74
- Requires-Dist: tox ; extra == 'dev'
75
- Requires-Dist: tox-uv ; extra == 'dev'
76
- Requires-Dist: faker ; extra == 'dev'
77
- Requires-Dist: moto ; extra == 'dev'
78
- Requires-Dist: twine ; extra == 'dev'
79
- Requires-Dist: wheel ; extra == 'dev'
80
- Requires-Dist: flake8 ; extra == 'dev'
81
- Requires-Dist: pre-commit ; extra == 'dev'
82
- Requires-Dist: responses <0.24.0 ; extra == 'dev'
83
- Requires-Dist: fastapi[all] ; extra == 'dev'
84
- Requires-Dist: stdlib-list ; extra == 'dev'
85
- Requires-Dist: mypy ; extra == 'dev'
86
- Provides-Extra: docs
87
- Requires-Dist: eodag[all,stubs] ; extra == 'docs'
88
- Requires-Dist: sphinx ; extra == 'docs'
89
- Requires-Dist: sphinx-book-theme >=1.0.0 ; extra == 'docs'
90
- Requires-Dist: sphinx-copybutton ; extra == 'docs'
91
- Requires-Dist: sphinx-tabs ; extra == 'docs'
92
- Requires-Dist: nbsphinx ; extra == 'docs'
93
- Requires-Dist: sphinx-autodoc-typehints ; extra == 'docs'
94
- Requires-Dist: sphinxemoji ; extra == 'docs'
63
+ Requires-Dist: OWSLib>=0.27.1; extra == "csw"
95
64
  Provides-Extra: ecmwf
96
- Requires-Dist: ecmwf-api-client ; extra == 'ecmwf'
97
- Provides-Extra: notebook
98
- Requires-Dist: tqdm[notebook] ; extra == 'notebook'
65
+ Requires-Dist: ecmwf-api-client; extra == "ecmwf"
66
+ Provides-Extra: usgs
67
+ Requires-Dist: usgs>=0.3.1; extra == "usgs"
99
68
  Provides-Extra: server
100
- Requires-Dist: fastapi >=0.93.0 ; extra == 'server'
101
- Requires-Dist: pygeofilter ; extra == 'server'
102
- Requires-Dist: starlette ; extra == 'server'
103
- Requires-Dist: uvicorn[standard] ; extra == 'server'
104
- Requires-Dist: pydantic-settings ; extra == 'server'
105
- Requires-Dist: cachetools ; extra == 'server'
106
- Provides-Extra: stubs
107
- Requires-Dist: boto3-stubs[essential] ; extra == 'stubs'
108
- Requires-Dist: types-lxml ; extra == 'stubs'
109
- Requires-Dist: types-cachetools ; extra == 'stubs'
110
- Requires-Dist: types-requests ; extra == 'stubs'
111
- Requires-Dist: types-python-dateutil ; extra == 'stubs'
112
- Requires-Dist: types-setuptools ; extra == 'stubs'
113
- Requires-Dist: types-tqdm ; extra == 'stubs'
114
- Requires-Dist: types-urllib3 ; extra == 'stubs'
69
+ Requires-Dist: fastapi>=0.93.0; extra == "server"
70
+ Requires-Dist: pygeofilter; extra == "server"
71
+ Requires-Dist: starlette; extra == "server"
72
+ Requires-Dist: uvicorn[standard]; extra == "server"
73
+ Requires-Dist: pydantic-settings; extra == "server"
74
+ Requires-Dist: cachetools; extra == "server"
75
+ Provides-Extra: notebook
76
+ Requires-Dist: tqdm[notebook]; extra == "notebook"
115
77
  Provides-Extra: tutorials
116
- Requires-Dist: eodag[ecmwf,notebook] ; extra == 'tutorials'
117
- Requires-Dist: eodag-cube >=0.2.0 ; extra == 'tutorials'
118
- Requires-Dist: jupyter ; extra == 'tutorials'
119
- Requires-Dist: ipyleaflet >=0.10.0 ; extra == 'tutorials'
120
- Requires-Dist: ipywidgets ; extra == 'tutorials'
121
- Requires-Dist: matplotlib ; extra == 'tutorials'
122
- Requires-Dist: folium ; extra == 'tutorials'
123
- Requires-Dist: imageio ; extra == 'tutorials'
124
- Requires-Dist: rasterio ; extra == 'tutorials'
125
- Requires-Dist: netcdf4 ; extra == 'tutorials'
126
- Provides-Extra: usgs
127
- Requires-Dist: usgs >=0.3.1 ; extra == 'usgs'
78
+ Requires-Dist: eodag[ecmwf,notebook]; extra == "tutorials"
79
+ Requires-Dist: eodag-cube>=0.6.0b2; extra == "tutorials"
80
+ Requires-Dist: jupyter; extra == "tutorials"
81
+ Requires-Dist: ipyleaflet>=0.10.0; extra == "tutorials"
82
+ Requires-Dist: ipywidgets; extra == "tutorials"
83
+ Requires-Dist: matplotlib; extra == "tutorials"
84
+ Requires-Dist: folium; extra == "tutorials"
85
+ Requires-Dist: imageio; extra == "tutorials"
86
+ Requires-Dist: rasterio; extra == "tutorials"
87
+ Requires-Dist: netcdf4; extra == "tutorials"
88
+ Requires-Dist: cartopy; extra == "tutorials"
89
+ Provides-Extra: dev
90
+ Requires-Dist: eodag[all-providers,csw,server,stubs]; extra == "dev"
91
+ Requires-Dist: pytest; extra == "dev"
92
+ Requires-Dist: pytest-cov; extra == "dev"
93
+ Requires-Dist: py>=1.8.2; extra == "dev"
94
+ Requires-Dist: pytest-html!=3.2.0; extra == "dev"
95
+ Requires-Dist: pytest-xdist; extra == "dev"
96
+ Requires-Dist: pytest-socket; extra == "dev"
97
+ Requires-Dist: pytest-instafail; extra == "dev"
98
+ Requires-Dist: tox; extra == "dev"
99
+ Requires-Dist: tox-uv; extra == "dev"
100
+ Requires-Dist: faker; extra == "dev"
101
+ Requires-Dist: moto>=5; extra == "dev"
102
+ Requires-Dist: twine; extra == "dev"
103
+ Requires-Dist: wheel; extra == "dev"
104
+ Requires-Dist: flake8; extra == "dev"
105
+ Requires-Dist: pre-commit; extra == "dev"
106
+ Requires-Dist: responses!=0.24.0; extra == "dev"
107
+ Requires-Dist: fastapi[all]; extra == "dev"
108
+ Requires-Dist: stdlib-list; extra == "dev"
109
+ Requires-Dist: mypy; extra == "dev"
110
+ Provides-Extra: stubs
111
+ Requires-Dist: boto3-stubs[essential]; extra == "stubs"
112
+ Requires-Dist: types-lxml; extra == "stubs"
113
+ Requires-Dist: types-cachetools; extra == "stubs"
114
+ Requires-Dist: types-requests; extra == "stubs"
115
+ Requires-Dist: types-python-dateutil; extra == "stubs"
116
+ Requires-Dist: types-PyYAML; extra == "stubs"
117
+ Requires-Dist: types-setuptools; extra == "stubs"
118
+ Requires-Dist: types-tqdm; extra == "stubs"
119
+ Requires-Dist: types-urllib3; extra == "stubs"
120
+ Provides-Extra: docs
121
+ Requires-Dist: eodag[all,stubs]; extra == "docs"
122
+ Requires-Dist: sphinx; extra == "docs"
123
+ Requires-Dist: sphinx-book-theme>=1.0.0; extra == "docs"
124
+ Requires-Dist: sphinx-copybutton; extra == "docs"
125
+ Requires-Dist: sphinx-tabs; extra == "docs"
126
+ Requires-Dist: nbsphinx; extra == "docs"
127
+ Requires-Dist: sphinx_autodoc_typehints; extra == "docs"
128
+ Requires-Dist: sphinxemoji; extra == "docs"
128
129
 
129
130
  .. image:: https://eodag.readthedocs.io/en/latest/_static/eodag_bycs.png
130
131
  :target: https://github.com/CS-SI/eodag
@@ -315,7 +316,7 @@ An eodag instance can be exposed through a STAC compliant REST api from the comm
315
316
 
316
317
  .. code-block:: bash
317
318
 
318
- docker run -p 5000:5000 --rm csspace/eodag-server:3.0.1
319
+ docker run -p 5000:5000 --rm csspace/eodag-server:3.1.0
319
320
 
320
321
  You can also browse over your STAC API server using `STAC Browser <https://github.com/radiantearth/stac-browser>`_.
321
322
  Simply run:
@@ -0,0 +1,113 @@
1
+ eodag/__init__.py,sha256=qADIO6H3KR0CMs0qePdJROjSzcGnHaYpv-RFIk18WGQ,1608
2
+ eodag/cli.py,sha256=63QvLzyZEf6dsTB1jK_80lOTtp6fbjoSJROqKIL-mR4,29959
3
+ eodag/config.py,sha256=nHQQVsSFIGNHVxkE8fDdejQ1N2ut-58-TFv-SCfGunU,45659
4
+ eodag/crunch.py,sha256=fLVAPGVPw31N_DrnFk4gkCpQZLMY8oBhK6NUSYmdr24,1099
5
+ eodag/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ eodag/api/__init__.py,sha256=ytr30NUVmEtmJTsp3QCwkCIhS1nF6UlFCv0vmySHN7g,735
7
+ eodag/api/core.py,sha256=tGMdrgJnm_7D5b2VoMCt-QeMOnOOfnhYiOwufDxpF6k,109426
8
+ eodag/api/search_result.py,sha256=ri3-5Jxr1Ik8V0uQtuXvnd3L3tSGS_niqpmHeaI2Obw,8176
9
+ eodag/api/product/__init__.py,sha256=klSKudmnHHeXvcwIX6Y30UTiP39tMfTwLNexSnAZnx0,1154
10
+ eodag/api/product/_assets.py,sha256=rFBvk0xFdy3Wp7yQNHhuE5yYzvfMSqX2N96f_TRq-ho,7198
11
+ eodag/api/product/_product.py,sha256=1Jz-oPg65Njc7DOWw4ADT9QmNXReiD1LeXFDosnXsOA,23458
12
+ eodag/api/product/metadata_mapping.py,sha256=PCaL_nEXJTkBOzayAzo2Cowq1vlA30lIMD-e_xILbIQ,72041
13
+ eodag/api/product/drivers/__init__.py,sha256=Sy9bGmDhWCAxvxRUf3QGijjQoQvzS1LSUMN34Usq6fM,3357
14
+ eodag/api/product/drivers/base.py,sha256=iPAE5Jx3isxmHHFPP-jysdUylYbsbIq6UejU3qsMROE,4111
15
+ eodag/api/product/drivers/generic.py,sha256=RER088E5_mqyGw1Pa4Kxea5YMFakAHFNcZEQINRiDwM,2069
16
+ eodag/api/product/drivers/sentinel1.py,sha256=xpvhOvVhpuwVihPMo_q79VI67ru-FqKtbRa5kA79D3k,3253
17
+ eodag/api/product/drivers/sentinel2.py,sha256=dMfIrcwF4h8KoyUj94yPUhRiN7FIef4mTzfbkkhLIc8,3124
18
+ eodag/plugins/__init__.py,sha256=KQkD5aVwb9I6C-Rmi5ABEG1-j8w5FP1zKN12vagsT9Y,739
19
+ eodag/plugins/base.py,sha256=bBp4k8QYJFEE6CRctrVwjws6suBwQdCLrLmvoGAmG3A,2670
20
+ eodag/plugins/manager.py,sha256=EYz5zliB3e3pxTvP4QIwtMtXfwPhxXJxjdYIsJsvFx0,20373
21
+ eodag/plugins/apis/__init__.py,sha256=PyY4f7P2iu3MkLPnw5eOrVew2fuavbBL3Asci3Ulwoo,744
22
+ eodag/plugins/apis/base.py,sha256=oCEKVtIbOjzNgM3lzaCCtO-DhU2PvGfKaATG6OxR-V8,2818
23
+ eodag/plugins/apis/ecmwf.py,sha256=CnFeuxx2GghuSQF9oGhCWC2ixL3q9aO_lpMRZehLueI,11455
24
+ eodag/plugins/apis/usgs.py,sha256=42vrVZ_fKi1-Z8nUt5-9wapUE7v75_hzgZHbKD23Auo,19625
25
+ eodag/plugins/authentication/__init__.py,sha256=_LVw42Bb1IhGAZH5xHRaS4b1iFoF9e27KDZOyoSoJHY,1039
26
+ eodag/plugins/authentication/aws_auth.py,sha256=6qeULjxljV9WTPqZjJJ6E0DWeiaGmzGR3rM0at75CFQ,3199
27
+ eodag/plugins/authentication/base.py,sha256=7vwX7O9xxvcKA9cMZ85F2eOkcdb7HyNbanUC5J0f9SA,2643
28
+ eodag/plugins/authentication/generic.py,sha256=LlOVPjvwRpbMDl62Brd7Ao34WmktKWoo0LP7D4T6zPg,2385
29
+ eodag/plugins/authentication/header.py,sha256=U_KnUqgZTLHXM5OKdGbH6jRqoQ0uIfOoxO6krUeAAcQ,4284
30
+ eodag/plugins/authentication/keycloak.py,sha256=f0AnWkvtsmLmWqgGfT3XB6AqbfCPU_ZHkDu07Zwf3E4,7178
31
+ eodag/plugins/authentication/oauth.py,sha256=fCMx7OxS3JNO9lLZhQNnL9lsBB9nFwZJLEYXI49QRtw,1952
32
+ eodag/plugins/authentication/openid_connect.py,sha256=LbpQzekxin_bLrKfk7bzU3LGxlfaABSm1fwx7S1O58M,24913
33
+ eodag/plugins/authentication/qsauth.py,sha256=bkepO_sFRIhYm3Dzecx3VJP0Ap37vUuJSRmEY8HrV1U,3947
34
+ eodag/plugins/authentication/sas_auth.py,sha256=gZp5UDeAi6iEi-IXv_RjrmAVpQCD5s9A0b3V7HV6KnU,4773
35
+ eodag/plugins/authentication/token.py,sha256=5mipX9SuNSNJtLntLRLm8KS7kqwylurvzkQq57fxWg0,12879
36
+ eodag/plugins/authentication/token_exchange.py,sha256=m0KHc4KOhlw0YYXCWEAwB7n7cJLScq3pXa6M6fiXNAQ,4902
37
+ eodag/plugins/crunch/__init__.py,sha256=58D7kJhEpHJWobIKaNFPynfbSqAWgS90BiHzitqS5Ds,746
38
+ eodag/plugins/crunch/base.py,sha256=XW4HISgR0UswiEZmE4t42HxnSxknZBtVpuK8XVLYHzU,1415
39
+ eodag/plugins/crunch/filter_date.py,sha256=zdOFuXiAZxdLedsUd8hbsJCsItVoN7zPTEtnOugRs70,4440
40
+ eodag/plugins/crunch/filter_latest_intersect.py,sha256=EkOyHEXFMrLQ7ZlTbzNs9lXZVDsbYTwgkPPK4JAkalY,4426
41
+ eodag/plugins/crunch/filter_latest_tpl_name.py,sha256=pP4EDP73mQg1zvkVm1Uo4nGAgwhNsMWe7_ecOBDbA0E,3679
42
+ eodag/plugins/crunch/filter_overlap.py,sha256=mkm5_ljgK_7QOOp-KgJjDjbVfss4gwRjIYUTMyKrw5o,7272
43
+ eodag/plugins/crunch/filter_property.py,sha256=5V0_S11iAnvZqRzYN0Jox96zZwIxPGC13IWQwNYyYrU,3193
44
+ eodag/plugins/download/__init__.py,sha256=zqszaeNgYP0YHlZDkLMf6odcwNw0KrAahGpcA-l0kAw,740
45
+ eodag/plugins/download/aws.py,sha256=icMIeW6GEd62bZU_5YsxalU-BWOK_PoXEISLPLk_7EQ,58586
46
+ eodag/plugins/download/base.py,sha256=ulkGfiY2qMtzyEPdUlP8CZ6w5Bqi2hckuX-sGqpkVeQ,29994
47
+ eodag/plugins/download/creodias_s3.py,sha256=RoEhYHtsPDbfrZhBllYoek0r7YzP8Upf5CPgc-PnlZM,4151
48
+ eodag/plugins/download/http.py,sha256=FhvkCVxj_ENV31Nm2ulT3DRlPQYBM6eQtf2of9M0T2o,56707
49
+ eodag/plugins/download/s3rest.py,sha256=BYkKglGhTVyR0A-8ls5gLhWOPwc_DgB4aydj79wpqoM,14825
50
+ eodag/plugins/search/__init__.py,sha256=bBrl3TffoU1wVpaeXmTEIailoh9W6fla4IP-8SWqA9U,2019
51
+ eodag/plugins/search/base.py,sha256=b9zAPLQITBSOJ9n5zBxtiHlPkQwACjjJkD894oYZ7L8,18555
52
+ eodag/plugins/search/build_search_result.py,sha256=FbVJvviyhSU-cuY7ctoJbXR0QKMbUFfTVpt7WsHx4mE,45426
53
+ eodag/plugins/search/cop_marine.py,sha256=pRWNY9MXY-XzlpQjqOI8ImOiNUehv9pwNl6oR9r171w,19720
54
+ eodag/plugins/search/creodias_s3.py,sha256=rBZf3Uza7z3VuBdoUJQ9kuufGgACKVsEvK3phUo7C7M,3379
55
+ eodag/plugins/search/csw.py,sha256=de8CNjz4bjEny27V0RXC7V8LRz0Ik3yqQVjTAc_JlyA,12548
56
+ eodag/plugins/search/data_request_search.py,sha256=yrKu3EXhn6Utyai3qv5NPnH-V4EuGIAIxw6XzJA4IIw,26715
57
+ eodag/plugins/search/qssearch.py,sha256=wGxniSj8fpPHFhRv5cKJnIZC7wyTeVayKsyzoA9DJGE,91271
58
+ eodag/plugins/search/stac_list_assets.py,sha256=OOCMyjD8XD-m39k0SyKMrRi4K8Ii5mOQsA6zSAeQDGI,3435
59
+ eodag/plugins/search/static_stac_search.py,sha256=rfcKBD-0-gDFg6jbR_XCsVH1t9Yf9HIlnFE_Drr0BAs,9259
60
+ eodag/resources/ext_product_types.json,sha256=aC6kxOIy4wmnNWGV9vM_nEQBGgO_boz8srJBox-fqlw,3198079
61
+ eodag/resources/locations_conf_template.yml,sha256=_eBv-QKHYMIKhY0b0kp4Ee33RsayxN8LWH3kDXxfFSk,986
62
+ eodag/resources/product_types.yml,sha256=d8KND-mMtaWjvbBFVHQlxcfyBM4mG5lMQqJQELV_hUg,409966
63
+ eodag/resources/providers.yml,sha256=b7xFSnZur34MNdP1ZMgRQYMuQ2B-jBAAjEGmNp-zpWk,224280
64
+ eodag/resources/stac.yml,sha256=XgQFkJEfu_f2ZiVM5L1flkew7wq55p_PJmDuVkOG3fs,10442
65
+ eodag/resources/stac_api.yml,sha256=2FdQL_qBTIUlu6KH836T4CXBKO9AvVxA_Ub3J1RP81A,68881
66
+ eodag/resources/stac_provider.yml,sha256=2yfdnuhJYV1f5el3aFkunoPqHAcD8oCDzvASbmldIvY,6703
67
+ eodag/resources/user_conf_template.yml,sha256=VitU2oHwcWNd7CoONfHabMBGwCPfYjwyU3cX63oJaIs,7765
68
+ eodag/resources/shp/ne_110m_admin_0_map_units.VERSION.txt,sha256=CHSo_jbv-4d4D0MYRbWn2FvmV_K9mYzo7qznF4YNO3g,7
69
+ eodag/resources/shp/ne_110m_admin_0_map_units.cpg,sha256=FG1nif_gM6UpfBrQRuamLuNTGbhrAhRE8FtuoqqKH0o,6
70
+ eodag/resources/shp/ne_110m_admin_0_map_units.dbf,sha256=uEEO22hZ_crWxMNhuQ_ix889c1Us1awYXAglxbf1K-s,393747
71
+ eodag/resources/shp/ne_110m_admin_0_map_units.prj,sha256=oaohy2UQUlLMiTy3HhYS1Kurl_7z3A3LYcOmVf_TbNo,148
72
+ eodag/resources/shp/ne_110m_admin_0_map_units.shp,sha256=GMVJQ1pe0JfaJnVfAew0MvembDJDkfUs0To2Qc82Aos,181628
73
+ eodag/resources/shp/ne_110m_admin_0_map_units.shx,sha256=N74fDl6sQAljmHQ_e9DO7suO6BXuwC0LwmriAnDBH-U,1564
74
+ eodag/rest/__init__.py,sha256=v4SI9gLuFP81YXi5_k98lvVNGzz6h8YZ_aUdhKAbE2M,916
75
+ eodag/rest/cache.py,sha256=dSgpw6uWDq45qxfD25LXkB-9Qk0OEb5L8UOl7yuMPEU,2097
76
+ eodag/rest/config.py,sha256=qWXukdSB6cSpkZszkPSGPGn5oiVfKEC3rPGp0q-2c4E,2112
77
+ eodag/rest/constants.py,sha256=XsNgjzv0Qvw1hhjeuscDuyQpCm99g3O-hEyslPSiFzQ,945
78
+ eodag/rest/core.py,sha256=P4o9Fjb-1xE1mhKMai1m0D2J90pSkw_hxE3XI4iGXBg,26550
79
+ eodag/rest/errors.py,sha256=R_zs9NILVnZ5qIpVgPtjprv_BalJxZEqr-LSZ0VVV8k,6192
80
+ eodag/rest/server.py,sha256=dqwP_mf856gPKxZCtdmH5WoYYji7edSab3Q_PzEQuUE,18308
81
+ eodag/rest/server.wsgi,sha256=ssM4JQi8tZpOYj03CTdM0weyUF1b3Lbh38pdD-vBfXs,152
82
+ eodag/rest/stac.py,sha256=t0xuFmJYbPvzBvJBs_8PQLCOJc5fJ8mbV9AbJxbMgVk,35827
83
+ eodag/rest/templates/README,sha256=qFgCBE6XC4YiXkpPoSHkYbMTQr8Zg5Wc5eAKVcooXmw,57
84
+ eodag/rest/types/__init__.py,sha256=Bu0C3dzXHe8kocnz2PIHV0GjQWlAQas6ToIfwusNPQs,742
85
+ eodag/rest/types/collections_search.py,sha256=TRZI72a1W29a2e_mg9cQpFUcTTEG3_SSsfYrZZuXMLA,1527
86
+ eodag/rest/types/eodag_search.py,sha256=uN96xejktaQRojKZm2BGAgxvcWcwBkle4_I2z7jlDzw,14281
87
+ eodag/rest/types/queryables.py,sha256=e3IMM2eIYnUsjrErw54CNZjMLuFDTMxSbLRHDFFvVMw,6470
88
+ eodag/rest/types/stac_search.py,sha256=a_m7ATLPFttvUo9_hfsIAQKtNhBvX3U86lNWv_8_oIM,8765
89
+ eodag/rest/utils/__init__.py,sha256=VRTxZFU15mB4izpYd8e30_xR1iZlJRsoW1jeCZ7bk1o,6560
90
+ eodag/rest/utils/cql_evaluate.py,sha256=aMcdowtYbQpU1H9oX1IM2PMot6XTy49Q6H2k-YBEtco,4087
91
+ eodag/rest/utils/rfc3339.py,sha256=_kaK7_8sxXyCAAs99ltVoinUw02frtZckl72ytI6IjQ,2234
92
+ eodag/types/__init__.py,sha256=FPDFHvjMnHBFNPx-B4TN-6qZhZ8VI5ICort6U6hCTYo,15612
93
+ eodag/types/bbox.py,sha256=jbfX58KOKIl0OoGZc93kAYhG_mEOjuBQGJtR2hl3-_Y,4354
94
+ eodag/types/download_args.py,sha256=urSl5KbLRN1XetMa2XzxYltny8CCFmHpjxU3j3BEGO8,1565
95
+ eodag/types/queryables.py,sha256=9Jllvoq0SgCKQUmnhVNqj55_xdMq2Yw49-1SWFh_nI8,9880
96
+ eodag/types/search_args.py,sha256=EtG8nXnApBnYrFo5FVvsvvEqRlqTxJ0lrmIem9Wtg8c,5649
97
+ eodag/types/whoosh.py,sha256=VXpWAZaXLR_RRnI9gh5iwkqn1n63krVGj2SX0rB2mQo,7225
98
+ eodag/utils/__init__.py,sha256=bdV7WMU9Zz9c6a7D63bTTNKuZmu7aEIyCm9QoS8rj9Y,52779
99
+ eodag/utils/exceptions.py,sha256=hYeq5GzMqW50o6mSUUlvOpsfU0eRjwhpqXTSE5MFv9Q,4452
100
+ eodag/utils/import_system.py,sha256=1vwcSRlsZwuaP8ssrpRBP5jldZ54eLv2ttNCdLf0TtA,3901
101
+ eodag/utils/logging.py,sha256=KoMsyS1f6O1hr_SMDOIxvt842mOJgmu_yLUk0-0EKFs,3507
102
+ eodag/utils/notebook.py,sha256=AUxtayvu26qYf3x3Eu3ujRl1XDgy24EfQaETbqmXSZw,2703
103
+ eodag/utils/repr.py,sha256=o6NhScogBPI69m83GsHh3hXONb9-byPfuWgJ1U39Kfw,5463
104
+ eodag/utils/requests.py,sha256=avNHKrOZ7Kp6lUA7u4kqupIth9MoirLzDsMrrmQDt4s,4560
105
+ eodag/utils/rest.py,sha256=a9tlG_Y9iQXLeyeLyecxFNbopGHV-8URecMSRs0UXu0,3348
106
+ eodag/utils/s3.py,sha256=2mspYgEYGA1IDbruMMDdJ2DoxyX3riSlV7PDIu7carg,7989
107
+ eodag/utils/stac_reader.py,sha256=d1tv82_E5dEmK9Vlw3TQfU1ndXg_iUGatxMeWMnIWPo,9236
108
+ eodag-3.1.0.dist-info/LICENSE,sha256=4MAecetnRTQw5DlHtiikDSzKWO1xVLwzM5_DsPMYlnE,10172
109
+ eodag-3.1.0.dist-info/METADATA,sha256=guSGMofcDDNoLt9gTTAz0F9iCFOdHibm81PEGyJ6gaw,15454
110
+ eodag-3.1.0.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
111
+ eodag-3.1.0.dist-info/entry_points.txt,sha256=krdrBOQso6kAcSekV9ItEYAkE8syTC4Ev75bI781VgE,2561
112
+ eodag-3.1.0.dist-info/top_level.txt,sha256=025IMTmVe5eDjIPP4KEFQKespOPMQdne4U4jOy8nftM,6
113
+ eodag-3.1.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (76.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -31,15 +31,17 @@ HTTPDownload = eodag.plugins.download.http:HTTPDownload
31
31
  S3RestDownload = eodag.plugins.download.s3rest:S3RestDownload
32
32
 
33
33
  [eodag.plugins.search]
34
- BuildPostSearchResult = eodag.plugins.search.build_search_result:BuildPostSearchResult
35
- BuildSearchResult = eodag.plugins.search.build_search_result:BuildSearchResult
36
34
  CSWSearch = eodag.plugins.search.csw:CSWSearch [csw]
37
35
  CopMarineSearch = eodag.plugins.search.cop_marine:CopMarineSearch
38
36
  CreodiasS3Search = eodag.plugins.search.creodias_s3:CreodiasS3Search
39
37
  DataRequestSearch = eodag.plugins.search.data_request_search:DataRequestSearch
38
+ ECMWFSearch = eodag.plugins.search.build_search_result:ECMWFSearch
39
+ MeteoblueSearch = eodag.plugins.search.build_search_result:MeteoblueSearch
40
40
  ODataV4Search = eodag.plugins.search.qssearch:ODataV4Search
41
41
  PostJsonSearch = eodag.plugins.search.qssearch:PostJsonSearch
42
42
  PostJsonSearchWithStacQueryables = eodag.plugins.search.qssearch:PostJsonSearchWithStacQueryables
43
43
  QueryStringSearch = eodag.plugins.search.qssearch:QueryStringSearch
44
+ StacListAssets = eodag.plugins.search.stac_list_assets:StacListAssets
44
45
  StacSearch = eodag.plugins.search.qssearch:StacSearch
45
46
  StaticStacSearch = eodag.plugins.search.static_stac_search:StaticStacSearch
47
+ WekeoECMWFSearch = eodag.plugins.search.build_search_result:WekeoECMWFSearch
@@ -1,244 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # Copyright 2024, CS Systemes d'Information, https://www.csgroup.eu/
3
- #
4
- # This file is part of EODAG project
5
- # https://www.github.com/CS-SI/EODAG
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- import copy
19
- import logging
20
- from typing import Any, Dict, List, Set, Union
21
-
22
- from requests.auth import AuthBase
23
-
24
- from eodag.api.product.metadata_mapping import get_provider_queryable_key
25
- from eodag.plugins.apis.base import Api
26
- from eodag.plugins.search.base import Search
27
- from eodag.utils import deepcopy
28
- from eodag.utils.exceptions import RequestError, ValidationError
29
- from eodag.utils.requests import fetch_json
30
-
31
- logger = logging.getLogger("eodag.constraints")
32
-
33
-
34
- def get_constraint_queryables_with_additional_params(
35
- constraints: List[Any],
36
- input_params: Dict[str, Any],
37
- plugin: Union[Search, Api],
38
- product_type: str,
39
- ) -> Dict[str, Dict[str, Set[Any]]]:
40
- """
41
- gets the queryables from the constraints using the given parameters
42
- For all queryables only values matching the given parameters based on the constraints will be returned
43
- :param constraints: list of constraints fetched from the provider
44
- :param input_params: conditions the constraints should fulfil
45
- :param plugin: search or api plugin that is used
46
- :param product_type: product type for which the data should be fetched
47
- :returns: dict containing queryable data
48
- """
49
- defaults = copy.deepcopy(input_params)
50
- constraint_matches = {}
51
- params = {k: v for k, v in defaults.items() if v}
52
- for p in params.keys():
53
- defaults.pop(p, None)
54
- params_available = {k: False for k in params.keys()}
55
- # check which constraints match the given parameters
56
- eodag_provider_key_mapping = {}
57
- values_available: Dict[str, Set[Any]] = {k: set() for k in params.keys()}
58
- metadata_mapping = plugin.config.products.get(product_type, {}).get(
59
- "metadata_mapping", {}
60
- )
61
- if not metadata_mapping:
62
- metadata_mapping = plugin.config.metadata_mapping
63
- for i, constraint in enumerate(constraints):
64
- params_matched = {k: False for k in params.keys()}
65
- for param, value in params.items():
66
- provider_key = get_provider_queryable_key(
67
- param, constraint, metadata_mapping
68
- )
69
- if provider_key and provider_key in constraint:
70
- eodag_provider_key_mapping[provider_key] = param
71
- params_available[param] = True
72
- if (
73
- isinstance(value, list)
74
- and all([v in constraint[provider_key] for v in value])
75
- or not isinstance(value, list)
76
- and value in constraint[provider_key]
77
- ):
78
- params_matched[param] = True
79
- elif isinstance(value, str):
80
- # for Copernicus providers, values can be multiple and represented with a string
81
- # separated by slashes (example: time = "0000/0100/0200")
82
- values = value.split("/")
83
- params_matched[param] = all(
84
- [v in constraint[provider_key] for v in values]
85
- )
86
- values_available[param].update(constraint[provider_key])
87
- # match with default values of params
88
- for default_param, default_value in defaults.items():
89
- provider_key = get_provider_queryable_key(
90
- default_param,
91
- constraint,
92
- metadata_mapping,
93
- )
94
- if provider_key and provider_key in constraint:
95
- eodag_provider_key_mapping[provider_key] = default_param
96
- params_matched[default_param] = False
97
- if default_value in constraint[provider_key]:
98
- params_matched[default_param] = True
99
- constraint_matches[i] = params_matched
100
-
101
- # check if all parameters are available in the constraints
102
- not_available_params = set()
103
- for param, available in params_available.items():
104
- if not available:
105
- not_available_params.add(param)
106
- if not_available_params:
107
- return {"not_available": {"enum": not_available_params}}
108
-
109
- # clear constraint_matches if no combination matches
110
- matching_combinations = [
111
- False not in v.values() for v in constraint_matches.values()
112
- ]
113
- if not any(matching_combinations):
114
- constraint_matches = {}
115
-
116
- # add values of constraints matching params
117
- queryables: Dict[str, Dict[str, Set[Any]]] = {}
118
- for num, matches in constraint_matches.items():
119
- for key in constraints[num]:
120
- other_keys_matching = [v for k, v in matches.items() if k != key]
121
- key_matches_a_constraint = any(
122
- v.get(key, False) for v in constraint_matches.values()
123
- )
124
- if False in other_keys_matching or (
125
- not key_matches_a_constraint and key in matches
126
- ):
127
- continue
128
- if key in queryables:
129
- queryables[key]["enum"].update(constraints[num][key])
130
- else:
131
- queryables[key] = {}
132
- queryables[key]["enum"] = set(constraints[num][key])
133
-
134
- other_values = _get_other_possible_values_for_values_with_defaults(
135
- defaults, params, constraints, metadata_mapping
136
- )
137
- for key in queryables:
138
- if key in other_values:
139
- queryables[key]["enum"].update(other_values[key])
140
-
141
- # check if constraints matching params have been found
142
- if len(queryables) == 0:
143
- if len(params) > 1:
144
- raise ValidationError(
145
- f"combination of values {str(params)} is not possible"
146
- )
147
- elif len(params) == 1 and len(defaults) > 0:
148
- raise ValidationError(
149
- f"value {list(params.values())[0]} not available for param {list(params.keys())[0]} "
150
- f"with default values {str(defaults)}"
151
- )
152
-
153
- elif len(params) == 1:
154
- raise ValidationError(
155
- f"value {list(params.values())[0]} not available for param {list(params.keys())[0]}, "
156
- f"possible values: {str(sorted(values_available[list(params.keys())[0]]))}"
157
- )
158
- else:
159
- raise ValidationError(
160
- f"no constraints matching default params {str(defaults)} found"
161
- )
162
-
163
- return queryables
164
-
165
-
166
- def fetch_constraints(
167
- constraints_url: str, plugin: Union[Search, Api]
168
- ) -> List[Dict[Any, Any]]:
169
- """
170
- fetches the constraints from a provider
171
- :param constraints_url: url from which the constraints can be fetched
172
- :param plugin: api or search plugin of the provider
173
- :returns: list of constraints fetched from the provider
174
- """
175
- auth = (
176
- plugin.auth
177
- if hasattr(plugin, "auth") and isinstance(plugin.auth, AuthBase)
178
- else None
179
- )
180
- try:
181
- constraints_data = fetch_json(constraints_url, auth=auth)
182
- except RequestError as err:
183
- logger.error(str(err))
184
- return []
185
-
186
- config = plugin.config.__dict__
187
- if (
188
- "constraints_entry" in config
189
- and config["constraints_entry"]
190
- and config["constraints_entry"] in constraints_data
191
- ):
192
- constraints = constraints_data[config["constraints_entry"]]
193
- elif config.get("stop_without_constraints_entry_key", False):
194
- return []
195
- else:
196
- constraints = constraints_data
197
- return constraints
198
-
199
-
200
- def _get_other_possible_values_for_values_with_defaults(
201
- defaults: Dict[str, Any],
202
- params: Dict[str, Any],
203
- constraints: List[Dict[Any, Any]],
204
- metadata_mapping: Dict[str, Union[str, list]],
205
- ) -> Dict[str, Set[Any]]:
206
- possible_values = {}
207
- for param, default_value in defaults.items():
208
- fixed_params = deepcopy(params)
209
- param_values = set()
210
- for p in defaults:
211
- if p != param:
212
- fixed_params[p] = defaults[p]
213
- for constraint in constraints:
214
- provider_key = get_provider_queryable_key(
215
- param, constraint, metadata_mapping
216
- )
217
- if not provider_key:
218
- provider_key = param
219
- if (
220
- _matches_constraint(constraint, fixed_params, metadata_mapping)
221
- and provider_key in constraint
222
- ):
223
- param_values.update(constraint[provider_key])
224
- possible_values[provider_key] = param_values
225
- return possible_values
226
-
227
-
228
- def _matches_constraint(
229
- constraint: Dict[Any, Any],
230
- params: Dict[str, Any],
231
- metadata_mapping: Dict[str, Union[str, list]],
232
- ) -> bool:
233
- for p in params:
234
- provider_key = get_provider_queryable_key(p, constraint, metadata_mapping)
235
- if provider_key not in constraint:
236
- continue
237
- if isinstance(params[p], list):
238
- for value in params[p]:
239
- if value not in constraint[provider_key]:
240
- return False
241
- else:
242
- if params[p] not in constraint[provider_key]:
243
- return False
244
- return True