[Git][debian-gis-team/eodag][master] 7 commits: New upstream version 3.10.2+ds

Antonio Valentino (@antonio.valentino) gitlab at salsa.debian.org
Sat Mar 14 10:17:28 GMT 2026



Antonio Valentino pushed to branch master at Debian GIS Project / eodag


Commits:
a6926a70 by Antonio Valentino at 2026-03-14T09:55:01+00:00
New upstream version 3.10.2+ds
- - - - -
71363ec3 by Antonio Valentino at 2026-03-14T09:55:07+00:00
Update upstream source from tag 'upstream/3.10.2+ds'

Update to upstream version '3.10.2+ds'
with Debian dir 4701ac989f28124d1e023664171f6be13f5e77fa
- - - - -
420c97a5 by Antonio Valentino at 2026-03-14T09:55:57+00:00
New usptream release

- - - - -
948f4a34 by Antonio Valentino at 2026-03-14T10:05:46+00:00
Refresh all patches

- - - - -
a745d202 by Antonio Valentino at 2026-03-14T10:06:36+00:00
Update dates in d/copyright

- - - - -
f131c777 by Antonio Valentino at 2026-03-14T10:12:36+00:00
Update d/watch to exclude beta versions

- - - - -
20750477 by Antonio Valentino at 2026-03-14T10:12:36+00:00
Set distribution to unstable

- - - - -


23 changed files:

- CHANGES.rst
- Dockerfile
- README.rst
- charts/eodag-server/Chart.yaml
- debian/changelog
- debian/copyright
- debian/patches/0002-System-importlib.metadata.patch
- debian/watch
- docs/conf.py
- docs/stac_rest.rst
- eodag/api/product/_product.py
- eodag/api/product/drivers/__init__.py
- eodag/api/product/drivers/base.py
- eodag/config.py
- eodag/plugins/crunch/filter_latest_intersect.py
- eodag/plugins/download/http.py
- eodag/plugins/search/qssearch.py
- eodag/rest/types/stac_search.py
- eodag/types/__init__.py
- eodag/types/download_args.py
- eodag/utils/__init__.py
- pyproject.toml
- setup.cfg


Changes:

=====================================
CHANGES.rst
=====================================
@@ -4,6 +4,49 @@ Release history
 
 .. _changelog-unreleased:
 
+v3.10.2 (2026-03-12)
+====================
+
+Bug Fixes
+---------
+
+* **core**: Jsonpath-ng 1.8.0 Index indices (`#2059`_, `71bada7`_)
+
+* **core**: Make get_quicklook return empty str on error (`#2063`_, `498fcb7`_)
+
+* **core**: TypedDict from typing_extensions required by pydantic (`#1986`_, `a39b473`_)
+
+* **crunch**: Filter_latest_intersect used geometry (`#2030`_, `baa6d39`_)
+
+* **download**: Wrong filename with dl_url_params (`#2064`_, `ebf5172`_)
+
+* **plugins**: Delete download link when order not finish (`#1952`_, `d842f62`_)
+
+Build System
+------------
+
+* Avoid jsonpath-ng 1.8.0 which breaks assets parsing (`#2078`_, `6f930cc`_)
+
+* Bump alpine version on Dockerfile to prevent certificate error on geodes (`#2004`_, `bdc6b86`_)
+
+.. _#1952: https://github.com/CS-SI/eodag/pull/1952
+.. _#1986: https://github.com/CS-SI/eodag/pull/1986
+.. _#2004: https://github.com/CS-SI/eodag/pull/2004
+.. _#2030: https://github.com/CS-SI/eodag/pull/2030
+.. _#2059: https://github.com/CS-SI/eodag/pull/2059
+.. _#2063: https://github.com/CS-SI/eodag/pull/2063
+.. _#2064: https://github.com/CS-SI/eodag/pull/2064
+.. _#2078: https://github.com/CS-SI/eodag/pull/2078
+.. _498fcb7: https://github.com/CS-SI/eodag/commit/498fcb78bdc262804a78ce1edc3da2b259b94276
+.. _6f930cc: https://github.com/CS-SI/eodag/commit/6f930cc5545cf2733c1dee1f70025207c2a1f0aa
+.. _71bada7: https://github.com/CS-SI/eodag/commit/71bada72f62910e217e0b49174c271f9962a8ad3
+.. _a39b473: https://github.com/CS-SI/eodag/commit/a39b4739c6efbdf36d1546a2740340a1587a407c
+.. _baa6d39: https://github.com/CS-SI/eodag/commit/baa6d39d665236688b8b0b262b3c13d7bc436d90
+.. _bdc6b86: https://github.com/CS-SI/eodag/commit/bdc6b861c8fc9ea8901a1813b04600ebd865f416
+.. _d842f62: https://github.com/CS-SI/eodag/commit/d842f6295840ddf21b3940f926197447013426f2
+.. _ebf5172: https://github.com/CS-SI/eodag/commit/ebf51725920d44df758d9cb0c99e33d586481236
+
+
 v3.10.1 (2025-12-11)
 ====================
 


