From: Daniele Varrazzo Date: Thu, 30 Oct 2025 14:54:45 +0000 (+0000) Subject: refactor(composite) mark private classes with leading underscore X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bee733adc1e89a6411a62eb0df4ab58eb07077e5;p=thirdparty%2Fpsycopg.git refactor(composite) mark private classes with leading underscore --- diff --git a/psycopg/psycopg/types/composite.py b/psycopg/psycopg/types/composite.py index d2c299743..520b48d92 100644 --- a/psycopg/psycopg/types/composite.py +++ b/psycopg/psycopg/types/composite.py @@ -84,7 +84,7 @@ WHERE t.oid = {regtype} ).format(regtype=cls._to_regtype(conn)) -class SequenceDumper(RecursiveDumper): +class _SequenceDumper(RecursiveDumper): def _dump_sequence( self, obj: Sequence[Any], start: bytes, end: bytes, sep: bytes ) -> bytes: @@ -117,7 +117,7 @@ class SequenceDumper(RecursiveDumper): _re_esc = re.compile(rb"([\\\"])") -class TupleDumper(SequenceDumper): +class TupleDumper(_SequenceDumper): # Should be this, but it doesn't work # oid = _oids.RECORD_OID @@ -125,11 +125,11 @@ class TupleDumper(SequenceDumper): return self._dump_sequence(obj, b"(", b")", b",") -class TupleBinaryDumper(Dumper): +class _SequenceBinaryDumper(Dumper): format = pq.Format.BINARY # Subclasses must set this info - _field_types: tuple[int, ...] + field_types: tuple[int, ...] def __init__(self, cls: type, context: abc.AdaptContext | None = None): super().__init__(cls, context) @@ -139,9 +139,9 @@ class TupleBinaryDumper(Dumper): # in case the composite contains another composite. Make sure to use # a separate Transformer instance instead. self._tx = Transformer(context) - self._tx.set_dumper_types(self._field_types, self.format) + self._tx.set_dumper_types(self.field_types, self.format) - nfields = len(self._field_types) + nfields = len(self.field_types) self._formats = (PyFormat.from_pq(self.format),) * nfields def dump(self, obj: tuple[Any, ...]) -> Buffer | None: @@ -149,7 +149,7 @@ class TupleBinaryDumper(Dumper): adapted = self._tx.dump_sequence(obj, self._formats) for i in range(len(obj)): b = adapted[i] - oid = self._field_types[i] + oid = self.field_types[i] if b is not None: out += _pack_oidlen(oid, len(b)) out += b @@ -475,9 +475,6 @@ def _make_dumper(name: str, oid: int) -> type[TupleDumper]: @cache def _make_binary_dumper( name: str, oid: int, field_types: tuple[int, ...] -) -> type[TupleBinaryDumper]: - return type( - f"{name.title()}BinaryDumper", - (TupleBinaryDumper,), - {"oid": oid, "_field_types": field_types}, - ) +) -> type[_SequenceBinaryDumper]: + d = {"oid": oid, "field_types": field_types} + return type(f"{name.title()}BinaryDumper", (_SequenceBinaryDumper,), d) diff --git a/tests/types/test_composite.py b/tests/types/test_composite.py index 79f4f64a9..f02da5416 100644 --- a/tests/types/test_composite.py +++ b/tests/types/test_composite.py @@ -4,8 +4,7 @@ from psycopg import postgres, pq, sql from psycopg.adapt import PyFormat from psycopg.postgres import types as builtins from psycopg.types.range import Range -from psycopg.types.composite import CompositeInfo, TupleBinaryDumper, TupleDumper -from psycopg.types.composite import register_composite +from psycopg.types.composite import CompositeInfo, TupleDumper, register_composite from ..utils import eur from ..fix_crdb import crdb_skip_message, is_crdb @@ -415,9 +414,6 @@ def test_type_dumper_registered_binary(conn, testcomp): register_composite(info, conn) assert issubclass(info.python_type, tuple) assert info.python_type.__name__ == "testcomp" - d = conn.adapters.get_dumper(info.python_type, "b") - assert issubclass(d, TupleBinaryDumper) - assert d is not TupleBinaryDumper tc = info.python_type("foo", 42, 3.14) cur = conn.execute("select pg_typeof(%b)", [tc])