eodag 3.7.0__py3-none-any.whl → 3.8.1__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.
- eodag/api/core.py +111 -175
- eodag/api/product/metadata_mapping.py +23 -1
- eodag/config.py +2 -1
- eodag/plugins/authentication/sas_auth.py +15 -0
- eodag/plugins/download/s3rest.py +6 -1
- eodag/plugins/search/data_request_search.py +6 -1
- eodag/plugins/search/qssearch.py +20 -0
- eodag/resources/ext_product_types.json +1 -1
- eodag/resources/product_types.yml +0 -18
- eodag/resources/providers.yml +39 -3
- eodag/resources/stac_provider.yml +2 -2
- eodag/rest/core.py +0 -7
- eodag/rest/stac.py +0 -4
- eodag/utils/free_text_search.py +229 -0
- {eodag-3.7.0.dist-info → eodag-3.8.1.dist-info}/METADATA +2 -3
- {eodag-3.7.0.dist-info → eodag-3.8.1.dist-info}/RECORD +20 -20
- eodag/types/whoosh.py +0 -203
- {eodag-3.7.0.dist-info → eodag-3.8.1.dist-info}/WHEEL +0 -0
- {eodag-3.7.0.dist-info → eodag-3.8.1.dist-info}/entry_points.txt +0 -0
- {eodag-3.7.0.dist-info → eodag-3.8.1.dist-info}/licenses/LICENSE +0 -0
- {eodag-3.7.0.dist-info → eodag-3.8.1.dist-info}/top_level.txt +0 -0
|
@@ -575,24 +575,6 @@ S2_MSI_L2A:
|
|
|
575
575
|
title: SENTINEL2 Level-2A
|
|
576
576
|
missionStartDate: "2018-03-26T00:00:00Z"
|
|
577
577
|
|
|
578
|
-
S2_MSI_L2AP:
|
|
579
|
-
abstract: |
|
|
580
|
-
The Level-2A product provides Bottom Of Atmosphere (BOA) reflectance images derived from the associated Level-1C
|
|
581
|
-
products. Each Level-2A product is composed of 100x100 km2 tiles in cartographic geometry (UTM/WGS84 projection).
|
|
582
|
-
SAFE formatted product, see https://sentinel.esa.int/web/sentinel/user-guides/sentinel-2-msi/data-formats.
|
|
583
|
-
Level-2AP are the pilot products of Level-2A product generated by ESA until March 2018. After March, they are
|
|
584
|
-
operational products
|
|
585
|
-
instrument: MSI
|
|
586
|
-
platform: SENTINEL2
|
|
587
|
-
platformSerialIdentifier: S2A,S2B
|
|
588
|
-
processingLevel: L2
|
|
589
|
-
keywords: MSI,SENTINEL,SENTINEL2,S2,S2A,S2B,L2,L2A,SAFE, pilot
|
|
590
|
-
sensorType: OPTICAL
|
|
591
|
-
license: other
|
|
592
|
-
title: SENTINEL2 Level-2A pilot
|
|
593
|
-
missionStartDate: "2017-05-23T00:00:00Z"
|
|
594
|
-
missionEndDate: "2018-03-25T00:00:00Z"
|
|
595
|
-
|
|
596
578
|
S2_MSI_L2A_JP2:
|
|
597
579
|
abstract: |
|
|
598
580
|
The Level-2A product provides Bottom Of Atmosphere (BOA) reflectance images derived from the associated Level-1C
|
eodag/resources/providers.yml
CHANGED
|
@@ -5443,7 +5443,6 @@
|
|
|
5443
5443
|
type: StacSearch
|
|
5444
5444
|
api_endpoint: https://geodes-portal.cnes.fr/api/stac/search
|
|
5445
5445
|
need_auth: false
|
|
5446
|
-
ssl_verify: false
|
|
5447
5446
|
asset_key_from_href: false
|
|
5448
5447
|
discover_queryables:
|
|
5449
5448
|
fetch_url: null
|
|
@@ -5545,7 +5544,6 @@
|
|
|
5545
5544
|
productType: '{productType}'
|
|
5546
5545
|
download: !plugin
|
|
5547
5546
|
type: HTTPDownload
|
|
5548
|
-
ssl_verify: false
|
|
5549
5547
|
ignore_assets: true
|
|
5550
5548
|
archive_depth: 2
|
|
5551
5549
|
auth_error_code:
|
|
@@ -5570,7 +5568,6 @@
|
|
|
5570
5568
|
api_endpoint: https://geodes-portal.cnes.fr/api/stac/search
|
|
5571
5569
|
s3_endpoint: https://s3.datalake.cnes.fr
|
|
5572
5570
|
need_auth: true
|
|
5573
|
-
ssl_verify: false
|
|
5574
5571
|
asset_key_from_href: false
|
|
5575
5572
|
discover_queryables:
|
|
5576
5573
|
fetch_url: null
|
|
@@ -5931,3 +5928,42 @@
|
|
|
5931
5928
|
<<: *day_month_year
|
|
5932
5929
|
GENERIC_PRODUCT_TYPE:
|
|
5933
5930
|
dataset: '{productType}'
|
|
5931
|
+
---
|
|
5932
|
+
!provider # MARK: fedeo_ceda
|
|
5933
|
+
name: fedeo_ceda
|
|
5934
|
+
priority: 0
|
|
5935
|
+
description: CEDA datasets through FedEO Catalog
|
|
5936
|
+
roles:
|
|
5937
|
+
- host
|
|
5938
|
+
url: https://fedeo.ceos.org/
|
|
5939
|
+
search: !plugin
|
|
5940
|
+
type: StacSearch
|
|
5941
|
+
api_endpoint: 'https://fedeo.ceos.org/search'
|
|
5942
|
+
ssl_verify: true
|
|
5943
|
+
timeout: 20
|
|
5944
|
+
discover_product_types:
|
|
5945
|
+
fetch_url: 'https://fedeo.ceos.org/series/eo:organisationName/CEDA/'
|
|
5946
|
+
result_type: json
|
|
5947
|
+
results_entry: '$.links[?(@.rel=="child")]'
|
|
5948
|
+
generic_product_type_id: '{$.href#replace_str(r".*/", "")}'
|
|
5949
|
+
generic_product_type_parsable_properties:
|
|
5950
|
+
productType: '{$.href#replace_str(r".*/", "")}'
|
|
5951
|
+
title: '$.title'
|
|
5952
|
+
single_collection_fetch_url: 'https://fedeo.ceos.org/series/eo:organisationName/CEDA/{productType}'
|
|
5953
|
+
single_product_type_parsable_metadata:
|
|
5954
|
+
ID: '{$.assets.enclosure.href#ceda_collection_name}'
|
|
5955
|
+
abstract: '$.description'
|
|
5956
|
+
instrument: '{$.summaries.instruments#csv_list}'
|
|
5957
|
+
keywords: '{$.keywords#csv_list}'
|
|
5958
|
+
license: '$.license'
|
|
5959
|
+
platform: '{$.summaries.platform#csv_list}'
|
|
5960
|
+
title: '$.title'
|
|
5961
|
+
metadata_mapping:
|
|
5962
|
+
title: '{$.properties.title#remove_extension}'
|
|
5963
|
+
geometry: '$.geometry'
|
|
5964
|
+
assets: '{$.assets#dict_filter($[?(@.href =~ ".*\/thredds\/fileServer\/.*")])}'
|
|
5965
|
+
products:
|
|
5966
|
+
GENERIC_PRODUCT_TYPE:
|
|
5967
|
+
productType: '{productType}'
|
|
5968
|
+
download: !plugin
|
|
5969
|
+
type: HTTPDownload
|
|
@@ -46,7 +46,7 @@ search:
|
|
|
46
46
|
instrument: '{$.summaries.instruments#csv_list}'
|
|
47
47
|
platform: '{$.summaries.constellation#csv_list}'
|
|
48
48
|
platformSerialIdentifier: '{$.summaries.platform#csv_list}'
|
|
49
|
-
processingLevel: '$.summaries."processing:level"'
|
|
49
|
+
processingLevel: '{$.summaries."processing:level"#csv_list}'
|
|
50
50
|
keywords: '{$.keywords#csv_list}'
|
|
51
51
|
license: '$.license'
|
|
52
52
|
title: '$.title'
|
|
@@ -83,7 +83,7 @@ search:
|
|
|
83
83
|
instrument:
|
|
84
84
|
# to test
|
|
85
85
|
- '{{"query":{{"instruments":{{"eq":"{instrument}"}}}}}}'
|
|
86
|
-
- '$.properties.instruments'
|
|
86
|
+
- '{$.properties.instruments#csv_list}'
|
|
87
87
|
# INSPIRE obligated OpenSearch Parameters for Collection Search (Table 4)
|
|
88
88
|
title: '$.id'
|
|
89
89
|
abstract: '$.properties.description'
|
eodag/rest/core.py
CHANGED
|
@@ -68,7 +68,6 @@ from eodag.utils import (
|
|
|
68
68
|
deepcopy,
|
|
69
69
|
dict_items_recursive_apply,
|
|
70
70
|
format_dict_items,
|
|
71
|
-
obj_md5sum,
|
|
72
71
|
)
|
|
73
72
|
from eodag.utils.exceptions import (
|
|
74
73
|
MisconfiguredError,
|
|
@@ -752,12 +751,6 @@ def eodag_api_init() -> None:
|
|
|
752
751
|
clean = {k: v for k, v in update_fields.items() if v}
|
|
753
752
|
p_f.update(clean)
|
|
754
753
|
|
|
755
|
-
eodag_api.product_types_config_md5 = obj_md5sum(
|
|
756
|
-
eodag_api.product_types_config.source
|
|
757
|
-
)
|
|
758
|
-
|
|
759
|
-
eodag_api.build_index()
|
|
760
|
-
|
|
761
754
|
# pre-build search plugins
|
|
762
755
|
for provider in eodag_api.available_providers():
|
|
763
756
|
next(eodag_api._plugins_manager.get_search_plugins(provider=provider))
|
eodag/rest/stac.py
CHANGED
|
@@ -790,10 +790,6 @@ class StacCollection(StacCommon):
|
|
|
790
790
|
f"Product type keywords: {str(product_type_collection['keywords'])}",
|
|
791
791
|
)
|
|
792
792
|
|
|
793
|
-
# merge providers
|
|
794
|
-
if "providers" in ext_stac_collection:
|
|
795
|
-
ext_stac_collection["providers"] += product_type_collection["providers"]
|
|
796
|
-
|
|
797
793
|
product_type_collection.update(ext_stac_collection)
|
|
798
794
|
|
|
799
795
|
# parse f-strings
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Copyright 2025, CS GROUP - France, 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 re
|
|
19
|
+
from typing import Callable
|
|
20
|
+
|
|
21
|
+
from eodag.utils.exceptions import ValidationError
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _tokenize(expr: str) -> list[str]:
|
|
25
|
+
"""
|
|
26
|
+
Tokenizes a search expression into words, logical operators, and quoted phrases.
|
|
27
|
+
|
|
28
|
+
Handles:
|
|
29
|
+
- Logical operators: AND, OR, NOT
|
|
30
|
+
- Quoted phrases: "exact phrase"
|
|
31
|
+
- Wildcards: * and ? inside words
|
|
32
|
+
- Parentheses: (, )
|
|
33
|
+
|
|
34
|
+
:param expr: The search string (e.g., '("foo" OR bar) AND baz')
|
|
35
|
+
:return: A list of tokens (e.g., ['(', '"foo"', 'OR', 'BAR', ')', 'AND', 'BAZ'])
|
|
36
|
+
|
|
37
|
+
>>> _tokenize('("foo* bar?" OR baz) AND qux')
|
|
38
|
+
['(', '"foo* bar?"', 'OR', 'BAZ', ')', 'AND', 'QUX']
|
|
39
|
+
"""
|
|
40
|
+
# Match quoted phrases or unquoted tokens (including * and ?), or parentheses
|
|
41
|
+
pattern = r'"[^"]*"|AND|OR|NOT|\(|\)|[^\s()"]+'
|
|
42
|
+
raw_tokens = re.findall(pattern, expr)
|
|
43
|
+
|
|
44
|
+
tokens = []
|
|
45
|
+
for token in raw_tokens:
|
|
46
|
+
if token.startswith('"') and token.endswith('"'):
|
|
47
|
+
tokens.append(token)
|
|
48
|
+
elif token.upper() in {"AND", "OR", "NOT"}:
|
|
49
|
+
tokens.append(token.upper())
|
|
50
|
+
else:
|
|
51
|
+
tokens.append(token.upper())
|
|
52
|
+
return tokens
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _to_postfix(tokens: list[str]) -> list[str]:
|
|
56
|
+
"""
|
|
57
|
+
Converts infix tokens to postfix (Reverse Polish Notation) using the Shunting Yard algorithm.
|
|
58
|
+
|
|
59
|
+
:param tokens: List of tokens in infix order.
|
|
60
|
+
:return: List of tokens in postfix order.
|
|
61
|
+
|
|
62
|
+
:raises ValidationError: If parentheses are unbalanced.
|
|
63
|
+
|
|
64
|
+
>>> _to_postfix(['FOO', 'AND', '(', 'BAR', 'OR', 'BAZ', ')'])
|
|
65
|
+
['FOO', 'BAR', 'BAZ', 'OR', 'AND']
|
|
66
|
+
|
|
67
|
+
>>> _to_postfix(['(', 'FOO', 'AND', 'BAR'])
|
|
68
|
+
Traceback (most recent call last):
|
|
69
|
+
...
|
|
70
|
+
eodag.utils.exceptions.ValidationError: Mismatched parentheses in expression
|
|
71
|
+
"""
|
|
72
|
+
precedence = {"NOT": 3, "AND": 2, "OR": 1}
|
|
73
|
+
output: list[str] = []
|
|
74
|
+
stack: list[str] = []
|
|
75
|
+
|
|
76
|
+
for token in tokens:
|
|
77
|
+
if token in precedence:
|
|
78
|
+
while (
|
|
79
|
+
stack
|
|
80
|
+
and stack[-1] != "("
|
|
81
|
+
and precedence.get(stack[-1], 0) >= precedence[token]
|
|
82
|
+
):
|
|
83
|
+
output.append(stack.pop())
|
|
84
|
+
stack.append(token)
|
|
85
|
+
elif token == "(":
|
|
86
|
+
stack.append(token)
|
|
87
|
+
elif token == ")":
|
|
88
|
+
while stack and stack[-1] != "(":
|
|
89
|
+
output.append(stack.pop())
|
|
90
|
+
if not stack:
|
|
91
|
+
raise ValidationError("Mismatched parentheses in expression")
|
|
92
|
+
# Remove '('
|
|
93
|
+
stack.pop()
|
|
94
|
+
else:
|
|
95
|
+
output.append(token)
|
|
96
|
+
|
|
97
|
+
while stack:
|
|
98
|
+
if stack[-1] == "(":
|
|
99
|
+
raise ValidationError("Mismatched parentheses in expression")
|
|
100
|
+
output.append(stack.pop())
|
|
101
|
+
|
|
102
|
+
return output
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _make_evaluator(postfix_expr: list[str]) -> Callable[[dict[str, str]], bool]:
|
|
106
|
+
"""
|
|
107
|
+
Returns a function that evaluates a postfix expression on a dictionary of string fields.
|
|
108
|
+
|
|
109
|
+
Quoted phrases are matched exactly (case-insensitive).
|
|
110
|
+
Unquoted tokens are matched as case-insensitive full words (unless they contain wildcards).
|
|
111
|
+
|
|
112
|
+
:param postfix_expr: List of tokens in postfix order.
|
|
113
|
+
:return: A function that returns True if the dict matches.
|
|
114
|
+
|
|
115
|
+
>>> evaluator = _make_evaluator(['FOO', 'BAR', 'OR'])
|
|
116
|
+
>>> evaluator({'title': 'some foo text'})
|
|
117
|
+
True
|
|
118
|
+
>>> evaluator({'title': 'some bar text'})
|
|
119
|
+
True
|
|
120
|
+
>>> evaluator({'title': 'nothing'})
|
|
121
|
+
False
|
|
122
|
+
>>> evaluator2 = _make_evaluator(['"foo text"', 'NOT'])
|
|
123
|
+
>>> evaluator2({'title': 'some foo text'})
|
|
124
|
+
False
|
|
125
|
+
>>> evaluator2({'title': 'some bar'})
|
|
126
|
+
True
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
def evaluate(entry: dict[str, str]) -> bool:
|
|
130
|
+
stack: list[bool] = []
|
|
131
|
+
text = " ".join(str(v) for v in entry.values()).lower()
|
|
132
|
+
|
|
133
|
+
for token in postfix_expr:
|
|
134
|
+
if token == "AND":
|
|
135
|
+
b, a = stack.pop(), stack.pop()
|
|
136
|
+
stack.append(a and b)
|
|
137
|
+
elif token == "OR":
|
|
138
|
+
b, a = stack.pop(), stack.pop()
|
|
139
|
+
stack.append(a or b)
|
|
140
|
+
elif token == "NOT":
|
|
141
|
+
a = stack.pop()
|
|
142
|
+
stack.append(not a)
|
|
143
|
+
else:
|
|
144
|
+
if token.startswith('"') and token.endswith('"'):
|
|
145
|
+
phrase = token[1:-1].lower()
|
|
146
|
+
stack.append(phrase in text)
|
|
147
|
+
else:
|
|
148
|
+
# Wildcard tokens → regex with .* and .
|
|
149
|
+
if "*" in token or "?" in token:
|
|
150
|
+
wildcard_pattern = (
|
|
151
|
+
re.escape(token.lower())
|
|
152
|
+
.replace(r"\*", ".*")
|
|
153
|
+
.replace(r"\?", ".")
|
|
154
|
+
)
|
|
155
|
+
regex = re.compile(wildcard_pattern, flags=re.IGNORECASE)
|
|
156
|
+
else:
|
|
157
|
+
# Plain token → must match as a whole word
|
|
158
|
+
regex = re.compile(
|
|
159
|
+
rf"\b{re.escape(token.lower())}\b", flags=re.IGNORECASE
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
stack.append(bool(regex.search(text)))
|
|
163
|
+
|
|
164
|
+
return stack[0]
|
|
165
|
+
|
|
166
|
+
return evaluate
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def compile_free_text_query(query: str) -> Callable[[dict[str, str]], bool]:
|
|
170
|
+
"""
|
|
171
|
+
Compiles a free-text logical search query into a dictionary evaluator function.
|
|
172
|
+
|
|
173
|
+
The evaluator checks whether the concatenated string values of a dictionary
|
|
174
|
+
(case-insensitive) satisfy the given logical expression.
|
|
175
|
+
|
|
176
|
+
Processing steps:
|
|
177
|
+
1. Tokenize the query into words, quoted phrases, wildcards, and operators.
|
|
178
|
+
2. Convert infix tokens into postfix notation using the Shunting Yard algorithm.
|
|
179
|
+
3. Build an evaluator function that applies the expression to dictionary fields.
|
|
180
|
+
|
|
181
|
+
Supported features:
|
|
182
|
+
- Logical operators: ``AND``, ``OR``, ``NOT``
|
|
183
|
+
- Grouping with parentheses: ``(``, ``)``
|
|
184
|
+
- Exact phrases in quotes: ``"foo bar"`` (case-insensitive substring match)
|
|
185
|
+
- Wildcards inside tokens:
|
|
186
|
+
- ``*`` → matches zero or more characters
|
|
187
|
+
- ``?`` → matches exactly one character
|
|
188
|
+
- Plain tokens without wildcards → matched as whole words (word boundary aware)
|
|
189
|
+
- Case-insensitive matching across all tokens and phrases
|
|
190
|
+
|
|
191
|
+
:param query: A logical search expression
|
|
192
|
+
(e.g., ``'("foo bar" OR baz*) AND NOT qux'``).
|
|
193
|
+
:return: A function that takes a ``dict[str, str]`` and returns ``True`` if it matches.
|
|
194
|
+
|
|
195
|
+
:Example:
|
|
196
|
+
|
|
197
|
+
>>> evaluator = compile_free_text_query('("FooAndBar" OR BAR) AND "FOOBAR collection"')
|
|
198
|
+
>>> evaluator({
|
|
199
|
+
... "title": "titleFOOBAR - Lorem FOOBAR collection",
|
|
200
|
+
... "abstract": "abstract FOOBAR - This is FOOBAR. FooAndBar"
|
|
201
|
+
... })
|
|
202
|
+
True
|
|
203
|
+
>>> evaluator({
|
|
204
|
+
... "title": "collection FOOBAR",
|
|
205
|
+
... "abstract": "abstract FOOBAR - This is FOOBAR. FooAndBar"
|
|
206
|
+
... })
|
|
207
|
+
False
|
|
208
|
+
>>> evaluator({
|
|
209
|
+
... "title": "titleFOOBAR - Lorem FOOBAR ",
|
|
210
|
+
... "abstract": "abstract FOOBAR - This is FOOBAR."
|
|
211
|
+
... })
|
|
212
|
+
False
|
|
213
|
+
>>> evaluator({"title": "Only Bar here"})
|
|
214
|
+
False
|
|
215
|
+
|
|
216
|
+
Wildcard example:
|
|
217
|
+
|
|
218
|
+
>>> evaluator = compile_free_text_query('foo*')
|
|
219
|
+
>>> evaluator({"title": "this is foobar"})
|
|
220
|
+
True
|
|
221
|
+
>>> evaluator({"title": "something with fooo"})
|
|
222
|
+
True
|
|
223
|
+
>>> evaluator({"title": "bar only"})
|
|
224
|
+
False
|
|
225
|
+
"""
|
|
226
|
+
|
|
227
|
+
tokens = _tokenize(query)
|
|
228
|
+
postfix = _to_postfix(tokens)
|
|
229
|
+
return _make_evaluator(postfix)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: eodag
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.8.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
|
|
@@ -54,7 +54,6 @@ Requires-Dist: stream-zip
|
|
|
54
54
|
Requires-Dist: tqdm
|
|
55
55
|
Requires-Dist: typing_extensions>=4.8.0
|
|
56
56
|
Requires-Dist: urllib3
|
|
57
|
-
Requires-Dist: Whoosh
|
|
58
57
|
Provides-Extra: all
|
|
59
58
|
Requires-Dist: eodag[all-providers,csw,server,tutorials]; extra == "all"
|
|
60
59
|
Provides-Extra: all-providers
|
|
@@ -317,7 +316,7 @@ An eodag instance can be exposed through a STAC compliant REST api from the comm
|
|
|
317
316
|
|
|
318
317
|
.. code-block:: bash
|
|
319
318
|
|
|
320
|
-
docker run -p 5000:5000 --rm csspace/eodag-server:3.
|
|
319
|
+
docker run -p 5000:5000 --rm csspace/eodag-server:3.8.1
|
|
321
320
|
|
|
322
321
|
You can also browse over your STAC API server using `STAC Browser <https://github.com/radiantearth/stac-browser>`_.
|
|
323
322
|
Simply run:
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
eodag/__init__.py,sha256=qADIO6H3KR0CMs0qePdJROjSzcGnHaYpv-RFIk18WGQ,1608
|
|
2
2
|
eodag/cli.py,sha256=XCa5Q1rt5ZCq4QNm8SGknNyadYlS9TIEZRukMvcEgH4,30326
|
|
3
|
-
eodag/config.py,sha256=
|
|
3
|
+
eodag/config.py,sha256=Y_2WBjeLZz7aHMBouCDKWNtsqCWAUstVjOylbNNl4f0,48438
|
|
4
4
|
eodag/crunch.py,sha256=fLVAPGVPw31N_DrnFk4gkCpQZLMY8oBhK6NUSYmdr24,1099
|
|
5
5
|
eodag/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
6
|
eodag/api/__init__.py,sha256=ytr30NUVmEtmJTsp3QCwkCIhS1nF6UlFCv0vmySHN7g,735
|
|
7
|
-
eodag/api/core.py,sha256=
|
|
7
|
+
eodag/api/core.py,sha256=tidXxfT40JLrXtSPlqKTYcUIETTHNlXU_ymznxF9Zm4,109125
|
|
8
8
|
eodag/api/search_result.py,sha256=2Y2W3xDUyainwcyYBQljGRi6oyOqTTspgCgIlNG4kCc,14383
|
|
9
9
|
eodag/api/product/__init__.py,sha256=k5iNHxXX6wDLsUo725W4U_Jz8CVbZTbfE8R9s1YQwKA,2508
|
|
10
10
|
eodag/api/product/_assets.py,sha256=9bWIe_SYvsQO-q_lQFd7SxhUIWv7feze2-wnXOe8hhs,7570
|
|
11
11
|
eodag/api/product/_product.py,sha256=UXCaWUtkAGWVCfF68zWCYDoEUUfxAdC0RGaNLZ3vUQ8,26794
|
|
12
|
-
eodag/api/product/metadata_mapping.py,sha256=
|
|
12
|
+
eodag/api/product/metadata_mapping.py,sha256=p8RxWEiZfyMJlxHCGkOmrCJ-2zcD1f8eY8PlurgEgD0,75172
|
|
13
13
|
eodag/api/product/drivers/__init__.py,sha256=Sy9bGmDhWCAxvxRUf3QGijjQoQvzS1LSUMN34Usq6fM,3357
|
|
14
14
|
eodag/api/product/drivers/base.py,sha256=iPAE5Jx3isxmHHFPP-jysdUylYbsbIq6UejU3qsMROE,4111
|
|
15
15
|
eodag/api/product/drivers/generic.py,sha256=RER088E5_mqyGw1Pa4Kxea5YMFakAHFNcZEQINRiDwM,2069
|
|
@@ -31,7 +31,7 @@ eodag/plugins/authentication/keycloak.py,sha256=m5c6Os_T8UGfdXS9SemhuUBhwsC4foxm
|
|
|
31
31
|
eodag/plugins/authentication/oauth.py,sha256=fCMx7OxS3JNO9lLZhQNnL9lsBB9nFwZJLEYXI49QRtw,1952
|
|
32
32
|
eodag/plugins/authentication/openid_connect.py,sha256=lj-9RPz2BADU-1ckawLmuSi3TSexABsDDPCHLp8Frsc,27084
|
|
33
33
|
eodag/plugins/authentication/qsauth.py,sha256=bkepO_sFRIhYm3Dzecx3VJP0Ap37vUuJSRmEY8HrV1U,3947
|
|
34
|
-
eodag/plugins/authentication/sas_auth.py,sha256=
|
|
34
|
+
eodag/plugins/authentication/sas_auth.py,sha256=IKsaQMk5rfevMKJMoPVQ1cwzkBV89T54cbzOA34oNa8,5294
|
|
35
35
|
eodag/plugins/authentication/token.py,sha256=f2SossIJ_XlnBuOw_OprLNrF1p-uolL_KEX71_BhzKw,15798
|
|
36
36
|
eodag/plugins/authentication/token_exchange.py,sha256=raFIN8UnO9MpqQukDJg4Pog-LJLzq8Bk54_6k9cCwFc,4963
|
|
37
37
|
eodag/plugins/crunch/__init__.py,sha256=58D7kJhEpHJWobIKaNFPynfbSqAWgS90BiHzitqS5Ds,746
|
|
@@ -46,24 +46,24 @@ eodag/plugins/download/aws.py,sha256=9TdWseGib-sLWivfI0w4l-9O-ZlppgMsbzLSuirYzXE
|
|
|
46
46
|
eodag/plugins/download/base.py,sha256=hllNFdDMWnTq0zjiTQPr-p4iX_OksCJ6PAt0a35qX1A,30813
|
|
47
47
|
eodag/plugins/download/creodias_s3.py,sha256=9YrBwb7FiLnREVcaJB5ktlrDeIHPRAC-tH1qDjkwCMs,4350
|
|
48
48
|
eodag/plugins/download/http.py,sha256=CBr7x0KLsQb3X6QqZ7FZvQEm0z-MN9BfKVWyZKudRSE,58354
|
|
49
|
-
eodag/plugins/download/s3rest.py,sha256=
|
|
49
|
+
eodag/plugins/download/s3rest.py,sha256=RoMFpy7HPXFwK_gpy8tkZG1coNITvRj2D9hAmdrAnv0,15147
|
|
50
50
|
eodag/plugins/search/__init__.py,sha256=bBrl3TffoU1wVpaeXmTEIailoh9W6fla4IP-8SWqA9U,2019
|
|
51
51
|
eodag/plugins/search/base.py,sha256=tqn1JB2JV4Z_yRXFHUiAfMGjcJqr90_QYyevV0DoGLE,20017
|
|
52
52
|
eodag/plugins/search/build_search_result.py,sha256=9a2HZijHvQWplyJav1vr_dDgoOPQeI1MIttSf3rBYBA,57652
|
|
53
53
|
eodag/plugins/search/cop_marine.py,sha256=-GrFQjVZb7SfS6BbI0wnGc2VuRcQu7aqtWg3EWjQhE0,20485
|
|
54
54
|
eodag/plugins/search/creodias_s3.py,sha256=rBZf3Uza7z3VuBdoUJQ9kuufGgACKVsEvK3phUo7C7M,3379
|
|
55
55
|
eodag/plugins/search/csw.py,sha256=de8CNjz4bjEny27V0RXC7V8LRz0Ik3yqQVjTAc_JlyA,12548
|
|
56
|
-
eodag/plugins/search/data_request_search.py,sha256=
|
|
57
|
-
eodag/plugins/search/qssearch.py,sha256=
|
|
56
|
+
eodag/plugins/search/data_request_search.py,sha256=m38kpTXJT2fC8Mk894KlxKb14dz-nhAs_71-5kpnehU,27461
|
|
57
|
+
eodag/plugins/search/qssearch.py,sha256=qAqpgeUGytxRi6s1oVnw3fw7EsyNOtW_nFxF1Tb1g0M,94795
|
|
58
58
|
eodag/plugins/search/stac_list_assets.py,sha256=OOCMyjD8XD-m39k0SyKMrRi4K8Ii5mOQsA6zSAeQDGI,3435
|
|
59
59
|
eodag/plugins/search/static_stac_search.py,sha256=CPynjpNw0gXa6g6hA2zSkbwhfgU-9IBCmJtknuhnFKk,10515
|
|
60
|
-
eodag/resources/ext_product_types.json,sha256=
|
|
60
|
+
eodag/resources/ext_product_types.json,sha256=2WGKVm0TbixQ1WZS54IqJzzTEVyj-cNNMToUp-LUhZg,2474095
|
|
61
61
|
eodag/resources/locations_conf_template.yml,sha256=_eBv-QKHYMIKhY0b0kp4Ee33RsayxN8LWH3kDXxfFSk,986
|
|
62
|
-
eodag/resources/product_types.yml,sha256=
|
|
63
|
-
eodag/resources/providers.yml,sha256=
|
|
62
|
+
eodag/resources/product_types.yml,sha256=GWtWBa0MvoWfD1ZuBR3IQYt6GcZvCTvGwqVFxoE0U2k,412710
|
|
63
|
+
eodag/resources/providers.yml,sha256=Ue0M7gEmOQQGFU3bqlU7LmfPegR_lj1cLr9Ok0zTGaI,212939
|
|
64
64
|
eodag/resources/stac.yml,sha256=QnrBulL2pHZrPH4pI7rQtKDxmgP2ZbBcufFqFJPCL7A,10473
|
|
65
65
|
eodag/resources/stac_api.yml,sha256=2FdQL_qBTIUlu6KH836T4CXBKO9AvVxA_Ub3J1RP81A,68881
|
|
66
|
-
eodag/resources/stac_provider.yml,sha256=
|
|
66
|
+
eodag/resources/stac_provider.yml,sha256=AsQny2BhC0aZN31yCQ_3b-TvbD5tLlfddQRkfKODCqE,6725
|
|
67
67
|
eodag/resources/user_conf_template.yml,sha256=rjgc-gp4Ufw9dLV-D9lQFBm-YLApZtGTybq3cHT48as,7508
|
|
68
68
|
eodag/resources/shp/ne_110m_admin_0_map_units.VERSION.txt,sha256=CHSo_jbv-4d4D0MYRbWn2FvmV_K9mYzo7qznF4YNO3g,7
|
|
69
69
|
eodag/resources/shp/ne_110m_admin_0_map_units.cpg,sha256=FG1nif_gM6UpfBrQRuamLuNTGbhrAhRE8FtuoqqKH0o,6
|
|
@@ -75,11 +75,11 @@ eodag/rest/__init__.py,sha256=v4SI9gLuFP81YXi5_k98lvVNGzz6h8YZ_aUdhKAbE2M,916
|
|
|
75
75
|
eodag/rest/cache.py,sha256=dSgpw6uWDq45qxfD25LXkB-9Qk0OEb5L8UOl7yuMPEU,2097
|
|
76
76
|
eodag/rest/config.py,sha256=qWXukdSB6cSpkZszkPSGPGn5oiVfKEC3rPGp0q-2c4E,2112
|
|
77
77
|
eodag/rest/constants.py,sha256=XsNgjzv0Qvw1hhjeuscDuyQpCm99g3O-hEyslPSiFzQ,945
|
|
78
|
-
eodag/rest/core.py,sha256=
|
|
78
|
+
eodag/rest/core.py,sha256=rZD6AFxCORvnNFeYSR8eab3UuVymEnDQJBouVGKNUA4,26432
|
|
79
79
|
eodag/rest/errors.py,sha256=ShYTl_cQej3H20jRtX_HLNKpnB6J4mbl0uhJTifzDj0,6736
|
|
80
80
|
eodag/rest/server.py,sha256=yssir9bumRwoEibgTTKOgXBli3uwTJkhbVW7Q7F2Uqc,18253
|
|
81
81
|
eodag/rest/server.wsgi,sha256=ssM4JQi8tZpOYj03CTdM0weyUF1b3Lbh38pdD-vBfXs,152
|
|
82
|
-
eodag/rest/stac.py,sha256=
|
|
82
|
+
eodag/rest/stac.py,sha256=aBAoJ0hneBPej-n4e7TXlPBix7cm2IaDnVCY0dDL548,36496
|
|
83
83
|
eodag/rest/templates/README,sha256=qFgCBE6XC4YiXkpPoSHkYbMTQr8Zg5Wc5eAKVcooXmw,57
|
|
84
84
|
eodag/rest/types/__init__.py,sha256=Bu0C3dzXHe8kocnz2PIHV0GjQWlAQas6ToIfwusNPQs,742
|
|
85
85
|
eodag/rest/types/collections_search.py,sha256=TRZI72a1W29a2e_mg9cQpFUcTTEG3_SSsfYrZZuXMLA,1527
|
|
@@ -94,11 +94,11 @@ eodag/types/bbox.py,sha256=jbfX58KOKIl0OoGZc93kAYhG_mEOjuBQGJtR2hl3-_Y,4354
|
|
|
94
94
|
eodag/types/download_args.py,sha256=urSl5KbLRN1XetMa2XzxYltny8CCFmHpjxU3j3BEGO8,1565
|
|
95
95
|
eodag/types/queryables.py,sha256=1Bb-n05YKSUq-rsVm-_2HoYaCBWp4SFHI4uWngpRmiw,10551
|
|
96
96
|
eodag/types/search_args.py,sha256=EtG8nXnApBnYrFo5FVvsvvEqRlqTxJ0lrmIem9Wtg8c,5649
|
|
97
|
-
eodag/types/whoosh.py,sha256=VXpWAZaXLR_RRnI9gh5iwkqn1n63krVGj2SX0rB2mQo,7225
|
|
98
97
|
eodag/utils/__init__.py,sha256=xpFPjYZdMBhaWV4M5wTBv7_FY16K1mge-8V2soiTZ5U,54187
|
|
99
98
|
eodag/utils/cache.py,sha256=UNvnzhJnNBuKLdH_0KnhuTMlBvz4GS3nr2IH2Lj6Swc,2580
|
|
100
99
|
eodag/utils/env.py,sha256=_sgCzDmaJnMnCv1qk9xe9jBhBKqqXbEYmsyGYwYw4NI,1085
|
|
101
100
|
eodag/utils/exceptions.py,sha256=64M6xNsWWThEspIrZvxPYCS47wBH4PL7YXXw8fcPCbo,4588
|
|
101
|
+
eodag/utils/free_text_search.py,sha256=et6nn5qmzbUq0T9tup6M2kMCwn2CvQgwVq6M6XOKEpg,8057
|
|
102
102
|
eodag/utils/import_system.py,sha256=1vwcSRlsZwuaP8ssrpRBP5jldZ54eLv2ttNCdLf0TtA,3901
|
|
103
103
|
eodag/utils/logging.py,sha256=KoMsyS1f6O1hr_SMDOIxvt842mOJgmu_yLUk0-0EKFs,3507
|
|
104
104
|
eodag/utils/notebook.py,sha256=AUxtayvu26qYf3x3Eu3ujRl1XDgy24EfQaETbqmXSZw,2703
|
|
@@ -107,9 +107,9 @@ eodag/utils/requests.py,sha256=avNHKrOZ7Kp6lUA7u4kqupIth9MoirLzDsMrrmQDt4s,4560
|
|
|
107
107
|
eodag/utils/rest.py,sha256=a9tlG_Y9iQXLeyeLyecxFNbopGHV-8URecMSRs0UXu0,3348
|
|
108
108
|
eodag/utils/s3.py,sha256=hHlliahIJjQQP8VnRAhbw17_FFa4E6gFo52HchgarVU,29553
|
|
109
109
|
eodag/utils/stac_reader.py,sha256=8r6amio5EtwGF9iu9zHaGDz4oUPKKeXRuyTzPNakrO4,9406
|
|
110
|
-
eodag-3.
|
|
111
|
-
eodag-3.
|
|
112
|
-
eodag-3.
|
|
113
|
-
eodag-3.
|
|
114
|
-
eodag-3.
|
|
115
|
-
eodag-3.
|
|
110
|
+
eodag-3.8.1.dist-info/licenses/LICENSE,sha256=4MAecetnRTQw5DlHtiikDSzKWO1xVLwzM5_DsPMYlnE,10172
|
|
111
|
+
eodag-3.8.1.dist-info/METADATA,sha256=laQ1HziMFtCDTTx2CRnKgmc2snpQeYAVFjtFQWNtRVU,15472
|
|
112
|
+
eodag-3.8.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
113
|
+
eodag-3.8.1.dist-info/entry_points.txt,sha256=krdrBOQso6kAcSekV9ItEYAkE8syTC4Ev75bI781VgE,2561
|
|
114
|
+
eodag-3.8.1.dist-info/top_level.txt,sha256=025IMTmVe5eDjIPP4KEFQKespOPMQdne4U4jOy8nftM,6
|
|
115
|
+
eodag-3.8.1.dist-info/RECORD,,
|