=====================================
Dockerfile
=====================================
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM python:alpine3.13
+FROM python:alpine3.23
 
 LABEL author="CS GROUP - France"
 


=====================================
README.rst
=====================================
@@ -185,7 +185,7 @@ An eodag instance can be exposed through a STAC compliant REST api from the comm
 
 .. code-block:: bash
 
-    docker run -p 5000:5000 --rm csspace/eodag-server:3.10.1
+    docker run -p 5000:5000 --rm csspace/eodag-server:3.10.2
 
 You can also browse over your STAC API server using `STAC Browser <https://github.com/radiantearth/stac-browser>`_.
 Simply run:


=====================================
charts/eodag-server/Chart.yaml
=====================================
@@ -1,5 +1,5 @@
 apiVersion: v2
-appVersion: 3.10.1
+appVersion: 3.10.2
 dependencies:
 - name: common
   repository:  oci://registry-1.docker.io/bitnamicharts
@@ -15,4 +15,4 @@ name: eodag-server
 sources:
 - https://github.com/CS-SI/eodag
 type: application
-version: 3.10.1
+version: 3.10.2


=====================================
debian/changelog
=====================================
@@ -1,10 +1,17 @@
-eodag (3.10.1+ds-2) UNRELEASED; urgency=medium
+eodag (3.10.2+ds-1) unstable; urgency=medium
 
-  * Team upload.
+  [ Bas Couwenberg ]
   * Drop Priority: optional, default since dpkg 1.22.13.
   * Bump Standards-Version to 4.7.3, changes: priority.
 
- -- Bas Couwenberg <sebastic at debian.org>  Sat, 03 Jan 2026 13:55:57 +0100
+  [ Antonio Valentino ]
+  * New upstream release.
+  * debian/patches:
+    - Reftesh all patches.
+  * Update dates in d/copyright.
+  * Updaet d/watch to exclude beta versions.
+
+ -- Antonio Valentino <antonio.valentino at tiscali.it>  Sat, 14 Mar 2026 10:07:46 +0000
 
 eodag (3.10.1+ds-1) unstable; urgency=medium
 


