]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
refactor: define conn_encoding on pgconn_encoding
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 11 Oct 2023 23:06:47 +0000 (01:06 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 14 Oct 2023 07:38:42 +0000 (09:38 +0200)
Also more consistent use of the two functions throughout the codebase.

psycopg/psycopg/_encodings.py
psycopg/psycopg/_py_transformer.py
psycopg/psycopg/sql.py
psycopg_c/psycopg_c/_psycopg/transform.pyx

index 3f14c260869993bdf81534771722870bf57fadd9..2382710933d89d82ef9c786e99301968bbfc33b1 100644 (file)
@@ -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:
     """
index 7174893c5e804c65182ed69ff253b615a367432c..17f21c079e14be17484bc724a5b7563d9c868eb5 100644 (file)
@@ -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
index 86c0540c5c506e887e888de78d15a8c90ea6dc04..d793bf389245a6140664318ec1c056d817678e1f 100644 (file)
@@ -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:
index 213e48c9f232580f308dd7afe1b96b656663cf59..a4fbe498e27dcee9873d6028ae3f3273e532a54b 100644 (file)
@@ -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