eodag 3.1.0b2__py3-none-any.whl → 3.2.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.
@@ -157,7 +157,7 @@ geodes:
157
157
  download:
158
158
  extract:
159
159
  output_dir:
160
- geodes:
160
+ geodes_s3:
161
161
  priority: # Lower value means lower priority (Default: 0)
162
162
  search: # Search parameters configuration
163
163
  auth:
@@ -184,16 +184,6 @@ meteoblue:
184
184
  apikey:
185
185
  download:
186
186
  output_dir:
187
- onda:
188
- priority: # Lower value means lower priority (Default: 0)
189
- search: # Search parameters configuration
190
- download:
191
- extract:
192
- output_dir:
193
- auth:
194
- credentials:
195
- username:
196
- password:
197
187
  peps:
198
188
  priority: # Lower value means lower priority (Default: 1)
199
189
  search: # Search parameters configuration
eodag/rest/stac.py CHANGED
@@ -97,6 +97,7 @@ IGNORED_ITEM_PROPERTIES = [
97
97
  "qs",
98
98
  "defaultGeometry",
99
99
  "_date",
100
+ "productType",
100
101
  ]
101
102
 
102
103
 
@@ -25,8 +25,9 @@ from pydantic import (
25
25
  Field,
26
26
  SerializationInfo,
27
27
  SerializerFunctionWrapHandler,
28
- computed_field,
28
+ field_validator,
29
29
  model_serializer,
30
+ model_validator,
30
31
  )
31
32
 
32
33
  from eodag.rest.types.eodag_search import EODAGSearch
@@ -35,6 +36,7 @@ from eodag.types import python_field_definition_to_json
35
36
 
36
37
  if TYPE_CHECKING:
37
38
  from pydantic.fields import FieldInfo
39
+ from typing_extensions import Self
38
40
 
39
41
 
40
42
  class QueryablesGetParams(BaseModel):
@@ -42,6 +44,8 @@ class QueryablesGetParams(BaseModel):
42
44
 
43
45
  collection: Optional[str] = Field(default=None, serialization_alias="productType")
44
46
  datetime: Optional[str] = Field(default=None)
47
+ start_datetime: Optional[str] = Field(default=None)
48
+ end_datetime: Optional[str] = Field(default=None)
45
49
 
46
50
  model_config = ConfigDict(extra="allow", frozen=True)
47
51
 
@@ -50,21 +54,29 @@ class QueryablesGetParams(BaseModel):
50
54
  dumped: dict[str, Any] = handler(self)
51
55
  return {EODAGSearch.to_eodag(k): v for k, v in dumped.items()}
52
56
 
53
- # use [prop-decorator] mypy error code when mypy==1.12 is released
54
- @computed_field # type: ignore[misc]
55
- @property
56
- def start_datetime(self) -> Optional[str]:
57
- """Extract start_datetime property from datetime"""
58
- start = str_to_interval(self.datetime)[0]
59
- return start.strftime("%Y-%m-%dT%H:%M:%SZ") if start else None
60
-
61
- # use [prop-decorator] mypy error code when mypy==1.12 is released
62
- @computed_field # type: ignore[misc]
63
- @property
64
- def end_datetime(self) -> Optional[str]:
65
- """Extract end_datetime property from datetime"""
66
- end = str_to_interval(self.datetime)[1]
67
- return end.strftime("%Y-%m-%dT%H:%M:%SZ") if end else None
57
+ @field_validator("datetime", "start_datetime", "end_datetime", mode="before")
58
+ def validate_datetime(cls, value: Any) -> Optional[str]:
59
+ """datetime, start_datetime and end_datetime must be a string"""
60
+ if isinstance(value, list):
61
+ return value[0]
62
+
63
+ return value
64
+
65
+ @model_validator(mode="after")
66
+ def compute_datetimes(self: Self) -> Self:
67
+ """Start datetime must be a string"""
68
+ if not self.datetime:
69
+ return self
70
+
71
+ start, end = str_to_interval(self.datetime)
72
+
73
+ if not self.start_datetime and start:
74
+ self.start_datetime = start.strftime("%Y-%m-%dT%H:%M:%SZ")
75
+
76
+ if not self.end_datetime and end:
77
+ self.end_datetime = end.strftime("%Y-%m-%dT%H:%M:%SZ")
78
+
79
+ return self
68
80
 
69
81
 
70
82
  class StacQueryableProperty(BaseModel):
