From: Daniele Varrazzo Date: Wed, 2 Aug 2023 00:14:04 +0000 (+0100) Subject: fix(c): don't try to mutate Cython type X-Git-Tag: pool-3.2.0~70^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=29bb630c0e0af05eefeba2bf30f5f1a322748ce9;p=thirdparty%2Fpsycopg.git fix(c): don't try to mutate Cython type These types are now marked immutable. Use a module variable instead. --- diff --git a/psycopg_c/psycopg_c/types/numeric.pyx b/psycopg_c/psycopg_c/types/numeric.pyx index 941785b01..de76a236c 100644 --- a/psycopg_c/psycopg_c/types/numeric.pyx +++ b/psycopg_c/psycopg_c/types/numeric.pyx @@ -498,19 +498,22 @@ cdef class DecimalBinaryDumper(CDumper): return dump_decimal_to_numeric_binary(obj, rv, offset) +_int_classes = None + + cdef class _MixedNumericDumper(CDumper): - int_classes = None oid = oids.NUMERIC_OID def __cinit__(self, cls, context: Optional[AdaptContext] = None): - if _MixedNumericDumper.int_classes is None: + global _int_classes + + if _int_classes is None: if "numpy" in sys.modules: import numpy - - _MixedNumericDumper.int_classes = (int, numpy.integer) + _int_classes = (int, numpy.integer) else: - _MixedNumericDumper.int_classes = int + _int_classes = int @cython.final @@ -523,7 +526,7 @@ cdef class NumericDumper(_MixedNumericDumper): return dump_int_to_text(obj, rv, offset) elif isinstance(obj, Decimal): return dump_decimal_to_text(obj, rv, offset) - elif isinstance(obj, self.int_classes): + elif isinstance(obj, _int_classes): return dump_int_to_text(obj, rv, offset) else: raise TypeError( @@ -541,7 +544,7 @@ cdef class NumericBinaryDumper(_MixedNumericDumper): return dump_int_to_numeric_binary(obj, rv, offset) elif isinstance(obj, Decimal): return dump_decimal_to_numeric_binary(obj, rv, offset) - elif isinstance(obj, self.int_classes): + elif isinstance(obj, _int_classes): return dump_int_to_numeric_binary(int(obj), rv, offset) else: raise TypeError(