From: Daniele Varrazzo Date: Fri, 7 Aug 2020 02:58:52 +0000 (+0100) Subject: Dropped Transformer.get_load_function X-Git-Tag: 3.0.dev0~458^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af99eea0d9ea72b18b06a631cb685c692fe2aae2;p=thirdparty%2Fpsycopg.git Dropped Transformer.get_load_function --- diff --git a/psycopg3/psycopg3/proto.py b/psycopg3/psycopg3/proto.py index c54075c47..63c9e62f2 100644 --- a/psycopg3/psycopg3/proto.py +++ b/psycopg3/psycopg3/proto.py @@ -90,7 +90,7 @@ class Transformer(Protocol): ) -> Tuple[Any, ...]: ... - def get_load_function(self, oid: int, format: Format) -> LoadFunc: + def get_loader(self, oid: int, format: Format) -> "Loader": ... def lookup_loader(self, oid: int, format: Format) -> LoaderType: diff --git a/psycopg3/psycopg3/transform.py b/psycopg3/psycopg3/transform.py index 15cf937f6..208871857 100644 --- a/psycopg3/psycopg3/transform.py +++ b/psycopg3/psycopg3/transform.py @@ -17,7 +17,7 @@ from .connection import BaseConnection from .types.oids import builtins, INVALID_OID if TYPE_CHECKING: - from .adapt import Dumper + from .adapt import Dumper, Loader Format = pq.Format TEXT_OID = builtins["text"].oid @@ -43,6 +43,9 @@ class Transformer: # mapping class, fmt -> Dumper instance self._dumpers_cache: Dict[Tuple[type, Format], "Dumper"] = {} + # mapping oid, fmt -> Loader instance + self._loaders_cache: Dict[Tuple[int, Format], "Loader"] = {} + # mapping oid, fmt -> load function self._load_funcs: Dict[Tuple[int, Format], LoadFunc] = {} @@ -125,7 +128,7 @@ class Transformer: for i in range(nf): oid = result.ftype(i) fmt = result.fformat(i) - rc.append(self.get_load_function(oid, fmt)) + rc.append(self.get_loader(oid, fmt).load) @property def dumpers(self) -> DumpersMap: @@ -138,7 +141,7 @@ class Transformer: def set_row_types(self, types: Iterable[Tuple[int, Format]]) -> None: rc = self._row_loaders = [] for oid, fmt in types: - rc.append(self.get_load_function(oid, fmt)) + rc.append(self.get_loader(oid, fmt).load) def get_dumper(self, obj: Any, format: Format) -> "Dumper": key = (type(obj), format) @@ -187,16 +190,16 @@ class Transformer: for i, val in enumerate(record) ) - def get_load_function(self, oid: int, format: Format) -> LoadFunc: + def get_loader(self, oid: int, format: Format) -> "Loader": key = (oid, format) try: - return self._load_funcs[key] + return self._loaders_cache[key] except KeyError: pass - loader = self.lookup_loader(oid, format) - func = self._load_funcs[key] = loader(oid, self).load - return func + 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) diff --git a/psycopg3/psycopg3/types/array.py b/psycopg3/psycopg3/types/array.py index daffd2543..0374ac767 100644 --- a/psycopg3/psycopg3/types/array.py +++ b/psycopg3/psycopg3/types/array.py @@ -183,7 +183,7 @@ class TextArrayLoader(BaseArrayLoader): def load(self, data: bytes) -> List[Any]: rv = None stack: List[Any] = [] - cast = self._tx.get_load_function(self.base_oid, Format.TEXT) + cast = self._tx.get_loader(self.base_oid, Format.TEXT).load for m in self._re_parse.finditer(data): t = m.group(1) @@ -234,7 +234,7 @@ class BinaryArrayLoader(BaseArrayLoader): if not ndims: return [] - fcast = self._tx.get_load_function(oid, Format.BINARY) + fcast = self._tx.get_loader(oid, Format.BINARY).load p = 12 + 8 * ndims dims = [ diff --git a/psycopg3/psycopg3/types/composite.py b/psycopg3/psycopg3/types/composite.py index c6b037ff1..a5a0ee40e 100644 --- a/psycopg3/psycopg3/types/composite.py +++ b/psycopg3/psycopg3/types/composite.py @@ -168,7 +168,7 @@ class BaseCompositeLoader(Loader): @Loader.text(builtins["record"].oid) class RecordLoader(BaseCompositeLoader): def load(self, data: bytes) -> Tuple[Any, ...]: - cast = self._tx.get_load_function(TEXT_OID, format=Format.TEXT) + cast = self._tx.get_loader(TEXT_OID, format=Format.TEXT).load return tuple( cast(token) if token is not None else None for token in self._parse_record(data) diff --git a/psycopg3_c/psycopg3_c/_psycopg3.pyi b/psycopg3_c/psycopg3_c/_psycopg3.pyi index e63060408..5a38e0861 100644 --- a/psycopg3_c/psycopg3_c/_psycopg3.pyi +++ b/psycopg3_c/psycopg3_c/_psycopg3.pyi @@ -10,7 +10,7 @@ information. Will submit a bug. import codecs from typing import Any, Iterable, List, Optional, Sequence, Tuple -from psycopg3.adapt import Dumper +from psycopg3.adapt import Dumper, Loader from psycopg3.proto import AdaptContext, DumpFunc, DumpersMap, DumperType from psycopg3.proto import LoadFunc, LoadersMap, LoaderType, PQGen from psycopg3.connection import BaseConnection @@ -33,13 +33,13 @@ class Transformer: def set_row_types( self, types: Sequence[Tuple[int, pq.Format]] ) -> None: ... - def get_dumper(self, obj: Any, format: pq.Format) -> "Dumper": ... + def get_dumper(self, obj: Any, format: pq.Format) -> Dumper: ... def lookup_dumper(self, src: type, format: pq.Format) -> DumperType: ... def load_row(self, row: int) -> Optional[Tuple[Any, ...]]: ... def load_sequence( self, record: Sequence[Optional[bytes]] ) -> Tuple[Any, ...]: ... - def get_load_function(self, oid: int, format: pq.Format) -> LoadFunc: ... + def get_loader(self, oid: int, format: pq.Format) -> Loader: ... def lookup_loader(self, oid: int, format: pq.Format) -> LoaderType: ... def register_builtin_c_loaders() -> None: ... diff --git a/psycopg3_c/psycopg3_c/transform.pyx b/psycopg3_c/psycopg3_c/transform.pyx index 460e7ac10..f59776068 100644 --- a/psycopg3_c/psycopg3_c/transform.pyx +++ b/psycopg3_c/psycopg3_c/transform.pyx @@ -250,17 +250,6 @@ cdef class Transformer: return tuple(rv) - def get_load_function(self, oid: int, format: Format) -> "LoadFunc": - key = (oid, format) - try: - return self._load_funcs[key] - except KeyError: - pass - - loader = self.lookup_loader(oid, format) - func = self._load_funcs[key] = loader(oid, self).load - return func - def get_loader(self, oid: int, format: Format) -> "Loader": key = (oid, format) try: