]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-145118: Add `frozendict` support to `str.maketrans()` (gh-145129)
authorStan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Mon, 23 Feb 2026 22:04:16 +0000 (22:04 +0000)
committerGitHub <noreply@github.com>
Mon, 23 Feb 2026 22:04:16 +0000 (16:04 -0600)
Add support to `str.maketrans`

Lib/test/test_str.py
Misc/NEWS.d/next/Core_and_Builtins/2026-02-22-22-05-09.gh-issue-145118.TaKMJE.rst [new file with mode: 0644]
Objects/unicodeobject.c

index 0a8dddb026f6c85771b804f9a5e1e181075239d9..4f57499af70f4d1d6978cf7477173ae115d473a4 100644 (file)
@@ -454,6 +454,13 @@ class StrTest(string_tests.StringLikeTest,
         self.assertEqual("[a\xe9]".translate(str.maketrans({'a': '<\u20ac>'})),
                          "[<\u20ac>\xe9]")
 
+        # with frozendict
+        tbl = self.type2test.maketrans(frozendict({'s': 'S', 'T': 't'}))
+        self.assertEqual(tbl, {ord('s'): 'S', ord('T'): 't'})
+        self.assertEqual('sTan'.translate(tbl), 'Stan')
+        tbl = self.type2test.maketrans(frozendict({'a': None, 'b': '<i>'}))
+        self.checkequalnofix('<i><i><i>c', 'abababc', 'translate', tbl)
+
         # invalid Unicode characters
         invalid_char = 0x10ffff+1
         for before in "a\xe9\u20ac\U0010ffff":
diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-02-22-22-05-09.gh-issue-145118.TaKMJE.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-02-22-22-05-09.gh-issue-145118.TaKMJE.rst
new file mode 100644 (file)
index 0000000..fccc3bc
--- /dev/null
@@ -0,0 +1 @@
+:meth:`str.maketrans` now accepts :class:`frozendict`.
index fdcbcf51cb62c2d39a51cd4855bf578918bd5f1f..988e5f95573fe1a4155e4b99e2884b676a9be7c0 100644 (file)
@@ -13149,7 +13149,7 @@ unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z)
         const void *data;
 
         /* x must be a dict */
-        if (!PyDict_CheckExact(x)) {
+        if (!PyAnyDict_CheckExact(x)) {
             PyErr_SetString(PyExc_TypeError, "if you give only one argument "
                             "to maketrans it must be a dict");
             goto err;