From: Daniele Varrazzo Date: Sat, 25 Jul 2020 18:18:15 +0000 (+0100) Subject: Connection encoding renamed to client_encoding X-Git-Tag: 3.0.dev0~452 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4cda4720168cd37d2f88f4ee27845f722af7f512;p=thirdparty%2Fpsycopg.git Connection encoding renamed to client_encoding More precise and consistent with set_client_encoding() --- diff --git a/psycopg3/psycopg3/connection.py b/psycopg3/psycopg3/connection.py index 12eeb0e79..71d564ef6 100644 --- a/psycopg3/psycopg3/connection.py +++ b/psycopg3/psycopg3/connection.py @@ -147,15 +147,15 @@ class BaseConnection: return self._codec @property - def encoding(self) -> str: + def client_encoding(self) -> str: rv = self.pgconn.parameter_status(b"client_encoding") if rv is not None: return rv.decode("ascii") else: return "UTF8" - @encoding.setter - def encoding(self, value: str) -> None: + @client_encoding.setter + def client_encoding(self, value: str) -> None: self._set_client_encoding(value) def _set_client_encoding(self, value: str) -> None: @@ -402,7 +402,7 @@ class AsyncConnection(BaseConnection): def _set_client_encoding(self, value: str) -> None: raise AttributeError( - "'encoding' is read-only on async connections:" + "'client_encoding' is read-only on async connections:" " please use await .set_client_encoding() instead." ) diff --git a/psycopg3/psycopg3/types/text.py b/psycopg3/psycopg3/types/text.py index e620b4b68..75aa80524 100644 --- a/psycopg3/psycopg3/types/text.py +++ b/psycopg3/psycopg3/types/text.py @@ -28,7 +28,7 @@ class StringDumper(Dumper): self._encode: EncodeFunc if self.connection is not None: - if self.connection.encoding != "SQL_ASCII": + if self.connection.client_encoding != "SQL_ASCII": self._encode = self.connection.codec.encode else: self._encode = codecs.lookup("utf8").encode @@ -52,7 +52,7 @@ class StringLoader(Loader): super().__init__(oid, context) if self.connection is not None: - if self.connection.encoding != "SQL_ASCII": + if self.connection.client_encoding != "SQL_ASCII": self.decode = self.connection.codec.decode else: self.decode = None diff --git a/psycopg3_c/psycopg3_c/types/text.pyx b/psycopg3_c/psycopg3_c/types/text.pyx index ed1a36d36..dece9bc46 100644 --- a/psycopg3_c/psycopg3_c/types/text.pyx +++ b/psycopg3_c/psycopg3_c/types/text.pyx @@ -20,9 +20,9 @@ cdef class StringLoader(CLoader): self.pydecoder = None conn = self.connection if conn is not None: - if conn.encoding == "UTF8": + if conn.client_encoding == "UTF8": self.is_utf8 = 1 - elif conn.encoding != "SQL_ASCII": + elif conn.client_encoding != "SQL_ASCII": self.pydecoder = conn.codec.decode else: self.pydecoder = codecs.lookup("utf8").decode diff --git a/tests/test_connection.py b/tests/test_connection.py index abbbbbc57..eb00c6b3d 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -159,14 +159,14 @@ def test_autocommit_unknown(conn): def test_get_encoding(conn): (enc,) = conn.cursor().execute("show client_encoding").fetchone() - assert enc == conn.encoding + assert enc == conn.client_encoding def test_set_encoding(conn): - newenc = "LATIN1" if conn.encoding != "LATIN1" else "UTF8" - assert conn.encoding != newenc - conn.encoding = newenc - assert conn.encoding == newenc + newenc = "LATIN1" if conn.client_encoding != "LATIN1" else "UTF8" + assert conn.client_encoding != newenc + conn.client_encoding = newenc + assert conn.client_encoding == newenc (enc,) = conn.cursor().execute("show client_encoding").fetchone() assert enc == newenc @@ -182,8 +182,8 @@ def test_set_encoding(conn): ], ) def test_normalize_encoding(conn, enc, out, codec): - conn.encoding = enc - assert conn.encoding == out + conn.client_encoding = enc + assert conn.client_encoding == out assert conn.codec.name == codec @@ -200,19 +200,19 @@ def test_normalize_encoding(conn, enc, out, codec): def test_encoding_env_var(dsn, monkeypatch, enc, out, codec): monkeypatch.setenv("PGCLIENTENCODING", enc) conn = psycopg3.connect(dsn) - assert conn.encoding == out + assert conn.client_encoding == out assert conn.codec.name == codec def test_set_encoding_unsupported(conn): - conn.encoding = "EUC_TW" + conn.client_encoding = "EUC_TW" with pytest.raises(psycopg3.NotSupportedError): conn.cursor().execute("select 1") def test_set_encoding_bad(conn): with pytest.raises(psycopg3.DatabaseError): - conn.encoding = "WAT" + conn.client_encoding = "WAT" @pytest.mark.parametrize( diff --git a/tests/test_connection_async.py b/tests/test_connection_async.py index acb45b5e7..0e23dc751 100644 --- a/tests/test_connection_async.py +++ b/tests/test_connection_async.py @@ -169,17 +169,17 @@ async def test_get_encoding(aconn): cur = aconn.cursor() await cur.execute("show client_encoding") (enc,) = await cur.fetchone() - assert enc == aconn.encoding + assert enc == aconn.client_encoding async def test_set_encoding(aconn): - newenc = "LATIN1" if aconn.encoding != "LATIN1" else "UTF8" - assert aconn.encoding != newenc + newenc = "LATIN1" if aconn.client_encoding != "LATIN1" else "UTF8" + assert aconn.client_encoding != newenc with pytest.raises(AttributeError): - aconn.encoding = newenc - assert aconn.encoding != newenc + aconn.client_encoding = newenc + assert aconn.client_encoding != newenc await aconn.set_client_encoding(newenc) - assert aconn.encoding == newenc + assert aconn.client_encoding == newenc cur = aconn.cursor() await cur.execute("show client_encoding") (enc,) = await cur.fetchone() @@ -198,7 +198,7 @@ async def test_set_encoding(aconn): ) async def test_normalize_encoding(aconn, enc, out, codec): await aconn.set_client_encoding(enc) - assert aconn.encoding == out + assert aconn.client_encoding == out assert aconn.codec.name == codec @@ -215,7 +215,7 @@ async def test_normalize_encoding(aconn, enc, out, codec): async def test_encoding_env_var(dsn, monkeypatch, enc, out, codec): monkeypatch.setenv("PGCLIENTENCODING", enc) aconn = await psycopg3.AsyncConnection.connect(dsn) - assert aconn.encoding == out + assert aconn.client_encoding == out assert aconn.codec.name == codec diff --git a/tests/test_copy.py b/tests/test_copy.py index e7433e5a6..d0a5acaa0 100644 --- a/tests/test_copy.py +++ b/tests/test_copy.py @@ -180,7 +180,7 @@ def test_copy_in_allchars(conn): cur = conn.cursor() ensure_table(cur, sample_tabledef) - conn.encoding = "utf8" + conn.client_encoding = "utf8" with cur.copy("copy copy_in from stdin (format text)") as copy: for i in range(1, 256): copy.write_row((i, None, chr(i))) diff --git a/tests/test_cursor.py b/tests/test_cursor.py index 21cdd467e..416a2108a 100644 --- a/tests/test_cursor.py +++ b/tests/test_cursor.py @@ -101,14 +101,14 @@ def test_execute_binary_result(conn): @pytest.mark.parametrize("encoding", ["utf8", "latin9"]) def test_query_encode(conn, encoding): - conn.encoding = encoding + conn.client_encoding = encoding cur = conn.cursor() (res,) = cur.execute("select '\u20ac'").fetchone() assert res == "\u20ac" def test_query_badenc(conn): - conn.encoding = "latin1" + conn.client_encoding = "latin1" cur = conn.cursor() with pytest.raises(UnicodeEncodeError): cur.execute("select '\u20ac'") diff --git a/tests/test_errors.py b/tests/test_errors.py index f3dd8c2ae..d7f58cf69 100644 --- a/tests/test_errors.py +++ b/tests/test_errors.py @@ -49,7 +49,7 @@ def test_diag_encoding(conn, enc): msgs = [] conn.pgconn.exec_(b"set client_min_messages to notice") conn.add_notice_handler(lambda diag: msgs.append(diag.message_primary)) - conn.encoding = enc + conn.client_encoding = enc cur = conn.cursor() cur.execute( "do $$begin raise notice 'hello %', chr(8364); end$$ language plpgsql" @@ -59,7 +59,7 @@ def test_diag_encoding(conn, enc): @pytest.mark.parametrize("enc", ["utf8", "latin9"]) def test_error_encoding(conn, enc): - conn.encoding = enc + conn.client_encoding = enc cur = conn.cursor() with pytest.raises(e.DatabaseError) as excinfo: cur.execute( diff --git a/tests/types/test_text.py b/tests/types/test_text.py index 758d48244..90da91262 100644 --- a/tests/types/test_text.py +++ b/tests/types/test_text.py @@ -38,7 +38,7 @@ def test_dump_enc(conn, fmt_in, encoding): cur = conn.cursor() ph = "%s" if fmt_in == Format.TEXT else "%b" - conn.encoding = encoding + conn.client_encoding = encoding (res,) = cur.execute(f"select {ph}::bytea", (eur,)).fetchone() assert res == eur.encode("utf8") @@ -48,7 +48,7 @@ def test_dump_ascii(conn, fmt_in): cur = conn.cursor() ph = "%s" if fmt_in == Format.TEXT else "%b" - conn.encoding = "sql_ascii" + conn.client_encoding = "sql_ascii" (res,) = cur.execute(f"select ascii({ph})", (eur,)).fetchone() assert res == ord(eur) @@ -58,7 +58,7 @@ def test_dump_badenc(conn, fmt_in): cur = conn.cursor() ph = "%s" if fmt_in == Format.TEXT else "%b" - conn.encoding = "latin1" + conn.client_encoding = "latin1" with pytest.raises(UnicodeEncodeError): cur.execute(f"select {ph}::bytea", (eur,)) @@ -69,7 +69,7 @@ def test_dump_badenc(conn, fmt_in): def test_load_enc(conn, typename, encoding, fmt_out): cur = conn.cursor(format=fmt_out) - conn.encoding = encoding + conn.client_encoding = encoding (res,) = cur.execute( f"select chr(%s::int)::{typename}", (ord(eur),) ).fetchone() @@ -81,7 +81,7 @@ def test_load_enc(conn, typename, encoding, fmt_out): def test_load_badenc(conn, typename, fmt_out): cur = conn.cursor(format=fmt_out) - conn.encoding = "latin1" + conn.client_encoding = "latin1" with pytest.raises(psycopg3.DatabaseError): cur.execute(f"select chr(%s::int)::{typename}", (ord(eur),)) @@ -91,7 +91,7 @@ def test_load_badenc(conn, typename, fmt_out): def test_load_ascii(conn, typename, fmt_out): cur = conn.cursor(format=fmt_out) - conn.encoding = "sql_ascii" + conn.client_encoding = "sql_ascii" (res,) = cur.execute( f"select chr(%s::int)::{typename}", (ord(eur),) ).fetchone() @@ -103,7 +103,7 @@ def test_load_ascii(conn, typename, fmt_out): def test_load_ascii_encanyway(conn, typename, fmt_out): cur = conn.cursor(format=fmt_out) - conn.encoding = "sql_ascii" + conn.client_encoding = "sql_ascii" (res,) = cur.execute(f"select 'aa'::{typename}").fetchone() assert res == "aa" @@ -123,7 +123,7 @@ def test_text_array(conn, typename, fmt_in, fmt_out): @pytest.mark.parametrize("fmt_in", [Format.TEXT, Format.BINARY]) @pytest.mark.parametrize("fmt_out", [Format.TEXT, Format.BINARY]) def test_text_array_ascii(conn, fmt_in, fmt_out): - conn.encoding = "sql_ascii" + conn.client_encoding = "sql_ascii" cur = conn.cursor(format=fmt_out) a = list(map(chr, range(1, 256))) + [eur] exp = [s.encode("utf8") for s in a]