eodag 3.0.0b3__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.
- eodag/api/core.py +347 -247
- eodag/api/product/_assets.py +44 -15
- eodag/api/product/_product.py +58 -47
- eodag/api/product/drivers/__init__.py +81 -4
- eodag/api/product/drivers/base.py +65 -4
- eodag/api/product/drivers/generic.py +65 -0
- eodag/api/product/drivers/sentinel1.py +97 -0
- eodag/api/product/drivers/sentinel2.py +95 -0
- eodag/api/product/metadata_mapping.py +129 -93
- eodag/api/search_result.py +28 -12
- eodag/cli.py +61 -24
- eodag/config.py +457 -167
- eodag/plugins/apis/base.py +10 -4
- eodag/plugins/apis/ecmwf.py +53 -23
- eodag/plugins/apis/usgs.py +41 -17
- eodag/plugins/authentication/aws_auth.py +30 -18
- eodag/plugins/authentication/base.py +14 -3
- eodag/plugins/authentication/generic.py +14 -3
- eodag/plugins/authentication/header.py +14 -6
- eodag/plugins/authentication/keycloak.py +44 -25
- eodag/plugins/authentication/oauth.py +18 -4
- eodag/plugins/authentication/openid_connect.py +192 -171
- eodag/plugins/authentication/qsauth.py +12 -4
- eodag/plugins/authentication/sas_auth.py +22 -5
- eodag/plugins/authentication/token.py +95 -17
- eodag/plugins/authentication/token_exchange.py +19 -19
- eodag/plugins/base.py +4 -4
- eodag/plugins/crunch/base.py +8 -5
- eodag/plugins/crunch/filter_date.py +9 -6
- eodag/plugins/crunch/filter_latest_intersect.py +9 -8
- eodag/plugins/crunch/filter_latest_tpl_name.py +8 -8
- eodag/plugins/crunch/filter_overlap.py +9 -11
- eodag/plugins/crunch/filter_property.py +10 -10
- eodag/plugins/download/aws.py +181 -105
- eodag/plugins/download/base.py +49 -67
- eodag/plugins/download/creodias_s3.py +40 -2
- eodag/plugins/download/http.py +247 -223
- eodag/plugins/download/s3rest.py +29 -28
- eodag/plugins/manager.py +176 -41
- eodag/plugins/search/__init__.py +6 -5
- eodag/plugins/search/base.py +123 -60
- eodag/plugins/search/build_search_result.py +1046 -355
- eodag/plugins/search/cop_marine.py +132 -39
- eodag/plugins/search/creodias_s3.py +19 -68
- eodag/plugins/search/csw.py +48 -8
- eodag/plugins/search/data_request_search.py +124 -23
- eodag/plugins/search/qssearch.py +531 -310
- eodag/plugins/search/stac_list_assets.py +85 -0
- eodag/plugins/search/static_stac_search.py +23 -24
- eodag/resources/ext_product_types.json +1 -1
- eodag/resources/product_types.yml +1295 -355
- eodag/resources/providers.yml +1819 -3010
- eodag/resources/stac.yml +3 -163
- eodag/resources/stac_api.yml +2 -2
- eodag/resources/user_conf_template.yml +115 -99
- eodag/rest/cache.py +2 -2
- eodag/rest/config.py +3 -4
- eodag/rest/constants.py +0 -1
- eodag/rest/core.py +157 -117
- eodag/rest/errors.py +181 -0
- eodag/rest/server.py +57 -339
- eodag/rest/stac.py +133 -581
- eodag/rest/types/collections_search.py +3 -3
- eodag/rest/types/eodag_search.py +41 -30
- eodag/rest/types/queryables.py +42 -32
- eodag/rest/types/stac_search.py +15 -16
- eodag/rest/utils/__init__.py +14 -21
- eodag/rest/utils/cql_evaluate.py +6 -6
- eodag/rest/utils/rfc3339.py +2 -2
- eodag/types/__init__.py +153 -32
- eodag/types/bbox.py +2 -2
- eodag/types/download_args.py +4 -4
- eodag/types/queryables.py +183 -73
- eodag/types/search_args.py +6 -6
- eodag/types/whoosh.py +127 -3
- eodag/utils/__init__.py +228 -106
- eodag/utils/exceptions.py +47 -26
- eodag/utils/import_system.py +2 -2
- eodag/utils/logging.py +37 -77
- eodag/utils/repr.py +65 -6
- eodag/utils/requests.py +13 -15
- eodag/utils/rest.py +2 -2
- eodag/utils/s3.py +231 -0
- eodag/utils/stac_reader.py +11 -11
- {eodag-3.0.0b3.dist-info → eodag-3.1.0.dist-info}/METADATA +81 -81
- eodag-3.1.0.dist-info/RECORD +113 -0
- {eodag-3.0.0b3.dist-info → eodag-3.1.0.dist-info}/WHEEL +1 -1
- {eodag-3.0.0b3.dist-info → eodag-3.1.0.dist-info}/entry_points.txt +5 -2
- eodag/resources/constraints/climate-dt.json +0 -13
- eodag/resources/constraints/extremes-dt.json +0 -8
- eodag/utils/constraints.py +0 -244
- eodag-3.0.0b3.dist-info/RECORD +0 -110
- {eodag-3.0.0b3.dist-info → eodag-3.1.0.dist-info}/LICENSE +0 -0
- {eodag-3.0.0b3.dist-info → eodag-3.1.0.dist-info}/top_level.txt +0 -0
eodag/utils/s3.py
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Copyright 2024, 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
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import io
|
|
21
|
+
import logging
|
|
22
|
+
import os
|
|
23
|
+
import zipfile
|
|
24
|
+
from typing import TYPE_CHECKING, List, Optional
|
|
25
|
+
from urllib.parse import urlparse
|
|
26
|
+
|
|
27
|
+
import boto3
|
|
28
|
+
import botocore
|
|
29
|
+
|
|
30
|
+
from eodag.plugins.authentication.aws_auth import AwsAuth
|
|
31
|
+
from eodag.utils import get_bucket_name_and_prefix, guess_file_type
|
|
32
|
+
from eodag.utils.exceptions import (
|
|
33
|
+
AuthenticationError,
|
|
34
|
+
MisconfiguredError,
|
|
35
|
+
NotAvailableError,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
if TYPE_CHECKING:
|
|
39
|
+
from zipfile import ZipFile, ZipInfo
|
|
40
|
+
|
|
41
|
+
from mypy_boto3_s3.client import S3Client
|
|
42
|
+
|
|
43
|
+
from eodag.api.product import EOProduct # type: ignore
|
|
44
|
+
|
|
45
|
+
logger = logging.getLogger("eodag.utils.s3")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def fetch(
|
|
49
|
+
bucket_name: str, key_name: str, start: int, len: int, client_s3: S3Client
|
|
50
|
+
) -> bytes:
|
|
51
|
+
"""
|
|
52
|
+
Range-fetches a S3 key.
|
|
53
|
+
|
|
54
|
+
:param bucket_name: Bucket name of the object to fetch
|
|
55
|
+
:param key_name: Key name of the object to fetch
|
|
56
|
+
:param start: Bucket name to fetch
|
|
57
|
+
:param len: Bucket name to fetch
|
|
58
|
+
:param client_s3: s3 client used to fetch the object
|
|
59
|
+
:returns: Object bytes
|
|
60
|
+
"""
|
|
61
|
+
end = start + len - 1
|
|
62
|
+
s3_object = client_s3.get_object(
|
|
63
|
+
Bucket=bucket_name, Key=key_name, Range="bytes=%d-%d" % (start, end)
|
|
64
|
+
)
|
|
65
|
+
return s3_object["Body"].read()
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def parse_int(bytes: bytes) -> int:
|
|
69
|
+
"""
|
|
70
|
+
Parses 2 or 4 little-endian bits into their corresponding integer value.
|
|
71
|
+
|
|
72
|
+
:param bytes: bytes to parse
|
|
73
|
+
:returns: parsed int
|
|
74
|
+
"""
|
|
75
|
+
val = (bytes[0]) + ((bytes[1]) << 8)
|
|
76
|
+
if len(bytes) > 3:
|
|
77
|
+
val += ((bytes[2]) << 16) + ((bytes[3]) << 24)
|
|
78
|
+
return val
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def open_s3_zipped_object(
|
|
82
|
+
bucket_name: str, key_name: str, client_s3: S3Client, partial: bool = True
|
|
83
|
+
) -> ZipFile:
|
|
84
|
+
"""
|
|
85
|
+
Open s3 zipped object, without downloading it.
|
|
86
|
+
|
|
87
|
+
See https://stackoverflow.com/questions/41789176/how-to-count-files-inside-zip-in-aws-s3-without-downloading-it;
|
|
88
|
+
Based on https://stackoverflow.com/questions/51351000/read-zip-files-from-s3-without-downloading-the-entire-file
|
|
89
|
+
|
|
90
|
+
:param bucket_name: Bucket name of the object to fetch
|
|
91
|
+
:param key_name: Key name of the object to fetch
|
|
92
|
+
:param client_s3: s3 client used to fetch the object
|
|
93
|
+
:param partial: fetch partial data if only content info is needed
|
|
94
|
+
:returns: List of files in zip
|
|
95
|
+
"""
|
|
96
|
+
response = client_s3.head_object(Bucket=bucket_name, Key=key_name)
|
|
97
|
+
size = response["ContentLength"]
|
|
98
|
+
|
|
99
|
+
# End Of Central Directory bytes
|
|
100
|
+
eocd = fetch(bucket_name, key_name, size - 22, 22, client_s3)
|
|
101
|
+
|
|
102
|
+
# start offset and size of the central directory
|
|
103
|
+
cd_start = parse_int(eocd[16:20])
|
|
104
|
+
cd_size = parse_int(eocd[12:16])
|
|
105
|
+
|
|
106
|
+
# fetch central directory, append EOCD, and open as zipfile
|
|
107
|
+
cd = fetch(bucket_name, key_name, cd_start, cd_size, client_s3)
|
|
108
|
+
|
|
109
|
+
zip_data = (
|
|
110
|
+
cd + eocd if partial else fetch(bucket_name, key_name, 0, size, client_s3)
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
zip = zipfile.ZipFile(io.BytesIO(zip_data))
|
|
114
|
+
|
|
115
|
+
return zip
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def list_files_in_s3_zipped_object(
|
|
119
|
+
bucket_name: str, key_name: str, client_s3: S3Client
|
|
120
|
+
) -> List[ZipInfo]:
|
|
121
|
+
"""
|
|
122
|
+
List files in s3 zipped object, without downloading it.
|
|
123
|
+
|
|
124
|
+
See https://stackoverflow.com/questions/41789176/how-to-count-files-inside-zip-in-aws-s3-without-downloading-it;
|
|
125
|
+
Based on https://stackoverflow.com/questions/51351000/read-zip-files-from-s3-without-downloading-the-entire-file
|
|
126
|
+
|
|
127
|
+
:param bucket_name: Bucket name of the object to fetch
|
|
128
|
+
:param key_name: Key name of the object to fetch
|
|
129
|
+
:param client_s3: s3 client used to fetch the object
|
|
130
|
+
:returns: List of files in zip
|
|
131
|
+
"""
|
|
132
|
+
with open_s3_zipped_object(bucket_name, key_name, client_s3) as zip_file:
|
|
133
|
+
logger.debug("Found %s files in %s" % (len(zip_file.filelist), key_name))
|
|
134
|
+
return zip_file.filelist
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def update_assets_from_s3(
|
|
138
|
+
product: EOProduct,
|
|
139
|
+
auth: AwsAuth,
|
|
140
|
+
s3_endpoint: Optional[str] = None,
|
|
141
|
+
content_url: Optional[str] = None,
|
|
142
|
+
) -> None:
|
|
143
|
+
"""Update ``EOProduct.assets`` using content listed in its ``remote_location`` or given
|
|
144
|
+
``content_url``.
|
|
145
|
+
|
|
146
|
+
If url points to a zipped archive, its content will also be be listed.
|
|
147
|
+
|
|
148
|
+
:param product: product to update
|
|
149
|
+
:param auth: Authentication plugin
|
|
150
|
+
:param s3_endpoint: s3 endpoint if not hosted on AWS
|
|
151
|
+
:param content_url: s3 URL pointing to the content that must be listed (defaults to
|
|
152
|
+
``product.remote_location`` if empty)
|
|
153
|
+
"""
|
|
154
|
+
required_creds = ["aws_access_key_id", "aws_secret_access_key"]
|
|
155
|
+
|
|
156
|
+
if content_url is None:
|
|
157
|
+
content_url = product.remote_location
|
|
158
|
+
|
|
159
|
+
bucket, prefix = get_bucket_name_and_prefix(content_url)
|
|
160
|
+
|
|
161
|
+
if bucket is None or prefix is None:
|
|
162
|
+
logger.debug(f"No s3 prefix could guessed from {content_url}")
|
|
163
|
+
return None
|
|
164
|
+
|
|
165
|
+
try:
|
|
166
|
+
auth_dict = auth.authenticate()
|
|
167
|
+
|
|
168
|
+
if not all(x in auth_dict for x in required_creds):
|
|
169
|
+
raise MisconfiguredError(
|
|
170
|
+
f"Incomplete credentials for {product.provider}, missing "
|
|
171
|
+
f"{[x for x in required_creds if x not in auth_dict]}"
|
|
172
|
+
)
|
|
173
|
+
if not getattr(auth, "s3_client", None):
|
|
174
|
+
auth.s3_client = boto3.client(
|
|
175
|
+
service_name="s3",
|
|
176
|
+
endpoint_url=s3_endpoint,
|
|
177
|
+
aws_access_key_id=auth_dict.get("aws_access_key_id"),
|
|
178
|
+
aws_secret_access_key=auth_dict.get("aws_secret_access_key"),
|
|
179
|
+
aws_session_token=auth_dict.get("aws_session_token"),
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
logger.debug("Listing assets in %s", prefix)
|
|
183
|
+
|
|
184
|
+
if prefix.endswith(".zip"):
|
|
185
|
+
# List prefix zip content
|
|
186
|
+
assets_urls = [
|
|
187
|
+
f"zip+s3://{bucket}/{prefix}!{f.filename}"
|
|
188
|
+
for f in list_files_in_s3_zipped_object(bucket, prefix, auth.s3_client)
|
|
189
|
+
]
|
|
190
|
+
else:
|
|
191
|
+
# List files in prefix
|
|
192
|
+
assets_urls = [
|
|
193
|
+
f"s3://{bucket}/{obj['Key']}"
|
|
194
|
+
for obj in auth.s3_client.list_objects(
|
|
195
|
+
Bucket=bucket, Prefix=prefix, MaxKeys=300
|
|
196
|
+
).get("Contents", [])
|
|
197
|
+
]
|
|
198
|
+
|
|
199
|
+
for asset_url in assets_urls:
|
|
200
|
+
out_of_zip_url = asset_url.split("!")[-1]
|
|
201
|
+
key, roles = product.driver.guess_asset_key_and_roles(
|
|
202
|
+
out_of_zip_url, product
|
|
203
|
+
)
|
|
204
|
+
parsed_url = urlparse(out_of_zip_url)
|
|
205
|
+
title = os.path.basename(parsed_url.path)
|
|
206
|
+
|
|
207
|
+
if key and key not in product.assets:
|
|
208
|
+
product.assets[key] = {
|
|
209
|
+
"title": title,
|
|
210
|
+
"roles": roles,
|
|
211
|
+
"href": asset_url,
|
|
212
|
+
}
|
|
213
|
+
if mime_type := guess_file_type(asset_url):
|
|
214
|
+
product.assets[key]["type"] = mime_type
|
|
215
|
+
|
|
216
|
+
# sort assets
|
|
217
|
+
product.assets.data = dict(sorted(product.assets.data.items()))
|
|
218
|
+
|
|
219
|
+
# update driver
|
|
220
|
+
product.driver = product.get_driver()
|
|
221
|
+
|
|
222
|
+
except botocore.exceptions.ClientError as e:
|
|
223
|
+
if hasattr(auth.config, "auth_error_code") and str(
|
|
224
|
+
auth.config.auth_error_code
|
|
225
|
+
) in str(e):
|
|
226
|
+
raise AuthenticationError(
|
|
227
|
+
f"Authentication failed on {s3_endpoint} s3"
|
|
228
|
+
) from e
|
|
229
|
+
raise NotAvailableError(
|
|
230
|
+
f"assets for product {prefix} could not be found"
|
|
231
|
+
) from e
|
eodag/utils/stac_reader.py
CHANGED
|
@@ -20,7 +20,7 @@ from __future__ import annotations
|
|
|
20
20
|
import logging
|
|
21
21
|
import re
|
|
22
22
|
import socket
|
|
23
|
-
from typing import Any, Callable,
|
|
23
|
+
from typing import Any, Callable, Optional, Union
|
|
24
24
|
from urllib.error import URLError
|
|
25
25
|
from urllib.request import urlopen
|
|
26
26
|
|
|
@@ -108,12 +108,12 @@ def fetch_stac_items(
|
|
|
108
108
|
max_connections: int = 100,
|
|
109
109
|
timeout: int = HTTP_REQ_TIMEOUT,
|
|
110
110
|
ssl_verify: bool = True,
|
|
111
|
-
) ->
|
|
111
|
+
) -> list[dict[str, Any]]:
|
|
112
112
|
"""Fetch STAC item from a single item file or items from a catalog.
|
|
113
113
|
|
|
114
114
|
:param stac_path: A STAC object filepath
|
|
115
115
|
:param recursive: (optional) Browse recursively in child nodes if True
|
|
116
|
-
:param max_connections: (optional) Maximum number of connections for HTTP requests
|
|
116
|
+
:param max_connections: (optional) Maximum number of connections for concurrent HTTP requests
|
|
117
117
|
:param timeout: (optional) Timeout in seconds for each internal HTTP request
|
|
118
118
|
:param ssl_verify: (optional) SSL Verification for HTTP request
|
|
119
119
|
:returns: The items found in `stac_path`
|
|
@@ -142,13 +142,13 @@ def _fetch_stac_items_from_catalog(
|
|
|
142
142
|
recursive: bool,
|
|
143
143
|
max_connections: int,
|
|
144
144
|
_text_opener: Callable[[str, bool], Any],
|
|
145
|
-
) ->
|
|
145
|
+
) -> list[Any]:
|
|
146
146
|
"""Fetch items from a STAC catalog"""
|
|
147
|
-
items:
|
|
147
|
+
items: list[dict[Any, Any]] = []
|
|
148
148
|
|
|
149
149
|
# pystac cannot yet return links from a single file catalog, see:
|
|
150
150
|
# https://github.com/stac-utils/pystac/issues/256
|
|
151
|
-
extensions: Optional[Union[
|
|
151
|
+
extensions: Optional[Union[list[str], str]] = getattr(cat, "stac_extensions", None)
|
|
152
152
|
if extensions:
|
|
153
153
|
extensions = extensions if isinstance(extensions, list) else [extensions]
|
|
154
154
|
if "single-file-stac" in extensions:
|
|
@@ -157,7 +157,7 @@ def _fetch_stac_items_from_catalog(
|
|
|
157
157
|
|
|
158
158
|
# Making the links absolutes allow for both relative and absolute links to be handled.
|
|
159
159
|
if not recursive:
|
|
160
|
-
hrefs:
|
|
160
|
+
hrefs: list[Optional[str]] = [
|
|
161
161
|
link.get_absolute_href() for link in cat.get_item_links()
|
|
162
162
|
]
|
|
163
163
|
else:
|
|
@@ -188,7 +188,7 @@ def fetch_stac_collections(
|
|
|
188
188
|
max_connections: int = 100,
|
|
189
189
|
timeout: int = HTTP_REQ_TIMEOUT,
|
|
190
190
|
ssl_verify: bool = True,
|
|
191
|
-
) ->
|
|
191
|
+
) -> list[dict[str, Any]]:
|
|
192
192
|
"""Fetch STAC collection(s) from a catalog.
|
|
193
193
|
|
|
194
194
|
:param stac_path: A STAC object filepath
|
|
@@ -217,12 +217,12 @@ def _fetch_stac_collections_from_catalog(
|
|
|
217
217
|
collection: Optional[str],
|
|
218
218
|
max_connections: int,
|
|
219
219
|
_text_opener: Callable[[str, bool], Any],
|
|
220
|
-
) ->
|
|
220
|
+
) -> list[Any]:
|
|
221
221
|
"""Fetch collections from a STAC catalog"""
|
|
222
|
-
collections:
|
|
222
|
+
collections: list[dict[Any, Any]] = []
|
|
223
223
|
|
|
224
224
|
# Making the links absolutes allow for both relative and absolute links to be handled.
|
|
225
|
-
hrefs:
|
|
225
|
+
hrefs: list[Optional[str]] = [
|
|
226
226
|
link.get_absolute_href()
|
|
227
227
|
for link in cat.get_child_links()
|
|
228
228
|
if collection is not None and link.title == collection
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: eodag
|
|
3
|
-
Version: 3.0
|
|
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
|
|
@@ -18,11 +18,11 @@ Classifier: Operating System :: Microsoft :: Windows
|
|
|
18
18
|
Classifier: Operating System :: POSIX :: Linux
|
|
19
19
|
Classifier: Programming Language :: Python
|
|
20
20
|
Classifier: Programming Language :: Python :: 3
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.9
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.10
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.11
|
|
25
24
|
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
26
26
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
27
27
|
Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
|
|
28
28
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
@@ -36,91 +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
|
|
39
|
+
Requires-Dist: jsonpath-ng
|
|
40
40
|
Requires-Dist: lxml
|
|
41
|
-
Requires-Dist:
|
|
42
|
-
Requires-Dist: pydantic
|
|
43
|
-
Requires-Dist:
|
|
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
|
|
44
46
|
Requires-Dist: pyshp
|
|
45
|
-
Requires-Dist: pystac
|
|
47
|
+
Requires-Dist: pystac>=1.0.0b1
|
|
46
48
|
Requires-Dist: python-dateutil
|
|
47
49
|
Requires-Dist: PyYAML
|
|
48
50
|
Requires-Dist: requests
|
|
49
51
|
Requires-Dist: setuptools
|
|
50
|
-
Requires-Dist: shapely
|
|
52
|
+
Requires-Dist: shapely>=2.0.6
|
|
51
53
|
Requires-Dist: stream-zip
|
|
52
54
|
Requires-Dist: tqdm
|
|
53
|
-
Requires-Dist:
|
|
55
|
+
Requires-Dist: typing_extensions>=4.8.0
|
|
54
56
|
Requires-Dist: urllib3
|
|
55
57
|
Requires-Dist: Whoosh
|
|
56
|
-
Requires-Dist: orjson ; python_version < "3.12" or platform_system != "Windows"
|
|
57
|
-
Requires-Dist: orjson <3.10.0 ; python_version >= "3.12" and platform_system == "Windows"
|
|
58
58
|
Provides-Extra: all
|
|
59
|
-
Requires-Dist: eodag[all-providers,csw,server,tutorials]
|
|
59
|
+
Requires-Dist: eodag[all-providers,csw,server,tutorials]; extra == "all"
|
|
60
60
|
Provides-Extra: all-providers
|
|
61
|
-
Requires-Dist: eodag[ecmwf,usgs]
|
|
61
|
+
Requires-Dist: eodag[ecmwf,usgs]; extra == "all-providers"
|
|
62
62
|
Provides-Extra: csw
|
|
63
|
-
Requires-Dist: OWSLib
|
|
64
|
-
Provides-Extra: dev
|
|
65
|
-
Requires-Dist: eodag[all-providers,csw,server,stubs] ; extra == 'dev'
|
|
66
|
-
Requires-Dist: pytest ; extra == 'dev'
|
|
67
|
-
Requires-Dist: pytest-cov ; extra == 'dev'
|
|
68
|
-
Requires-Dist: py >=1.8.2 ; extra == 'dev'
|
|
69
|
-
Requires-Dist: pytest-html <3.2.0 ; extra == 'dev'
|
|
70
|
-
Requires-Dist: pytest-xdist ; extra == 'dev'
|
|
71
|
-
Requires-Dist: pytest-socket ; extra == 'dev'
|
|
72
|
-
Requires-Dist: pytest-instafail ; extra == 'dev'
|
|
73
|
-
Requires-Dist: tox ; extra == 'dev'
|
|
74
|
-
Requires-Dist: faker ; extra == 'dev'
|
|
75
|
-
Requires-Dist: moto ; extra == 'dev'
|
|
76
|
-
Requires-Dist: twine ; extra == 'dev'
|
|
77
|
-
Requires-Dist: wheel ; extra == 'dev'
|
|
78
|
-
Requires-Dist: flake8 ; extra == 'dev'
|
|
79
|
-
Requires-Dist: pre-commit ; extra == 'dev'
|
|
80
|
-
Requires-Dist: responses <0.24.0 ; extra == 'dev'
|
|
81
|
-
Requires-Dist: fastapi[all] ; extra == 'dev'
|
|
82
|
-
Requires-Dist: stdlib-list ; extra == 'dev'
|
|
83
|
-
Requires-Dist: mypy ; extra == 'dev'
|
|
84
|
-
Provides-Extra: docs
|
|
85
|
-
Requires-Dist: eodag[all,stubs] ; extra == 'docs'
|
|
86
|
-
Requires-Dist: sphinx ; extra == 'docs'
|
|
87
|
-
Requires-Dist: sphinx-book-theme >=1.0.0 ; extra == 'docs'
|
|
88
|
-
Requires-Dist: sphinx-copybutton ; extra == 'docs'
|
|
89
|
-
Requires-Dist: sphinx-tabs ; extra == 'docs'
|
|
90
|
-
Requires-Dist: nbsphinx ; extra == 'docs'
|
|
91
|
-
Requires-Dist: sphinx-autodoc-typehints ; extra == 'docs'
|
|
63
|
+
Requires-Dist: OWSLib>=0.27.1; extra == "csw"
|
|
92
64
|
Provides-Extra: ecmwf
|
|
93
|
-
Requires-Dist: ecmwf-api-client
|
|
94
|
-
Provides-Extra:
|
|
95
|
-
Requires-Dist:
|
|
65
|
+
Requires-Dist: ecmwf-api-client; extra == "ecmwf"
|
|
66
|
+
Provides-Extra: usgs
|
|
67
|
+
Requires-Dist: usgs>=0.3.1; extra == "usgs"
|
|
96
68
|
Provides-Extra: server
|
|
97
|
-
Requires-Dist: fastapi
|
|
98
|
-
Requires-Dist: pygeofilter
|
|
99
|
-
Requires-Dist: starlette
|
|
100
|
-
Requires-Dist: uvicorn[standard]
|
|
101
|
-
Requires-Dist: pydantic-settings
|
|
102
|
-
Requires-Dist: cachetools
|
|
103
|
-
Provides-Extra:
|
|
104
|
-
Requires-Dist:
|
|
105
|
-
Requires-Dist: types-lxml ; extra == 'stubs'
|
|
106
|
-
Requires-Dist: types-cachetools ; extra == 'stubs'
|
|
107
|
-
Requires-Dist: types-requests ; extra == 'stubs'
|
|
108
|
-
Requires-Dist: types-python-dateutil ; extra == 'stubs'
|
|
109
|
-
Requires-Dist: types-setuptools ; extra == 'stubs'
|
|
110
|
-
Requires-Dist: types-tqdm ; 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"
|
|
111
77
|
Provides-Extra: tutorials
|
|
112
|
-
Requires-Dist: eodag[ecmwf,notebook]
|
|
113
|
-
Requires-Dist: eodag-cube
|
|
114
|
-
Requires-Dist: jupyter
|
|
115
|
-
Requires-Dist: ipyleaflet
|
|
116
|
-
Requires-Dist: ipywidgets
|
|
117
|
-
Requires-Dist: matplotlib
|
|
118
|
-
Requires-Dist: folium
|
|
119
|
-
Requires-Dist: imageio
|
|
120
|
-
Requires-Dist: rasterio
|
|
121
|
-
Requires-Dist: netcdf4
|
|
122
|
-
|
|
123
|
-
|
|
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"
|
|
124
129
|
|
|
125
130
|
.. image:: https://eodag.readthedocs.io/en/latest/_static/eodag_bycs.png
|
|
126
131
|
:target: https://github.com/CS-SI/eodag
|
|
@@ -298,25 +303,20 @@ An eodag instance can be exposed through a STAC compliant REST api from the comm
|
|
|
298
303
|
| jq ".numberMatched"
|
|
299
304
|
6
|
|
300
305
|
|
|
301
|
-
# browse for items
|
|
302
|
-
$ curl "http://127.0.0.1:5000/catalogs/S2_MSI_L1C/country/FRA/year/2021/month/01/day/25/cloud_cover/10/items" \
|
|
303
|
-
| jq ".numberMatched"
|
|
304
|
-
9
|
|
305
|
-
|
|
306
306
|
# get download link
|
|
307
|
-
$ curl "http://127.0.0.1:5000/
|
|
307
|
+
$ curl "http://127.0.0.1:5000/collections/S2_MSI_L1C/items" \
|
|
308
308
|
| jq ".features[0].assets.downloadLink.href"
|
|
309
|
-
"http://127.0.0.1:
|
|
309
|
+
"http://127.0.0.1:5002/collections/S2_MSI_L1C/items/S2B_MSIL1C_20240917T115259_N0511_R137_T21CWS_20240917T145134/download"
|
|
310
310
|
|
|
311
311
|
# download
|
|
312
|
-
$ wget "http://127.0.0.1:
|
|
312
|
+
$ wget "http://127.0.0.1:5002/collections/S2_MSI_L1C/items/S2B_MSIL1C_20240917T115259_N0511_R137_T21CWS_20240917T145134/download"
|
|
313
313
|
|
|
314
314
|
|
|
315
315
|
``eodag-server`` is available on `https://hub.docker.com/r/csspace/eodag-server <https://hub.docker.com/r/csspace/eodag-server>`_:
|
|
316
316
|
|
|
317
317
|
.. code-block:: bash
|
|
318
318
|
|
|
319
|
-
docker run -p 5000:5000 --rm csspace/eodag-server:3.0
|
|
319
|
+
docker run -p 5000:5000 --rm csspace/eodag-server:3.1.0
|
|
320
320
|
|
|
321
321
|
You can also browse over your STAC API server using `STAC Browser <https://github.com/radiantearth/stac-browser>`_.
|
|
322
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,,
|