]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Fix py_codecs data type
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 2 Jan 2022 15:37:09 +0000 (16:37 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 2 Jan 2022 15:40:15 +0000 (16:40 +0100)
It doesn't contain str anymore since 3.0.4.

A stricter definition revealed a couple of wrong usages of the mapping.
Use more consistently the higher level `conninfo_encoding()` function
instead of directly the mapping.

psycopg/psycopg/_encodings.py
psycopg/psycopg/generators.py
psycopg/psycopg/pq/misc.py

index 41196667848b61da9f2e5fce6b7f90a2e8e61bc3..1d0032b5d5ebf3decb5605f9e69c400aab4e84bb 100644 (file)
@@ -5,7 +5,7 @@ Mappings between PostgreSQL and Python encodings.
 # Copyright (C) 2020-2021 The Psycopg Team
 
 import codecs
-from typing import Dict, Union, TYPE_CHECKING
+from typing import Dict, TYPE_CHECKING
 
 from .errors import NotSupportedError
 
@@ -59,7 +59,7 @@ _py_codecs = {
     "WIN874": "cp874",
 }
 
-py_codecs: Dict[Union[bytes, str], str] = {}
+py_codecs: Dict[bytes, str] = {}
 py_codecs.update((k.encode(), v) for k, v in _py_codecs.items())
 
 # Add an alias without underscore, for lenient lookups
index c988fd52e887e6379af23e94cba494cc12e79bd9..2d5b48b17f1fbd1492a3390028e249bcde807b2a 100644 (file)
@@ -24,7 +24,7 @@ from .pq import ConnStatus, PollingStatus, ExecStatus
 from .abc import PQGen, PQGenConn
 from .pq.abc import PGconn, PGresult
 from .waiting import Wait, Ready
-from ._encodings import py_codecs, conninfo_encoding
+from ._encodings import pgconn_encoding, conninfo_encoding
 
 logger = logging.getLogger(__name__)
 
@@ -194,9 +194,7 @@ def copy_from(pgconn: PGconn) -> PQGen[Union[memoryview, PGresult]]:
         raise e.ProgrammingError("you cannot mix COPY with other operations")
     result = results[0]
     if result.status != ExecStatus.COMMAND_OK:
-        encoding = py_codecs.get(
-            pgconn.parameter_status(b"client_encoding") or "", "utf-8"
-        )
+        encoding = pgconn_encoding(pgconn)
         raise e.error_from_result(result, encoding=encoding)
 
     return result
@@ -223,9 +221,7 @@ def copy_end(pgconn: PGconn, error: Optional[bytes]) -> PQGen[PGresult]:
     # Retrieve the final result of copy
     (result,) = yield from fetch_many(pgconn)
     if result.status != ExecStatus.COMMAND_OK:
-        encoding = py_codecs.get(
-            pgconn.parameter_status(b"client_encoding") or "", "utf-8"
-        )
+        encoding = pgconn_encoding(pgconn)
         raise e.error_from_result(result, encoding=encoding)
 
     return result
index 952d9779e73eaca2e880eb1512f339a3b5566b21..989cd498d87bc71223d62fcdd444fa7885bf67fb 100644 (file)
@@ -8,7 +8,7 @@ from typing import cast, NamedTuple, Optional, Union
 
 from .abc import PGconn, PGresult
 from ._enums import ConnStatus, TransactionStatus
-from .._encodings import py_codecs
+from .._encodings import pgconn_encoding
 
 
 class PGnotify(NamedTuple):
@@ -62,9 +62,7 @@ def error_message(obj: Union[PGconn, PGresult], encoding: str = "utf8") -> str:
         # obj is a PGconn
         obj = cast(PGconn, obj)
         if obj.status == ConnStatus.OK:
-            encoding = py_codecs.get(
-                obj.parameter_status(b"client_encoding") or "", "utf-8"
-            )
+            encoding = pgconn_encoding(obj)
         bmsg = obj.error_message
 
         # strip severity and whitespaces