From: Daniele Varrazzo Date: Wed, 11 Oct 2023 23:06:47 +0000 (+0200) Subject: refactor: define conn_encoding on pgconn_encoding X-Git-Tag: pool-3.2.0~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=904a306211ffc1fe078b66b8c0522d57d7534a96;p=thirdparty%2Fpsycopg.git refactor: define conn_encoding on pgconn_encoding Also more consistent use of the two functions throughout the codebase. --- diff --git a/psycopg/psycopg/_encodings.py b/psycopg/psycopg/_encodings.py index 3f14c2608..238271093 100644 --- a/psycopg/psycopg/_encodings.py +++ b/psycopg/psycopg/_encodings.py @@ -84,12 +84,11 @@ def conn_encoding(conn: "Optional[BaseConnection[Any]]") -> str: Default to utf8 if the connection has no encoding info. """ - if not conn or conn.closed: + if conn: + return pgconn_encoding(conn.pgconn) + else: return "utf-8" - pgenc = conn.pgconn.parameter_status(b"client_encoding") or b"UTF8" - return pg2pyenc(pgenc) - def pgconn_encoding(pgconn: "PGconn") -> str: """ @@ -97,12 +96,12 @@ def pgconn_encoding(pgconn: "PGconn") -> str: Default to utf8 if the connection has no encoding info. """ - if pgconn.status != OK: + if pgconn.status == OK: + pgenc = pgconn.parameter_status(b"client_encoding") or b"UTF8" + return pg2pyenc(pgenc) + else: return "utf-8" - pgenc = pgconn.parameter_status(b"client_encoding") or b"UTF8" - return pg2pyenc(pgenc) - def conninfo_encoding(conninfo: str) -> str: """ diff --git a/psycopg/psycopg/_py_transformer.py b/psycopg/psycopg/_py_transformer.py index 7174893c5..17f21c079 100644 --- a/psycopg/psycopg/_py_transformer.py +++ b/psycopg/psycopg/_py_transformer.py @@ -20,7 +20,7 @@ from . import errors as e from .abc import Buffer, LoadFunc, AdaptContext, PyFormat, DumperKey, NoneType from .rows import Row, RowMaker from ._oids import INVALID_OID, TEXT_OID -from ._encodings import pgconn_encoding +from ._encodings import conn_encoding if TYPE_CHECKING: from .adapt import AdaptersMap @@ -116,8 +116,7 @@ class Transformer(AdaptContext): @property def encoding(self) -> str: if not self._encoding: - conn = self.connection - self._encoding = pgconn_encoding(conn.pgconn) if conn else "utf-8" + self._encoding = conn_encoding(self.connection) return self._encoding @property diff --git a/psycopg/psycopg/sql.py b/psycopg/psycopg/sql.py index 86c0540c5..d793bf389 100644 --- a/psycopg/psycopg/sql.py +++ b/psycopg/psycopg/sql.py @@ -204,9 +204,8 @@ class SQL(Composable): return self._obj def as_bytes(self, context: Optional[AdaptContext]) -> bytes: - enc = "utf-8" - if context: - enc = conn_encoding(context.connection) + conn = context.connection if context else None + enc = conn_encoding(conn) return self._obj.encode(enc) def format(self, *args: Any, **kwargs: Any) -> Composed: diff --git a/psycopg_c/psycopg_c/_psycopg/transform.pyx b/psycopg_c/psycopg_c/_psycopg/transform.pyx index 213e48c9f..a4fbe498e 100644 --- a/psycopg_c/psycopg_c/_psycopg/transform.pyx +++ b/psycopg_c/psycopg_c/_psycopg/transform.pyx @@ -24,7 +24,7 @@ from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple from psycopg import errors as e from psycopg.pq import Format as PqFormat from psycopg.rows import Row, RowMaker -from psycopg._encodings import pgconn_encoding +from psycopg._encodings import conn_encoding NoneType = type(None) @@ -122,8 +122,7 @@ cdef class Transformer: @property def encoding(self) -> str: if not self._encoding: - conn = self.connection - self._encoding = pgconn_encoding(conn.pgconn) if conn else "utf-8" + self._encoding = conn_encoding(self.connection) return self._encoding @property