eodag/types/__init__.py CHANGED
@@ -24,6 +24,7 @@ from typing import (
24
24
  Any,
25
25
  Literal,
26
26
  Optional,
27
+ Type,
27
28
  TypedDict,
28
29
  Union,
29
30
  get_args,
@@ -31,8 +32,11 @@ from typing import (
31
32
  )
32
33
 
33
34
  from annotated_types import Gt, Lt
34
- from pydantic import BaseModel, Field, create_model
35
+ from pydantic import BaseModel, ConfigDict, Field, create_model
36
+ from pydantic.annotated_handlers import GetJsonSchemaHandler
35
37
  from pydantic.fields import FieldInfo
38
+ from pydantic.json_schema import JsonSchemaValue
39
+ from pydantic_core import CoreSchema
36
40
 
37
41
  from eodag.utils import copy_deepcopy
38
42
  from eodag.utils.exceptions import ValidationError
@@ -199,10 +203,18 @@ def json_field_definition_to_python(
199
203
  if "$ref" in json_field_definition:
200
204
  field_type_kwargs["json_schema_extra"] = {"$ref": json_field_definition["$ref"]}
201
205
 
202
- if not required or default_value:
203
- return Annotated[python_type, Field(default=default_value, **field_type_kwargs)]
204
- else:
205
- return Annotated[python_type, Field(..., **field_type_kwargs)]
206
+ metadata = [
207
+ python_type,
208
+ Field(
209
+ default_value if not required or default_value is not None else ...,
210
+ **field_type_kwargs,
211
+ ),
212
+ ]
213
+
214
+ if required:
215
+ metadata.append("json_schema_required")
216
+
217
+ return Annotated[tuple(metadata)]
206
218
 
207
219
 
208
220
  def python_field_definition_to_json(
@@ -332,26 +344,76 @@ def model_fields_to_annotated(
332
344
  return annotated_model_fields
333
345
 
334
346
 
347
+ class BaseModelCustomJsonSchema(BaseModel):
348
+ """Base class for generated models with custom json schema."""
349
+
350
+ @classmethod
351
+ def __get_pydantic_json_schema__(
352
+ cls: Type[BaseModel], core_schema: CoreSchema, handler: GetJsonSchemaHandler
353
+ ) -> JsonSchemaValue:
354
+ """
355
+ Custom get json schema method to handle required fields with default values.
356
+ This is not supported by Pydantic by default.
357
+ It requires the field to be marked with the key "json_schema_required" in the metadata dict.
358
+ Example: Annotated[str, "json_schema_required"]
359
+ """
360
+ json_schema = handler.resolve_ref_schema(handler(core_schema))
361
+
362
+ json_schema["required"] = [
363
+ key
364
+ for key, field_info in cls.model_fields.items()
365
+ if "json_schema_required" in field_info.metadata
366
+ ]
367
+
368
+ return json_schema
369
+
370
+ model_config = ConfigDict(arbitrary_types_allowed=True)
371
+
372
+
335
373
  def annotated_dict_to_model(
336
374
  model_name: str, annotated_fields: dict[str, Annotated[Any, FieldInfo]]
337
375
  ) -> BaseModel:
338
376
  """Convert a dictionary of Annotated values to a Pydantic BaseModel.
339
377
 
378
+ >>> from pydantic import Field
379
+ >>> annotated_fields = {
380
+ ... "field1": Annotated[str, Field(description="A string field"), "json_schema_required"],
381
+ ... "field2": Annotated[int, Field(default=42, description="An integer field")],
382
+ ... }
383
+ >>> model = annotated_dict_to_model("TestModel", annotated_fields)
384
+ >>> json_schema = model.model_json_schema()
385
+ >>> json_schema["required"]
386
+ ['field1']
387
+ >>> json_schema["properties"]["field1"]
388
+ {'description': 'A string field', 'title': 'Field1', 'type': 'string'}
389
+ >>> json_schema["properties"]["field2"]
390
+ {'default': 42, 'description': 'An integer field', 'title': 'Field2', 'type': 'integer'}
391
+ >>> json_schema["title"]
392
+ 'TestModel'
393
+ >>> json_schema["type"]
394
+ 'object'
395
+
340
396
  :param model_name: name of the model to be created
341
397
  :param annotated_fields: dict containing the parameters and annotated values that should become
342
398
  the properties of the model
343
399
  :returns: pydantic model
344
400
  """
345
- fields = {
346
- name: (field.__args__[0], field.__metadata__[0])
347
- for name, field in annotated_fields.items()
348
- }
349
- return create_model(
401
+ fields = {}
402
+ for name, field in annotated_fields.items():
403
+ base_type, field_info, *metadata = get_args(field)
404
+ fields[name] = (
405
+ Annotated[tuple([base_type] + metadata)] if metadata else base_type,
406
+ field_info,
407
+ )
408
+
409
+ custom_model = create_model(
350
410
  model_name,
411
+ __base__=BaseModelCustomJsonSchema,
351
412
  **fields, # type: ignore
352
- __config__={"arbitrary_types_allowed": True},
353
413
  )
354
414
 
415
+ return custom_model
416
+
355
417
 
356
418
  class ProviderSortables(TypedDict):
357
419
  """A class representing sortable parameter(s) of a provider and the allowed
eodag/utils/__init__.py CHANGED
@@ -1048,7 +1048,7 @@ def format_string(key: str, str_to_format: Any, **format_variables: Any) -> Any:
1048
1048
  # defaultdict usage will return "" for missing keys in format_args
1049
1049
  try:
1050
1050
  result = str_to_format.format_map(defaultdict(str, **format_variables))
1051
- except TypeError as e:
1051
+ except (ValueError, TypeError) as e:
1052
1052
  raise MisconfiguredError(
1053
1053
  f"Unable to format str={str_to_format} using {str(format_variables)}: {str(e)}"
1054
1054
  )
eodag/utils/s3.py CHANGED
@@ -36,7 +36,7 @@ from eodag.utils.exceptions import (
36
36
  )
37
37
 
38
38
  if TYPE_CHECKING:
39
- from zipfile import ZipInfo
39
+ from zipfile import ZipFile, ZipInfo
40
40
 
41
41
  from mypy_boto3_s3.client import S3Client
42
42
 
@@ -78,11 +78,11 @@ def parse_int(bytes: bytes) -> int:
78
78
  return val
79
79
 
80
80
 
81
- def list_files_in_s3_zipped_object(
82
- bucket_name: str, key_name: str, client_s3: S3Client
83
- ) -> List[ZipInfo]:
81
+ def open_s3_zipped_object(
82
+ bucket_name: str, key_name: str, client_s3: S3Client, partial: bool = True
83
+ ) -> ZipFile:
84
84
  """
85
- List files in s3 zipped object, without downloading it.
85
+ Open s3 zipped object, without downloading it.
86
86
 
87
87
  See https://stackoverflow.com/questions/41789176/how-to-count-files-inside-zip-in-aws-s3-without-downloading-it;
88
88
  Based on https://stackoverflow.com/questions/51351000/read-zip-files-from-s3-without-downloading-the-entire-file
@@ -90,6 +90,7 @@ def list_files_in_s3_zipped_object(
90
90
  :param bucket_name: Bucket name of the object to fetch
91
91
  :param key_name: Key name of the object to fetch
92
92
  :param client_s3: s3 client used to fetch the object
93
+ :param partial: fetch partial data if only content info is needed
93
94
  :returns: List of files in zip
94
95
  """
95
96
  response = client_s3.head_object(Bucket=bucket_name, Key=key_name)
@@ -104,11 +105,33 @@ def list_files_in_s3_zipped_object(
104
105
 
105
106
  # fetch central directory, append EOCD, and open as zipfile
106
107
  cd = fetch(bucket_name, key_name, cd_start, cd_size, client_s3)
107
- zip = zipfile.ZipFile(io.BytesIO(cd + eocd))
108
108
 
109
- logger.debug("Found %s files in %s" % (len(zip.filelist), key_name))
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
110
126
 
111
- return zip.filelist
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
112
135
 
113
136
 
114
137
  def update_assets_from_s3(
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: eodag
3
- Version: 3.1.0b2
3
+ Version: 3.2.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,10 +36,9 @@ 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: orjson<3.10.0; python_version >= "3.12" and platform_system == "Windows"
42
- Requires-Dist: orjson; python_version < "3.12" or platform_system != "Windows"
41
+ Requires-Dist: orjson
43
42
  Requires-Dist: pydantic!=2.10.0,>=2.1.0
44
43
  Requires-Dist: pydantic_core
45
44
  Requires-Dist: PyJWT[crypto]>=2.5.0
@@ -77,7 +76,7 @@ Provides-Extra: notebook
77
76
  Requires-Dist: tqdm[notebook]; extra == "notebook"
78
77
  Provides-Extra: tutorials
79
78
  Requires-Dist: eodag[ecmwf,notebook]; extra == "tutorials"
80
- Requires-Dist: eodag-cube>=0.6.0b1; extra == "tutorials"
79
+ Requires-Dist: eodag-cube>=0.6.0b2; extra == "tutorials"
81
80
  Requires-Dist: jupyter; extra == "tutorials"
82
81
  Requires-Dist: ipyleaflet>=0.10.0; extra == "tutorials"
83
82
  Requires-Dist: ipywidgets; extra == "tutorials"
@@ -92,7 +91,7 @@ Requires-Dist: eodag[all-providers,csw,server,stubs]; extra == "dev"
92
91
  Requires-Dist: pytest; extra == "dev"
93
92
  Requires-Dist: pytest-cov; extra == "dev"
94
93
  Requires-Dist: py>=1.8.2; extra == "dev"
95
- Requires-Dist: pytest-html<3.2.0; extra == "dev"
94
+ Requires-Dist: pytest-html!=3.2.0; extra == "dev"
96
95
  Requires-Dist: pytest-xdist; extra == "dev"
97
96
  Requires-Dist: pytest-socket; extra == "dev"
98
97
  Requires-Dist: pytest-instafail; extra == "dev"
@@ -104,7 +103,7 @@ Requires-Dist: twine; extra == "dev"
104
103
  Requires-Dist: wheel; extra == "dev"
105
104
  Requires-Dist: flake8; extra == "dev"
106
105
  Requires-Dist: pre-commit; extra == "dev"
107
- Requires-Dist: responses<0.24.0; extra == "dev"
106
+ Requires-Dist: responses!=0.24.0; extra == "dev"
108
107
  Requires-Dist: fastapi[all]; extra == "dev"
109
108
  Requires-Dist: stdlib-list; extra == "dev"
110
109
  Requires-Dist: mypy; extra == "dev"
@@ -114,6 +113,7 @@ Requires-Dist: types-lxml; extra == "stubs"
114
113
  Requires-Dist: types-cachetools; extra == "stubs"
115
114
  Requires-Dist: types-requests; extra == "stubs"
116
115
  Requires-Dist: types-python-dateutil; extra == "stubs"
116
+ Requires-Dist: types-PyYAML; extra == "stubs"
117
117
  Requires-Dist: types-setuptools; extra == "stubs"
118
118
  Requires-Dist: types-tqdm; extra == "stubs"
119
119
  Requires-Dist: types-urllib3; extra == "stubs"
@@ -126,6 +126,7 @@ Requires-Dist: sphinx-tabs; extra == "docs"
126
126
  Requires-Dist: nbsphinx; extra == "docs"
127
127
  Requires-Dist: sphinx_autodoc_typehints; extra == "docs"
128
128
  Requires-Dist: sphinxemoji; extra == "docs"
129
+ Dynamic: license-file
129
130
 
130
131
  .. image:: https://eodag.readthedocs.io/en/latest/_static/eodag_bycs.png
131
132
  :target: https://github.com/CS-SI/eodag
@@ -316,7 +317,7 @@ An eodag instance can be exposed through a STAC compliant REST api from the comm
316
317
 
317
318
  .. code-block:: bash
318
319
 
319
- docker run -p 5000:5000 --rm csspace/eodag-server:3.1.0b2
320
+ docker run -p 5000:5000 --rm csspace/eodag-server:3.2.0
320
321
 
321
322
  You can also browse over your STAC API server using `STAC Browser <https://github.com/radiantearth/stac-browser>`_.
322
323
  Simply run:
@@ -1,15 +1,15 @@
1
1
  eodag/__init__.py,sha256=qADIO6H3KR0CMs0qePdJROjSzcGnHaYpv-RFIk18WGQ,1608
2
2
  eodag/cli.py,sha256=63QvLzyZEf6dsTB1jK_80lOTtp6fbjoSJROqKIL-mR4,29959
3
- eodag/config.py,sha256=LUySQDaVgdDnLnem-y4dESUk-rSzYhwEOKUTumTFq4c,45692
3
+ eodag/config.py,sha256=WUL9yLwVXyXArnZ8RYI8Dnf7Ujnd04dl3M0dc9UTwWE,45837
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=jSqqpdr6mOOZ_PoQpZI9EIYM1pJOCx-A1Ht9hyMqznw,109473
7
+ eodag/api/core.py,sha256=tGMdrgJnm_7D5b2VoMCt-QeMOnOOfnhYiOwufDxpF6k,109426
8
8
  eodag/api/search_result.py,sha256=ri3-5Jxr1Ik8V0uQtuXvnd3L3tSGS_niqpmHeaI2Obw,8176
9
9
  eodag/api/product/__init__.py,sha256=klSKudmnHHeXvcwIX6Y30UTiP39tMfTwLNexSnAZnx0,1154
10
- eodag/api/product/_assets.py,sha256=ucay0P8Xlk54Elo2KJt9gCBdAiiAuuZC8CR4BASzL08,6278
11
- eodag/api/product/_product.py,sha256=bXNdMkoUcnICcEXZT1e8vOEf-zYw8tKZxZRiPuw7tzE,23704
12
- eodag/api/product/metadata_mapping.py,sha256=Hw8FD4fjdqnUS3w6MI7g9wGutYI0xxfN3H7CHIlFJQM,71666
10
+ eodag/api/product/_assets.py,sha256=9bWIe_SYvsQO-q_lQFd7SxhUIWv7feze2-wnXOe8hhs,7570
11
+ eodag/api/product/_product.py,sha256=1Jz-oPg65Njc7DOWw4ADT9QmNXReiD1LeXFDosnXsOA,23458
12
+ eodag/api/product/metadata_mapping.py,sha256=URGvZX2coTTm5TNWoDoV1pDsSV17Xtg1ZZ2xpKUrmlw,72234
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
@@ -20,8 +20,8 @@ eodag/plugins/base.py,sha256=bBp4k8QYJFEE6CRctrVwjws6suBwQdCLrLmvoGAmG3A,2670
20
20
  eodag/plugins/manager.py,sha256=EYz5zliB3e3pxTvP4QIwtMtXfwPhxXJxjdYIsJsvFx0,20373
21
21
  eodag/plugins/apis/__init__.py,sha256=PyY4f7P2iu3MkLPnw5eOrVew2fuavbBL3Asci3Ulwoo,744
22
22
  eodag/plugins/apis/base.py,sha256=oCEKVtIbOjzNgM3lzaCCtO-DhU2PvGfKaATG6OxR-V8,2818
23
- eodag/plugins/apis/ecmwf.py,sha256=fEnI0RfeQk6-74UkFRmgp1fElqTEryshoD8AG03ZNhg,11523
24
- eodag/plugins/apis/usgs.py,sha256=V2sHSebvbkGQT_SKIVAn6BfMvQA4RTUxJ68EK3vdK1s,19593
23
+ eodag/plugins/apis/ecmwf.py,sha256=CnFeuxx2GghuSQF9oGhCWC2ixL3q9aO_lpMRZehLueI,11455
24
+ eodag/plugins/apis/usgs.py,sha256=42vrVZ_fKi1-Z8nUt5-9wapUE7v75_hzgZHbKD23Auo,19625
25
25
  eodag/plugins/authentication/__init__.py,sha256=_LVw42Bb1IhGAZH5xHRaS4b1iFoF9e27KDZOyoSoJHY,1039
26
26
  eodag/plugins/authentication/aws_auth.py,sha256=6qeULjxljV9WTPqZjJJ6E0DWeiaGmzGR3rM0at75CFQ,3199
27
27
  eodag/plugins/authentication/base.py,sha256=7vwX7O9xxvcKA9cMZ85F2eOkcdb7HyNbanUC5J0f9SA,2643
@@ -29,7 +29,7 @@ eodag/plugins/authentication/generic.py,sha256=LlOVPjvwRpbMDl62Brd7Ao34WmktKWoo0
29
29
  eodag/plugins/authentication/header.py,sha256=U_KnUqgZTLHXM5OKdGbH6jRqoQ0uIfOoxO6krUeAAcQ,4284
30
30
  eodag/plugins/authentication/keycloak.py,sha256=f0AnWkvtsmLmWqgGfT3XB6AqbfCPU_ZHkDu07Zwf3E4,7178
31
31
  eodag/plugins/authentication/oauth.py,sha256=fCMx7OxS3JNO9lLZhQNnL9lsBB9nFwZJLEYXI49QRtw,1952
32
- eodag/plugins/authentication/openid_connect.py,sha256=pRCgOmysAF8FMdtmsVzhDIr-RdONgVxHY8dKJuwNksA,24717
32
+ eodag/plugins/authentication/openid_connect.py,sha256=LbpQzekxin_bLrKfk7bzU3LGxlfaABSm1fwx7S1O58M,24913
33
33
  eodag/plugins/authentication/qsauth.py,sha256=bkepO_sFRIhYm3Dzecx3VJP0Ap37vUuJSRmEY8HrV1U,3947
34
34
  eodag/plugins/authentication/sas_auth.py,sha256=gZp5UDeAi6iEi-IXv_RjrmAVpQCD5s9A0b3V7HV6KnU,4773
35
35
  eodag/plugins/authentication/token.py,sha256=5mipX9SuNSNJtLntLRLm8KS7kqwylurvzkQq57fxWg0,12879
@@ -42,29 +42,29 @@ eodag/plugins/crunch/filter_latest_tpl_name.py,sha256=pP4EDP73mQg1zvkVm1Uo4nGAgw
42
42
  eodag/plugins/crunch/filter_overlap.py,sha256=mkm5_ljgK_7QOOp-KgJjDjbVfss4gwRjIYUTMyKrw5o,7272
43
43
  eodag/plugins/crunch/filter_property.py,sha256=5V0_S11iAnvZqRzYN0Jox96zZwIxPGC13IWQwNYyYrU,3193
44
44
  eodag/plugins/download/__init__.py,sha256=zqszaeNgYP0YHlZDkLMf6odcwNw0KrAahGpcA-l0kAw,740
45
- eodag/plugins/download/aws.py,sha256=toc86ntqnmW1pcvakgL5ry0WOsTuv00I4MBDxRwrcy8,55452
45
+ eodag/plugins/download/aws.py,sha256=SwyiF1j2MBvUJi-LwVT8NmQfxZYRfi7kk5Uxd8vFVW8,58623
46
46
  eodag/plugins/download/base.py,sha256=ulkGfiY2qMtzyEPdUlP8CZ6w5Bqi2hckuX-sGqpkVeQ,29994
47
47
  eodag/plugins/download/creodias_s3.py,sha256=RoEhYHtsPDbfrZhBllYoek0r7YzP8Upf5CPgc-PnlZM,4151
48
48
  eodag/plugins/download/http.py,sha256=FhvkCVxj_ENV31Nm2ulT3DRlPQYBM6eQtf2of9M0T2o,56707
49
49
  eodag/plugins/download/s3rest.py,sha256=BYkKglGhTVyR0A-8ls5gLhWOPwc_DgB4aydj79wpqoM,14825
50
50
  eodag/plugins/search/__init__.py,sha256=bBrl3TffoU1wVpaeXmTEIailoh9W6fla4IP-8SWqA9U,2019
51
- eodag/plugins/search/base.py,sha256=fGP3C6_ESJ-NgxYq77jh663j8v4IcmkJUfqwf7gF4nw,18480
52
- eodag/plugins/search/build_search_result.py,sha256=ceyDxlSXBWXB2UMqgY0RtWQJsPueDFiWtGPfA8F6YY0,48517
51
+ eodag/plugins/search/base.py,sha256=b9zAPLQITBSOJ9n5zBxtiHlPkQwACjjJkD894oYZ7L8,18555
52
+ eodag/plugins/search/build_search_result.py,sha256=FbVJvviyhSU-cuY7ctoJbXR0QKMbUFfTVpt7WsHx4mE,45426
53
53
  eodag/plugins/search/cop_marine.py,sha256=pRWNY9MXY-XzlpQjqOI8ImOiNUehv9pwNl6oR9r171w,19720
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=KGoPfM492MbYHDDyJH07lRTw_6PqLOKx5WPb2YUfSFU,26697
57
- eodag/plugins/search/qssearch.py,sha256=OYjRBamyONGEU0z8FVKAUrss1MZ1L_NZUW8DSyYS6rI,94722
56
+ eodag/plugins/search/data_request_search.py,sha256=yrKu3EXhn6Utyai3qv5NPnH-V4EuGIAIxw6XzJA4IIw,26715
57
+ eodag/plugins/search/qssearch.py,sha256=WZYKd0cySgbcF6RKObz-Sc55c3gXRZQCKJXM1sdtR84,91586
58
58
  eodag/plugins/search/stac_list_assets.py,sha256=OOCMyjD8XD-m39k0SyKMrRi4K8Ii5mOQsA6zSAeQDGI,3435
59
- eodag/plugins/search/static_stac_search.py,sha256=KB4Bw0LBXzP6w1ObHp0R5C2fAYrhlWhkH1-y2v__hCo,9244
60
- eodag/resources/ext_product_types.json,sha256=Qfvll-Lg3cvh9uV3REVQGIkNtj78EsNwq7xwSQ3jZDs,3104461
59
+ eodag/plugins/search/static_stac_search.py,sha256=rfcKBD-0-gDFg6jbR_XCsVH1t9Yf9HIlnFE_Drr0BAs,9259
60
+ eodag/resources/ext_product_types.json,sha256=bXZ3hzLAUgHac5yxff0fQD2hD0KYBu_VoiH5Jpu1EfA,3160813
61
61
  eodag/resources/locations_conf_template.yml,sha256=_eBv-QKHYMIKhY0b0kp4Ee33RsayxN8LWH3kDXxfFSk,986
62
- eodag/resources/product_types.yml,sha256=LqY6MtEiY6bkp6LXp-9F-o4HaJHxSd1OpRK5-slguOU,391300
63
- eodag/resources/providers.yml,sha256=nPMDlD0csAPaXw5K3HMME0funTEC7euo8lJbjJbyRJI,231255
62
+ eodag/resources/product_types.yml,sha256=vN-VNxKmRbMmRfdjMI3Tc3vs66yhU3Oep8_v2AXWH9Y,409966
63
+ eodag/resources/providers.yml,sha256=dHhapMifpnq_Rc85ykGxNWZekP6-tN0QpVehxyoDHrQ,221207
64
64
  eodag/resources/stac.yml,sha256=XgQFkJEfu_f2ZiVM5L1flkew7wq55p_PJmDuVkOG3fs,10442
65
65
  eodag/resources/stac_api.yml,sha256=2FdQL_qBTIUlu6KH836T4CXBKO9AvVxA_Ub3J1RP81A,68881
66
66
  eodag/resources/stac_provider.yml,sha256=2yfdnuhJYV1f5el3aFkunoPqHAcD8oCDzvASbmldIvY,6703
67
- eodag/resources/user_conf_template.yml,sha256=G_G5RdCa54BUUNyXdxdeNWJe3i1r-JnF1Ya8bwjCl_8,8002
67
+ eodag/resources/user_conf_template.yml,sha256=VitU2oHwcWNd7CoONfHabMBGwCPfYjwyU3cX63oJaIs,7765
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
70
70
  eodag/resources/shp/ne_110m_admin_0_map_units.dbf,sha256=uEEO22hZ_crWxMNhuQ_ix889c1Us1awYXAglxbf1K-s,393747
@@ -79,23 +79,23 @@ eodag/rest/core.py,sha256=P4o9Fjb-1xE1mhKMai1m0D2J90pSkw_hxE3XI4iGXBg,26550
79
79
  eodag/rest/errors.py,sha256=R_zs9NILVnZ5qIpVgPtjprv_BalJxZEqr-LSZ0VVV8k,6192
80
80
  eodag/rest/server.py,sha256=dqwP_mf856gPKxZCtdmH5WoYYji7edSab3Q_PzEQuUE,18308
81
81
  eodag/rest/server.wsgi,sha256=ssM4JQi8tZpOYj03CTdM0weyUF1b3Lbh38pdD-vBfXs,152
82
- eodag/rest/stac.py,sha256=hHcQG4Iz5mF2qKSFYuoBc9nl_kSClJU1bKkVXScxN4s,35808
82
+ eodag/rest/stac.py,sha256=t0xuFmJYbPvzBvJBs_8PQLCOJc5fJ8mbV9AbJxbMgVk,35827
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
86
86
  eodag/rest/types/eodag_search.py,sha256=uN96xejktaQRojKZm2BGAgxvcWcwBkle4_I2z7jlDzw,14281
87
- eodag/rest/types/queryables.py,sha256=kYkQtxZMcLiXDa6h-_kAKwXEQWpjZNZBYO-mq-y4sI0,6213
87
+ eodag/rest/types/queryables.py,sha256=e3IMM2eIYnUsjrErw54CNZjMLuFDTMxSbLRHDFFvVMw,6470
88
88
  eodag/rest/types/stac_search.py,sha256=a_m7ATLPFttvUo9_hfsIAQKtNhBvX3U86lNWv_8_oIM,8765
89
89
  eodag/rest/utils/__init__.py,sha256=VRTxZFU15mB4izpYd8e30_xR1iZlJRsoW1jeCZ7bk1o,6560
90
90
  eodag/rest/utils/cql_evaluate.py,sha256=aMcdowtYbQpU1H9oX1IM2PMot6XTy49Q6H2k-YBEtco,4087
91
91
  eodag/rest/utils/rfc3339.py,sha256=_kaK7_8sxXyCAAs99ltVoinUw02frtZckl72ytI6IjQ,2234
92
- eodag/types/__init__.py,sha256=z9zz-ssom6O4AfRfKbHbWYL3wcgw_we8plL77qAtrMg,13489
92
+ eodag/types/__init__.py,sha256=FPDFHvjMnHBFNPx-B4TN-6qZhZ8VI5ICort6U6hCTYo,15612
93
93
  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=9Jllvoq0SgCKQUmnhVNqj55_xdMq2Yw49-1SWFh_nI8,9880
96
96
  eodag/types/search_args.py,sha256=EtG8nXnApBnYrFo5FVvsvvEqRlqTxJ0lrmIem9Wtg8c,5649
97
97
  eodag/types/whoosh.py,sha256=VXpWAZaXLR_RRnI9gh5iwkqn1n63krVGj2SX0rB2mQo,7225
98
- eodag/utils/__init__.py,sha256=VkFVY02rBeKVbnCvE0Cmu90EM7hTKnO-QSuVqu3keGE,52765
98
+ eodag/utils/__init__.py,sha256=bdV7WMU9Zz9c6a7D63bTTNKuZmu7aEIyCm9QoS8rj9Y,52779
99
99
  eodag/utils/exceptions.py,sha256=hYeq5GzMqW50o6mSUUlvOpsfU0eRjwhpqXTSE5MFv9Q,4452
100
100
  eodag/utils/import_system.py,sha256=1vwcSRlsZwuaP8ssrpRBP5jldZ54eLv2ttNCdLf0TtA,3901
101
101
  eodag/utils/logging.py,sha256=KoMsyS1f6O1hr_SMDOIxvt842mOJgmu_yLUk0-0EKFs,3507
@@ -103,11 +103,11 @@ eodag/utils/notebook.py,sha256=AUxtayvu26qYf3x3Eu3ujRl1XDgy24EfQaETbqmXSZw,2703
103
103
  eodag/utils/repr.py,sha256=o6NhScogBPI69m83GsHh3hXONb9-byPfuWgJ1U39Kfw,5463
104
104
  eodag/utils/requests.py,sha256=avNHKrOZ7Kp6lUA7u4kqupIth9MoirLzDsMrrmQDt4s,4560
105
105
  eodag/utils/rest.py,sha256=a9tlG_Y9iQXLeyeLyecxFNbopGHV-8URecMSRs0UXu0,3348
106
- eodag/utils/s3.py,sha256=6utOYNGUmbND0VGarKVerjWHqW3qnendZfZj6CMo1yA,7064
106
+ eodag/utils/s3.py,sha256=2mspYgEYGA1IDbruMMDdJ2DoxyX3riSlV7PDIu7carg,7989
107
107
  eodag/utils/stac_reader.py,sha256=d1tv82_E5dEmK9Vlw3TQfU1ndXg_iUGatxMeWMnIWPo,9236
108
- eodag-3.1.0b2.dist-info/LICENSE,sha256=4MAecetnRTQw5DlHtiikDSzKWO1xVLwzM5_DsPMYlnE,10172
109
- eodag-3.1.0b2.dist-info/METADATA,sha256=VTAGZKeXohgEbieTF-tiN9Xdvqkp_XpChOQrGVNzYEA,15561
110
- eodag-3.1.0b2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
111
- eodag-3.1.0b2.dist-info/entry_points.txt,sha256=krdrBOQso6kAcSekV9ItEYAkE8syTC4Ev75bI781VgE,2561
112
- eodag-3.1.0b2.dist-info/top_level.txt,sha256=025IMTmVe5eDjIPP4KEFQKespOPMQdne4U4jOy8nftM,6
113
- eodag-3.1.0b2.dist-info/RECORD,,
108
+ eodag-3.2.0.dist-info/licenses/LICENSE,sha256=4MAecetnRTQw5DlHtiikDSzKWO1xVLwzM5_DsPMYlnE,10172
109
+ eodag-3.2.0.dist-info/METADATA,sha256=IDnRE0sHZTq6_wB4UCIcScGoRZU1wBkvtjT3RR_oLKA,15476
110
+ eodag-3.2.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
111
+ eodag-3.2.0.dist-info/entry_points.txt,sha256=krdrBOQso6kAcSekV9ItEYAkE8syTC4Ev75bI781VgE,2561
112
+ eodag-3.2.0.dist-info/top_level.txt,sha256=025IMTmVe5eDjIPP4KEFQKespOPMQdne4U4jOy8nftM,6
113
+ eodag-3.2.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5