]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Dropped Transformer.get_load_function
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 7 Aug 2020 02:58:52 +0000 (03:58 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 23 Aug 2020 18:24:02 +0000 (19:24 +0100)
psycopg3/psycopg3/proto.py
psycopg3/psycopg3/transform.py
psycopg3/psycopg3/types/array.py
psycopg3/psycopg3/types/composite.py
psycopg3_c/psycopg3_c/_psycopg3.pyi
psycopg3_c/psycopg3_c/transform.pyx

index c54075c479de8aedc20e55506354e956b9b47672..63c9e62f2a820247485e3c199312a8a5b54f1354 100644 (file)
@@ -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:
index 15cf937f62ac3febdfcc437c7bf5e48d3b64e88e..208871857e5583e3e03d81ccd19837621170cf2d 100644 (file)
@@ -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)
index daffd254392f2f9be43071e0e415b30a6bda655e..0374ac767f8684eb7da853eb158acad310dfcf18 100644 (file)
@@ -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 = [
index c6b037ff139247dd7572ca53876002a9656f84f4..a5a0ee40e72efea1657ff90f4f6c89436e07ec80 100644 (file)
@@ -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)
index e6306040894fdf6306097b8460643deadffa08f6..5a38e08615cf41897b00816a6106a84e9150dbd6 100644 (file)
@@ -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: ...
index 460e7ac100feb3830f1c26f8907dd014a1b391a8..f59776068bda593cce7ea48ac7fd93d045b7db6a 100644 (file)
@@ -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: