From: Daniele Varrazzo Date: Tue, 21 Sep 2021 16:09:23 +0000 (+0100) Subject: Use class instead of type to create shapely dumpers X-Git-Tag: 3.0~71^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=78daada341e17ad408f2856ac2377ce921ddc923;p=thirdparty%2Fpsycopg.git Use class instead of type to create shapely dumpers --- diff --git a/psycopg/psycopg/types/shapely.py b/psycopg/psycopg/types/shapely.py index 2686a6e74..e17fbbde6 100644 --- a/psycopg/psycopg/types/shapely.py +++ b/psycopg/psycopg/types/shapely.py @@ -2,7 +2,7 @@ Adapters for PostGIS geometries """ -from typing import Optional, Type +from typing import Optional from .. import postgres from ..abc import AdaptContext, Buffer @@ -32,8 +32,6 @@ class GeometryBinaryLoader(Loader): class GeometryLoader(Loader): - format = Format.TEXT - def load(self, data: Buffer) -> "BaseGeometry": # it's a hex string in binary if isinstance(data, memoryview): @@ -41,16 +39,14 @@ class GeometryLoader(Loader): return loads(data.decode(), hex=True) -class GeometryBinaryDumper(Dumper): +class BaseGeometryBinaryDumper(Dumper): format = Format.BINARY def dump(self, obj: "BaseGeometry") -> bytes: return dumps(obj) # type: ignore -class GeometryDumper(Dumper): - format = Format.TEXT - +class BaseGeometryDumper(Dumper): def dump(self, obj: "BaseGeometry") -> bytes: return dumps(obj, hex=True).encode() # type: ignore @@ -81,15 +77,15 @@ def register_shapely( info.register(context) adapters = context.adapters if context else postgres.adapters - # Generate and register the text and binary dumper - binary_dumper: Type[GeometryBinaryDumper] = type( - "GeometryBinaryDumper", (GeometryBinaryDumper,), {"oid": info.oid} - ) - dumper: Type[GeometryDumper] = type( - "GeometryDumper", (GeometryDumper,), {"oid": info.oid} - ) + + class GeometryDumper(BaseGeometryDumper): + oid = info.oid + + class GeometryBinaryDumper(BaseGeometryBinaryDumper): + oid = info.oid adapters.register_loader(info.oid, GeometryBinaryLoader) adapters.register_loader(info.oid, GeometryLoader) - adapters.register_dumper(BaseGeometry, dumper) - adapters.register_dumper(BaseGeometry, binary_dumper) + # Default binary dump + adapters.register_dumper(BaseGeometry, GeometryDumper) + adapters.register_dumper(BaseGeometry, GeometryBinaryDumper)