from .._typeinfo import TypeInfo
try:
- from shapely.geometry.base import BaseGeometry
+ import shapely
+
except ImportError:
raise ImportError(
"The module psycopg.types.shapely requires the package 'Shapely'"
" to be installed"
)
+from shapely.geometry.base import BaseGeometry
-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]
+shapely_version = tuple(int(s) for s in shapely.__version__.split(".") if s.isdigit())
+
+if shapely_version >= (2, 0):
+ from shapely import from_wkb, to_wkb
+else:
+ from shapely.wkb import dumps as to_wkb # type: ignore[no-redef]
+ from shapely.wkb import loads as from_wkb # type: ignore[no-redef]
class GeometryBinaryLoader(Loader):
format = Format.BINARY
def load(self, data: Buffer) -> BaseGeometry:
- return from_wkb_compat(bytes(data))
+ return from_wkb(bytes(data))
class GeometryLoader(Loader):
def load(self, data: Buffer) -> BaseGeometry:
# it's a hex string in binary
- return from_wkb_compat(bytes(data))
+ return from_wkb(bytes(data))
class BaseGeometryBinaryDumper(Dumper):
format = Format.BINARY
def dump(self, obj: BaseGeometry) -> Buffer | None:
- return to_wkb_compat(obj, include_srid=True)
+ return to_wkb(obj, include_srid=True)
class BaseGeometryDumper(Dumper):
def dump(self, obj: BaseGeometry) -> Buffer | None:
- return to_wkb_compat(obj, True, include_srid=True).encode()
+ return to_wkb(obj, True, include_srid=True).encode()
def register_shapely(info: TypeInfo, context: AdaptContext | None = None) -> None:
from shapely.geometry import MultiPolygon, Point, Polygon
-try:
- from shapely import get_srid, set_srid
-except ImportError:
- # Shapely<2 compatibility, no notion of SRID
- get_srid = None # type: ignore[assignment]
- set_srid = None # type: ignore[assignment]
+from psycopg.types.shapely import register_shapely, shapely_version
-from psycopg.types.shapely import register_shapely
+if shapely_version >= (2, 0):
+ from shapely import get_srid, set_srid
+else:
+ set_srid = get_srid = None # type: ignore[assignment]
pytestmark = [
pytest.mark.postgis,