]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
fix(shapely): maintain Shapely < 2 compatibility
authorKamil Monicz <kamil@monicz.dev>
Mon, 24 Mar 2025 11:32:41 +0000 (11:32 +0000)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 26 Mar 2025 18:27:20 +0000 (19:27 +0100)
psycopg/psycopg/types/shapely.py

index bce1c24907cec577449d676ed688f28795102d8a..b8e287b1179c94a8780f5d8f95675b16eb8d4389 100644 (file)
@@ -12,9 +12,7 @@ from .._compat import cache
 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'"
@@ -22,29 +20,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: