From: Daniele Varrazzo Date: Fri, 7 Aug 2020 03:14:33 +0000 (+0100) Subject: Transformer._lookup_dumper/loader dropped altogether X-Git-Tag: 3.0.dev0~458^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8746a196d927882be1df84bb977778431c31a4e;p=thirdparty%2Fpsycopg.git Transformer._lookup_dumper/loader dropped altogether --- diff --git a/psycopg3/psycopg3/transform.py b/psycopg3/psycopg3/transform.py index f0b5cf76c..83593e866 100644 --- a/psycopg3/psycopg3/transform.py +++ b/psycopg3/psycopg3/transform.py @@ -10,8 +10,8 @@ from typing import TYPE_CHECKING from . import errors as e from . import pq -from .proto import AdaptContext, DumpersMap, DumperType -from .proto import LoadFunc, LoadersMap, LoaderType +from .proto import AdaptContext, DumpersMap +from .proto import LoadFunc, LoadersMap from .cursor import BaseCursor from .connection import BaseConnection from .types.oids import builtins, INVALID_OID @@ -150,19 +150,18 @@ class Transformer: except KeyError: pass - dumper_cls = self._lookup_dumper(*key) - self._dumpers_cache[key] = dumper = dumper_cls(key[0], self) - return dumper - - def _lookup_dumper(self, src: type, format: Format) -> DumperType: - key = (src, format) for amap in self._dumpers_maps: if key in amap: - return amap[key] + dumper_cls = amap[key] + break + else: + raise e.ProgrammingError( + f"cannot adapt type {type(obj).__name__}" + f" to format {Format(format).name}" + ) - raise e.ProgrammingError( - f"cannot adapt type {src.__name__} to format {Format(format).name}" - ) + self._dumpers_cache[key] = dumper = dumper_cls(key[0], self) + return dumper def load_row(self, row: int) -> Optional[Tuple[Any, ...]]: res = self.pgresult @@ -197,17 +196,14 @@ class Transformer: except KeyError: pass - loader_cls = self._lookup_loader(*key) - self._loaders_cache[key] = loader = loader_cls(key[0], self) - return loader - - def _lookup_loader(self, oid: int, format: Format) -> LoaderType: - key = (oid, format) - for tcmap in self._loaders_maps: if key in tcmap: - return tcmap[key] + loader_cls = tcmap[key] + break + else: + from .adapt import Loader # noqa - from .adapt import Loader + loader_cls = Loader.globals[INVALID_OID, format] - return Loader.globals[INVALID_OID, format] + self._loaders_cache[key] = loader = loader_cls(key[0], self) + return loader diff --git a/psycopg3_c/psycopg3_c/transform.pyx b/psycopg3_c/psycopg3_c/transform.pyx index bc656c12b..ca5a711da 100644 --- a/psycopg3_c/psycopg3_c/transform.pyx +++ b/psycopg3_c/psycopg3_c/transform.pyx @@ -184,19 +184,18 @@ cdef class Transformer: except KeyError: pass - dumper_cls = self._lookup_dumper(*key) - self._dumpers_cache[key] = dumper = dumper_cls(key[0], self) - return dumper - - def _lookup_dumper(self, src: type, format: Format) -> "DumperType": - key = (src, format) for amap in self._dumpers_maps: if key in amap: - return amap[key] + dumper_cls = amap[key] + break + else: + raise e.ProgrammingError( + f"cannot adapt type {type(obj).__name__}" + f" to format {Format(format).name}" + ) - raise e.ProgrammingError( - f"cannot adapt type {src.__name__} to format {Format(format).name}" - ) + self._dumpers_cache[key] = dumper = dumper_cls(key[0], self) + return dumper def load_row(self, row: int) -> Optional[Tuple[Any, ...]]: if self._pgresult is None: @@ -257,17 +256,13 @@ cdef class Transformer: except KeyError: pass - loader_cls = self._lookup_loader(*key) - self._loaders_cache[key] = loader = loader_cls(key[0], self) - return loader - - def _lookup_loader(self, oid: int, format: Format) -> "LoaderType": - key = (oid, format) - for tcmap in self._loaders_maps: if key in tcmap: - return tcmap[key] - - from psycopg3.adapt import Loader + loader_cls = tcmap[key] + break + else: + from psycopg3.adapt import Loader + loader_cls = Loader.globals[0, format] # INVALID_OID - return Loader.globals[0, format] # INVALID_OID + self._loaders_cache[key] = loader = loader_cls(key[0], self) + return loader