From: Kamil Monicz Date: Mon, 24 Mar 2025 11:32:41 +0000 (+0000) Subject: fix(shapely): maintain Shapely < 2 compatibility X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ad7749b916e764b7e218d8ba1ae77ba45a5a32d3;p=thirdparty%2Fpsycopg.git fix(shapely): maintain Shapely < 2 compatibility --- diff --git a/psycopg/psycopg/types/shapely.py b/psycopg/psycopg/types/shapely.py index 1fb48885d..cef953346 100644 --- a/psycopg/psycopg/types/shapely.py +++ b/psycopg/psycopg/types/shapely.py @@ -13,9 +13,7 @@ from ..adapt import Dumper, Loader from .._typeinfo import TypeInfo try: - from shapely import from_wkb, to_wkb from shapely.geometry.base import BaseGeometry - except ImportError: raise ImportError( "The module psycopg.types.shapely requires the package 'Shapely'" @@ -23,29 +21,38 @@ except ImportError: ) +try: + from shapely import from_wkb as from_wkb_compat + from shapely import to_wkb as to_wkb_compat +except ImportError: + # Shapely<2 compatibility + from shapely.wkb import dumps as to_wkb_compat # type: ignore[no-redef] + from shapely.wkb import loads as from_wkb_compat # type: ignore[no-redef] + + class GeometryBinaryLoader(Loader): format = Format.BINARY def load(self, data: Buffer) -> BaseGeometry: - return from_wkb(bytes(data)) + return from_wkb_compat(bytes(data)) class GeometryLoader(Loader): def load(self, data: Buffer) -> BaseGeometry: # it's a hex string in binary - return from_wkb(bytes(data)) + return from_wkb_compat(bytes(data)) class BaseGeometryBinaryDumper(Dumper): format = Format.BINARY def dump(self, obj: BaseGeometry) -> Buffer | None: - return to_wkb(obj, include_srid=True) + return to_wkb_compat(obj, include_srid=True) class BaseGeometryDumper(Dumper): def dump(self, obj: BaseGeometry) -> Buffer | None: - return to_wkb(obj, True, include_srid=True).encode() + return to_wkb_compat(obj, True, include_srid=True).encode() def register_shapely(info: TypeInfo, context: AdaptContext | None = None) -> None: