From a46794402937ea91383e1ee230323a66091e8e7d Mon Sep 17 00:00:00 2001 From: Petr Ledvina Date: Fri, 20 Mar 2026 12:40:51 +0100 Subject: [PATCH 1/2] Fix _codecs.escape_decode return type --- stdlib/@tests/test_cases/check_codecs.py | 7 +++++++ stdlib/_codecs.pyi | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/stdlib/@tests/test_cases/check_codecs.py b/stdlib/@tests/test_cases/check_codecs.py index 19e663ceeaaf..3fdd17b9ad94 100644 --- a/stdlib/@tests/test_cases/check_codecs.py +++ b/stdlib/@tests/test_cases/check_codecs.py @@ -11,3 +11,10 @@ assert_type(codecs.decode("ab", "hex"), bytes) assert_type(codecs.decode(b"ab", "hex"), bytes) + +assert_type(codecs.escape_decode("ab"), tuple[bytes, int]) +assert_type(codecs.escape_decode(b"ab"), tuple[bytes, int]) + +decoded, consumed = codecs.escape_decode(b"ab") +assert_type(decoded, bytes) +assert_type(consumed, int) diff --git a/stdlib/_codecs.pyi b/stdlib/_codecs.pyi index 89f97edb9ba8..96eafbb5d237 100644 --- a/stdlib/_codecs.pyi +++ b/stdlib/_codecs.pyi @@ -77,7 +77,8 @@ def ascii_decode(data: ReadableBuffer, errors: str | None = None, /) -> tuple[st def ascii_encode(str: str, errors: str | None = None, /) -> tuple[bytes, int]: ... def charmap_decode(data: ReadableBuffer, errors: str | None = None, mapping: _CharMap | None = None, /) -> tuple[str, int]: ... def charmap_encode(str: str, errors: str | None = None, mapping: _CharMap | None = None, /) -> tuple[bytes, int]: ... -def escape_decode(data: str | ReadableBuffer, errors: str | None = None, /) -> tuple[str, int]: ... +# Docs say this accepts a bytes-like object, but in practice it also accepts str. +def escape_decode(data: str | ReadableBuffer, errors: str | None = None, /) -> tuple[bytes, int]: ... def escape_encode(data: bytes, errors: str | None = None, /) -> tuple[bytes, int]: ... def latin_1_decode(data: ReadableBuffer, errors: str | None = None, /) -> tuple[str, int]: ... def latin_1_encode(str: str, errors: str | None = None, /) -> tuple[bytes, int]: ... From cc4db6a6b8c2fed4675ad8f8d399b9148976b624 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 20 Mar 2026 12:21:40 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stdlib/_codecs.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stdlib/_codecs.pyi b/stdlib/_codecs.pyi index 96eafbb5d237..89cb78c33571 100644 --- a/stdlib/_codecs.pyi +++ b/stdlib/_codecs.pyi @@ -77,6 +77,7 @@ def ascii_decode(data: ReadableBuffer, errors: str | None = None, /) -> tuple[st def ascii_encode(str: str, errors: str | None = None, /) -> tuple[bytes, int]: ... def charmap_decode(data: ReadableBuffer, errors: str | None = None, mapping: _CharMap | None = None, /) -> tuple[str, int]: ... def charmap_encode(str: str, errors: str | None = None, mapping: _CharMap | None = None, /) -> tuple[bytes, int]: ... + # Docs say this accepts a bytes-like object, but in practice it also accepts str. def escape_decode(data: str | ReadableBuffer, errors: str | None = None, /) -> tuple[bytes, int]: ... def escape_encode(data: bytes, errors: str | None = None, /) -> tuple[bytes, int]: ...