Skip to content

Commit 637fe7e

Browse files
authored
Deprecate Connection.set_charset() at runtime and document warning behavior (#1243)
`Connection.set_charset(charset)` was marked for future removal but did not emit a deprecation signal at call time. This change adds runtime deprecation signaling and updates release notes accordingly.
1 parent 23ca04a commit 637fe7e

3 files changed

Lines changed: 19 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Release date: TBD
3232
* Support MySQL 8 row/column alias syntax in `executemany` INSERT regex. (#1235)
3333
* Expose SQLSTATE on MySQL protocol exceptions without changing exception formatting. (#1236)
3434
* Reject non-finite `decimal.Decimal` query parameters (`NaN`, `sNaN`, `±Infinity`). (#1237)
35+
* `Connection.set_charset(charset)` now emits `DeprecationWarning`.
3536

3637
## v1.1.3
3738

pymysql/connections.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,11 @@ def ping(self, reconnect=False):
630630

631631
def set_charset(self, charset):
632632
"""Deprecated. Use set_character_set() instead."""
633+
warnings.warn(
634+
"'set_charset' is deprecated, use 'set_character_set' instead",
635+
DeprecationWarning,
636+
2,
637+
)
633638
# This function has been implemented in old PyMySQL.
634639
# But this name is different from MySQLdb.
635640
# So we keep this function for compatibility and add

pymysql/tests/test_err.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import pytest
2+
from unittest import mock
3+
24
from pymysql import err
5+
from pymysql.connections import Connection
36

47

58
def test_error_init_sqlstate():
@@ -26,3 +29,13 @@ def test_raise_mysql_exception():
2629
assert cm.type == err.OperationalError
2730
assert cm.value.args == (1040, "Too many connections")
2831
assert cm.value.sqlstate is None
32+
33+
34+
def test_set_charset_deprecated():
35+
con = mock.Mock(spec=Connection)
36+
with pytest.warns(
37+
DeprecationWarning,
38+
match="'set_charset' is deprecated, use 'set_character_set' instead",
39+
):
40+
Connection.set_charset(con, "utf8mb4")
41+
con.set_character_set.assert_called_once_with("utf8mb4")

0 commit comments

Comments
 (0)