From: Daniele Varrazzo Date: Sat, 21 Nov 2020 23:07:31 +0000 (+0000) Subject: Use the right class instantiating a dumper on a subclass X-Git-Tag: 3.0.dev0~332^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01a08241ec7990c0771af08e7184354bf2e00eca;p=thirdparty%2Fpsycopg.git Use the right class instantiating a dumper on a subclass --- diff --git a/psycopg3/psycopg3/_transform.py b/psycopg3/psycopg3/_transform.py index 8599ca73f..0ac2b0893 100644 --- a/psycopg3/psycopg3/_transform.py +++ b/psycopg3/psycopg3/_transform.py @@ -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( diff --git a/psycopg3_c/psycopg3_c/transform.pyx b/psycopg3_c/psycopg3_c/transform.pyx index 311a04da0..948c3d1bf 100644 --- a/psycopg3_c/psycopg3_c/transform.pyx +++ b/psycopg3_c/psycopg3_c/transform.pyx @@ -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(