]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Use the right class instantiating a dumper on a subclass
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 21 Nov 2020 23:07:31 +0000 (23:07 +0000)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 21 Nov 2020 23:07:31 +0000 (23:07 +0000)
psycopg3/psycopg3/_transform.py
psycopg3_c/psycopg3_c/transform.pyx

index 8599ca73fc826b5410fc3b251d3f0da8d484ce81..0ac2b089356818925d27e3c9270a23266d0122ef 100644 (file)
@@ -156,12 +156,13 @@ class Transformer:
         # able to adapt its subtypes, otherwise Liskov is sad.
         for dmap in self._dumpers_maps:
             for scls in cls.__mro__:
-                key = (scls, format)
-                dumper_class = dmap.get(key)
+                dumper_class = dmap.get((scls, format))
                 if not dumper_class:
                     continue
 
-                self._dumpers_cache[key] = dumper = dumper_class(scls, self)
+                self._dumpers_cache[cls, format] = dumper = dumper_class(
+                    cls, self
+                )
                 return dumper
 
         # If the adapter is not found, look for its name as a string
@@ -172,9 +173,9 @@ class Transformer:
                 if dumper_class is None:
                     continue
 
-                key = (scls, format)
+                key = (cls, format)
                 dmap[key] = dumper_class
-                self._dumpers_cache[key] = dumper = dumper_class(scls, self)
+                self._dumpers_cache[key] = dumper = dumper_class(cls, self)
                 return dumper
 
         raise e.ProgrammingError(
index 311a04da0789908b6c1e3dbd1b68f607ec211bdb..948c3d1bf1bff239322c451a3212913c92013b57 100644 (file)
@@ -189,12 +189,11 @@ cdef class Transformer:
         # able to adapt its subtypes, otherwise Liskov is sad.
         for dmap in self._dumpers_maps:
             for scls in cls.__mro__:
-                key = (scls, format)
-                dumper_class = dmap.get(key)
+                dumper_class = dmap.get((scls, format))
                 if not dumper_class:
                     continue
 
-                self._dumpers_cache[key] = dumper = dumper_class(scls, self)
+                self._dumpers_cache[cls, format] = dumper = dumper_class(cls, self)
                 return dumper
 
         # If the adapter is not found, look for its name as a string
@@ -205,9 +204,9 @@ cdef class Transformer:
                 if dumper_class is None:
                     continue
 
-                key = (scls, format)
+                key = (cls, format)
                 dmap[key] = dumper_class
-                self._dumpers_cache[key] = dumper = dumper_class(scls, self)
+                self._dumpers_cache[key] = dumper = dumper_class(cls, self)
                 return dumper
 
         raise e.ProgrammingError(