]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Dropped support for loader functions
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 6 Aug 2020 18:52:44 +0000 (19:52 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 23 Aug 2020 18:24:02 +0000 (19:24 +0100)
psycopg3/psycopg3/adapt.py
psycopg3/psycopg3/proto.py
psycopg3/psycopg3/transform.py
psycopg3_c/psycopg3_c/transform.pyx
tests/test_adapt.py

index 89429ac3a341b59d48092d88e77a3bac5d06cd98..9339635248bb2c994d6954b05c51346802e37696 100644 (file)
@@ -103,13 +103,9 @@ class Loader:
                 f"typeloaders should be registered on oid, got {oid} instead"
             )
 
-        if not (
-            callable(loader)
-            or (isinstance(loader, type) and issubclass(loader, Loader))
-        ):
+        if not (isinstance(loader, type) and issubclass(loader, Loader)):
             raise TypeError(
-                f"dumpers should be callable or Loader subclasses,"
-                f" got {loader} instead"
+                f"dumpers should be Loader subclasses, got {loader} instead"
             )
 
         where = context.loaders if context is not None else Loader.globals
index d46eab0ee667a0bbb81ca71e2bf615f79e5486af..84601a4f7d125e621f04df8be80fa08007179850 100644 (file)
@@ -41,7 +41,7 @@ DumperType = Type["Dumper"]
 DumpersMap = Dict[Tuple[type, Format], DumperType]
 
 LoadFunc = Callable[[bytes], Any]
-LoaderType = Union[Type["Loader"], LoadFunc]
+LoaderType = Type["Loader"]
 LoadersMap = Dict[Tuple[int, Format], LoaderType]
 
 
index e3f96dcae8af2e0c1465c379431d0f4c86ebc12c..5d101fa9514e86d62dbaa25c719d6a0b0efd09de 100644 (file)
@@ -204,13 +204,7 @@ class Transformer:
             pass
 
         loader = self.lookup_loader(oid, format)
-        func: LoadFunc
-        if isinstance(loader, type):
-            func = loader(oid, self).load
-        else:
-            func = loader
-
-        self._load_funcs[key] = func
+        func = self._load_funcs[key] = loader(oid, self).load
         return func
 
     def lookup_loader(self, oid: int, format: Format) -> LoaderType:
index d83eda46089794316f6809f9673557f4d1d34f17..a5e3cb2501e3e13445f8518a7a392102f39b7eab 100644 (file)
@@ -307,13 +307,7 @@ cdef class Transformer:
             pass
 
         loader = self.lookup_loader(oid, format)
-        func: "LoadFunc"
-        if isinstance(loader, type):
-            func = loader(oid, self).load
-        else:
-            func = loader
-
-        self._load_funcs[key] = func
+        func = self._load_funcs[key] = loader(oid, self).load
         return func
 
     def lookup_loader(self, oid: int, format: Format) -> "LoaderType":
index 940e025370fc7e03b8ef5e639f75fb93de6f8280..5f01a97c45f53b39915fddb86db3a8a7667c9023 100644 (file)
@@ -20,16 +20,6 @@ def test_dump(data, format, result, type):
     assert dumper.oid == builtins[type].oid
 
 
-def make_dumper(suffix):
-    """Create a test dumper appending a suffix to the bytes representation."""
-
-    class TestDumper(Dumper):
-        def dump(self, s):
-            return (s + suffix).encode("ascii")
-
-    return TestDumper
-
-
 def test_dump_connection_ctx(conn):
     Dumper.register(str, make_dumper("t"), conn)
     Dumper.register_binary(str, make_dumper("b"), conn)
@@ -72,8 +62,8 @@ def test_cast(data, format, type, result):
 
 
 def test_load_connection_ctx(conn):
-    Loader.register(TEXT_OID, lambda b: b.decode("ascii") + "t", conn)
-    Loader.register_binary(TEXT_OID, lambda b: b.decode("ascii") + "b", conn)
+    Loader.register(TEXT_OID, make_loader("t"), conn)
+    Loader.register_binary(TEXT_OID, make_loader("b"), conn)
 
     r = conn.cursor().execute("select 'hello'::text").fetchone()
     assert r == ("hellot",)
@@ -82,12 +72,12 @@ def test_load_connection_ctx(conn):
 
 
 def test_load_cursor_ctx(conn):
-    Loader.register(TEXT_OID, lambda b: b.decode("ascii") + "t", conn)
-    Loader.register_binary(TEXT_OID, lambda b: b.decode("ascii") + "b", conn)
+    Loader.register(TEXT_OID, make_loader("t"), conn)
+    Loader.register_binary(TEXT_OID, make_loader("b"), conn)
 
     cur = conn.cursor()
-    Loader.register(TEXT_OID, lambda b: b.decode("ascii") + "tc", cur)
-    Loader.register_binary(TEXT_OID, lambda b: b.decode("ascii") + "bc", cur)
+    Loader.register(TEXT_OID, make_loader("tc"), cur)
+    Loader.register_binary(TEXT_OID, make_loader("bc"), cur)
 
     r = cur.execute("select 'hello'::text").fetchone()
     assert r == ("hellotc",)
@@ -110,9 +100,27 @@ def test_load_cursor_ctx(conn):
 @pytest.mark.parametrize("fmt_out", [Format.TEXT, Format.BINARY])
 def test_load_cursor_ctx_nested(conn, sql, obj, fmt_out):
     cur = conn.cursor(format=fmt_out)
-    Loader.register(
-        TEXT_OID, lambda b: b.decode("ascii") + "c", cur, format=fmt_out
-    )
+    Loader.register(TEXT_OID, make_loader("c"), cur, format=fmt_out)
     cur.execute(f"select {sql}")
     res = cur.fetchone()[0]
     assert res == obj
+
+
+def make_dumper(suffix):
+    """Create a test dumper appending a suffix to the bytes representation."""
+
+    class TestDumper(Dumper):
+        def dump(self, s):
+            return (s + suffix).encode("ascii")
+
+    return TestDumper
+
+
+def make_loader(suffix):
+    """Create a test loader appending a suffix to the data returned."""
+
+    class TestLoader(Loader):
+        def load(self, b):
+            return b.decode("ascii") + suffix
+
+    return TestLoader