=====================================
debian/copyright
=====================================
@@ -21,7 +21,7 @@ Copyright: Broadcom, Inc.
 License: Apache-2.0
 
 Files: debian/*
-Copyright: 2024-2025 Antonio Valentino <antonio.valentino at tiscali.it>
+Copyright: 2024-2026, Antonio Valentino <antonio.valentino at tiscali.it>
 License: Apache-2.0
 
 License: Apache-2.0


=====================================
debian/patches/0002-System-importlib.metadata.patch
=====================================
@@ -5,10 +5,10 @@ Subject: System importlib.metadata
 Forwarded: https://github.com/CS-SI/eodag/pull/1814
 ---
  eodag/plugins/manager.py   | 4 ++--
- setup.cfg                  | 1 -
+ setup.cfg                  | 2 --
  tests/test_requirements.py | 4 ++--
  tests/units/test_core.py   | 2 +-
- 4 files changed, 5 insertions(+), 6 deletions(-)
+ 4 files changed, 5 insertions(+), 7 deletions(-)
 
 diff --git a/eodag/plugins/manager.py b/eodag/plugins/manager.py
 index f66b5f9..1049af9 100644
@@ -33,15 +33,16 @@ index f66b5f9..1049af9 100644
              ):
                  try:
 diff --git a/setup.cfg b/setup.cfg
-index eb29656..48433ae 100644
+index 7f1a585..f75bf93 100644
 --- a/setup.cfg
 +++ b/setup.cfg
-@@ -44,7 +44,6 @@ install_requires =
+@@ -44,8 +44,6 @@ install_requires =
      botocore
      click
      geojson
 -    importlib_metadata >= 5.0
-     jsonpath-ng
+-    # temporarily pinned, see https://github.com/h2non/jsonpath-ng/issues/216
+     jsonpath-ng < 1.8.0
      lxml
      orjson
 diff --git a/tests/test_requirements.py b/tests/test_requirements.py


=====================================
debian/watch
=====================================
@@ -6,4 +6,4 @@ uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|c|beta|b|alpha|a)\d*)$/$1~$2/;s/R
 filenamemangle=s/(?:.*?)?(?:rel|v|@PACKAGE@)?[\-\_]?(\d\S*)\.(tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))/@PACKAGE at -$1.$2/,\
 repacksuffix=+ds \
 https://github.com/CS-SI/eodag/tags \
-(?:.*?/archive/(?:.*?/)?)?(?:rel|v|@PACKAGE@)?[\-\_]?(\d\S*(?<!post\d)(?<!dev\d)(?<!a\d))\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
+(?:.*?/archive/(?:.*?/)?)?(?:rel|v|@PACKAGE@)?[\-\_]?(\d\S*(?<!post\d)(?<!dev\d)(?<!b\d)(?<!a\d))\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))


=====================================
docs/conf.py
=====================================
@@ -25,9 +25,16 @@ from datetime import datetime
 from importlib.metadata import metadata
 from typing import Any
 
+# Make JsonValue resolvable in pydantic.fields for sphinx_autodoc_typehints:
+# JsonDict (used in Field annotations) contains a forward reference to JsonValue
+# that isn't in the pydantic.fields namespace.
+import pydantic.fields
 from docutils import nodes
+from pydantic import JsonValue
 from sphinx.writers.html import HTMLTranslator
 
+pydantic.fields.JsonValue = JsonValue
+
 # -- General configuration ------------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.


=====================================
docs/stac_rest.rst
=====================================
@@ -99,7 +99,7 @@ available on `https://hub.docker.com/r/csspace/eodag-server <https://hub.docker.
 
 .. code-block:: bash
 
-    $ docker run -p 5000:5000 --rm csspace/eodag-server:3.10.1
+    $ docker run -p 5000:5000 --rm csspace/eodag-server:3.10.2
 
 Example
 -------


=====================================
eodag/api/product/_product.py
=====================================
@@ -557,7 +557,7 @@ class EOProduct:
                         f"Failed to get resource with authentication: {e} \n \
                         Failed to get resource even without authentication. {e_no_auth}"
                     )
-                    return str(e)
+                    return ""
 
             # close progress bar if needed
             if close_progress_callback:


=====================================
eodag/api/product/drivers/__init__.py
=====================================
@@ -18,7 +18,9 @@
 """EODAG drivers package"""
 from __future__ import annotations
 
-from typing import Callable, TypedDict
+from typing import Callable
+
+from typing_extensions import TypedDict
 
 from eodag.api.product.drivers.base import DatasetDriver, NoDriver
 from eodag.api.product.drivers.generic import GenericDriver


=====================================
eodag/api/product/drivers/base.py
=====================================
@@ -19,7 +19,9 @@ from __future__ import annotations
 
 import logging
 import re
-from typing import TYPE_CHECKING, Optional, TypedDict
+from typing import TYPE_CHECKING, Optional
+
+from typing_extensions import TypedDict
 
 from eodag.utils import _deprecated
 


=====================================
eodag/config.py
=====================================
@@ -29,7 +29,6 @@ from typing import (
     Iterator,
     Literal,
     Optional,
-    TypedDict,
     Union,
     ValuesView,
     get_type_hints,
@@ -42,6 +41,7 @@ import yaml.constructor
 import yaml.parser
 from annotated_types import Gt
 from jsonpath_ng import JSONPath
+from typing_extensions import TypedDict
 
 from eodag.api.product.metadata_mapping import mtd_cfg_as_conversion_and_querypath
 from eodag.utils import (


=====================================
eodag/plugins/crunch/filter_latest_intersect.py
=====================================
@@ -20,13 +20,14 @@ from __future__ import annotations
 import datetime
 import logging
 import time
-from typing import TYPE_CHECKING, Any, Union
+from typing import TYPE_CHECKING, Any, Optional, Union
 
 import dateutil.parser
-from shapely import geometry
+from shapely.errors import ShapelyError
 from shapely.geometry.base import BaseGeometry
 
 from eodag.plugins.crunch.base import Crunch
+from eodag.utils import get_geometry_from_various
 
 if TYPE_CHECKING:
     from datetime import datetime as dt
@@ -70,7 +71,7 @@ class FilterLatestIntersect(Crunch):
         # Warning: May crash if startTimeFromAscendingNode is not in the appropriate format
         products.sort(key=self.sort_product_by_start_date, reverse=True)
         filtered: list[EOProduct] = []
-        search_extent: BaseGeometry
+        search_extent: Optional[BaseGeometry]
         add_to_filtered = filtered.append
         footprint: Union[dict[str, Any], BaseGeometry, Any] = search_params.get(
             "geometry"
@@ -80,24 +81,25 @@ class FilterLatestIntersect(Crunch):
                 "geometry not found in cruncher arguments, filtering disabled."
             )
             return products
-        elif isinstance(footprint, dict):
-            search_extent = geometry.box(
-                footprint["lonmin"],
-                footprint["latmin"],
-                footprint["lonmax"],
-                footprint["latmax"],
-            )
-        elif not isinstance(footprint, BaseGeometry):
+        try:
+            search_extent = get_geometry_from_various(geometry=footprint)
+        except (ShapelyError, TypeError):
             logger.warning(
                 "geometry found in cruncher arguments did not match the expected format."
             )
             return products
-        else:
-            search_extent = footprint
+        if search_extent is None:
+            logger.warning("Could not build geometry from cruncher arguments")
+            return products
+
         logger.debug("Initial requested extent area: %s", search_extent.area)
         for product in products:
             logger.debug("Uncovered extent area: %s", search_extent.area)
-            if product.search_intersection:
+            try:
+                search_intersection = product.geometry.intersection(search_extent)
+            except ShapelyError:
+                search_intersection = None
+            if search_intersection:
                 logger.debug(
                     "Product %r intersects the requested extent. Adding it to the final result",
                     product,


=====================================
eodag/plugins/download/http.py
=====================================
@@ -27,16 +27,7 @@ from email.message import Message
 from itertools import chain
 from json import JSONDecodeError
 from pathlib import Path
-from typing import (
-    TYPE_CHECKING,
-    Any,
-    Iterator,
-    Literal,
-    Optional,
-    TypedDict,
-    Union,
-    cast,
-)
+from typing import TYPE_CHECKING, Any, Iterator, Literal, Optional, Union, cast
 from urllib.parse import parse_qs, urlparse
 
 import geojson
@@ -45,6 +36,7 @@ from lxml import etree
 from requests import RequestException
 from requests.auth import AuthBase
 from requests.structures import CaseInsensitiveDict
+from typing_extensions import TypedDict
 from zipstream import ZipStream
 
 from eodag.api.product.metadata_mapping import (
@@ -473,6 +465,8 @@ class HTTPDownload(Download):
         if (success_status and success_status != status_dict.get("status")) or (
             success_code and success_code != response.status_code
         ):
+            # Remove the download link if the order has not been completed or was not successful
+            product.properties.pop("downloadLink", None)
             return None
 
         product.properties["storageStatus"] = ONLINE_STATUS
@@ -744,6 +738,11 @@ class HTTPDownload(Download):
         if not filename:
             # default filename extracted from path
             filename = str(os.path.basename(self.stream.url))
+
+            # remove http get params and anchors
+            filename = filename.split("?")[0]
+            filename = filename.split("#")[0]
+
             filename_extension = os.path.splitext(filename)[1]
             if not filename_extension:
                 if content_type := getattr(product, "headers", {}).get("Content-Type"):


=====================================
eodag/plugins/search/qssearch.py
=====================================
@@ -28,7 +28,6 @@ from typing import (
     Callable,
     Optional,
     Sequence,
-    TypedDict,
     cast,
     get_args,
 )
@@ -57,6 +56,7 @@ from pydantic.fields import FieldInfo
 from requests import Response
 from requests.adapters import HTTPAdapter
 from requests.auth import AuthBase
+from typing_extensions import TypedDict
 from urllib3 import Retry
 
 from eodag.api.product import EOProduct


=====================================
eodag/rest/types/stac_search.py
=====================================
@@ -19,7 +19,7 @@
 
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Annotated, Any, Literal, Optional, Union
+from typing import TYPE_CHECKING, Annotated, Any, Literal, Optional, Union, cast
 
 import geojson
 from pydantic import (
@@ -174,7 +174,7 @@ class SearchPostRequest(BaseModel):
             return v
 
         if isinstance(v, dict) and v.get("type") in GEOMETRY_TYPES:  # type: ignore
-            return shape(v)
+            return cast(Geometry, shape(v))
 
         raise ValueError("Not a valid geometry")
 


=====================================
eodag/types/__init__.py
=====================================
@@ -19,17 +19,7 @@
 
 from __future__ import annotations
 
-from typing import (
-    Annotated,
-    Any,
-    Literal,
-    Optional,
-    Type,
-    TypedDict,
-    Union,
-    get_args,
-    get_origin,
-)
+from typing import Annotated, Any, Literal, Optional, Type, Union, get_args, get_origin
 
 from annotated_types import Gt, Lt
 from pydantic import BaseModel, ConfigDict, Field, create_model
@@ -37,6 +27,7 @@ from pydantic.annotated_handlers import GetJsonSchemaHandler
 from pydantic.fields import FieldInfo
 from pydantic.json_schema import JsonSchemaValue
 from pydantic_core import CoreSchema, PydanticUndefined
+from typing_extensions import TypedDict
 
 from eodag.utils import copy_deepcopy
 from eodag.utils.exceptions import ValidationError


=====================================
eodag/types/download_args.py
=====================================
@@ -17,7 +17,9 @@
 # limitations under the License.
 from __future__ import annotations
 
-from typing import Optional, TypedDict, Union
+from typing import Optional, Union
+
+from typing_extensions import TypedDict
 
 
 class DownloadConf(TypedDict, total=False):


=====================================
eodag/utils/__init__.py
=====================================
@@ -905,12 +905,15 @@ def string_to_jsonpath(*args: Any, force: bool = False) -> Union[str, JSONPath]:
     Child(Child(Root(), Fields('foo')), Fields('bar'))
     >>> string_to_jsonpath("$.foo.bar")
     Child(Child(Root(), Fields('foo')), Fields('bar'))
-    >>> string_to_jsonpath('$.foo[0][*]')
-    Child(Child(Child(Root(), Fields('foo')), Index(index=0)), Slice(start=None,end=None,step=None))
     >>> string_to_jsonpath("foo")
     'foo'
     >>> string_to_jsonpath("foo", force=True)
     Fields('foo')
+    >>> string_to_jsonpath('$.foo[0][*]') == Child(
+    ...     Child(Child(Root(), Fields('foo')), Index(0)),
+    ...     Slice(start=None, end=None, step=None),
+    ... )
+    True
 
     :param args: Last arg as input string value, to be converted
     :param force: force conversion even if input string is not detected as a :class:`jsonpath_ng.JSONPath`
@@ -956,7 +959,7 @@ def string_to_jsonpath(*args: Any, force: bool = False) -> Union[str, JSONPath]:
                             # integer index
                             parsed_path = Child(
                                 parsed_path,
-                                Index(index=index),
+                                Index(index),
                             )
                     elif "[" in path_split:
                         # unsupported array field
@@ -1061,7 +1064,9 @@ def get_geometry_from_various(
     :param locations_config: (optional) EODAG locations configuration
     :param query_args: Query kwargs arguments from :meth:`~eodag.api.core.EODataAccessGateway.search`
     :returns: shapely Geometry found
-    :raises: :class:`ValueError`
+    :raises shapely.errors.ShapelyError: Error while creating shapely geometry
+    :raises TypeError: Unexpected geometry type
+    :raises ValueError: Location name is wrong or its value does not match
     """
     geom = None
 


=====================================
pyproject.toml
=====================================
@@ -3,7 +3,7 @@ requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]
 build-backend = "setuptools.build_meta"
 
 [tool.setuptools_scm]
-fallback_version = "3.10.2.dev0"
+fallback_version = "3.10.3.dev0"
 
 [tool.coverage.report]
 exclude_lines = [


=====================================
setup.cfg
=====================================
@@ -45,7 +45,8 @@ install_requires =
     click
     geojson
     importlib_metadata >= 5.0
-    jsonpath-ng
+    # temporarily pinned, see https://github.com/h2non/jsonpath-ng/issues/216
+    jsonpath-ng < 1.8.0
     lxml
     orjson
     pydantic >= 2.1.0, != 2.10.0



View it on GitLab: https://salsa.debian.org/debian-gis-team/eodag/-/compare/0fdb9025fa43eeb8eac80057f298c70be2c7e700...20750477250cc1b7119c5bedfd88af399d004109

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/eodag/-/compare/0fdb9025fa43eeb8eac80057f298c70be2c7e700...20750477250cc1b7119c5bedfd88af399d004109
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20260314/6859cdef/attachment-0001.htm>


More information about the Pkg-grass-devel mailing list