Skip to content

Commit 8bb4b55

Browse files
Add Python 3.15 base64 and binascii updates (#15733)
1 parent 40787ee commit 8bb4b55

3 files changed

Lines changed: 150 additions & 55 deletions

File tree

stdlib/@tests/stubtest_allowlists/py315.txt

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -74,41 +74,8 @@ ast.ImportFrom.is_lazy
7474
ast.dump
7575
ast.parse
7676
ast.type_param.__init__
77-
base64.a85decode
78-
base64.b16decode
79-
base64.b16encode
80-
base64.b32decode
81-
base64.b32encode
82-
base64.b32hexdecode
83-
base64.b32hexencode
77+
# base64.b64decode uses a private sentinel list as the default for parameters whose public types are bool/buffer.
8478
base64.b64decode
85-
base64.b64encode
86-
base64.b85decode
87-
base64.b85encode
88-
base64.urlsafe_b64decode
89-
base64.urlsafe_b64encode
90-
base64.z85decode
91-
base64.z85encode
92-
binascii.ASCII85_ALPHABET
93-
binascii.BASE32HEX_ALPHABET
94-
binascii.BASE32_ALPHABET
95-
binascii.BASE64_ALPHABET
96-
binascii.BASE85_ALPHABET
97-
binascii.BINHEX_ALPHABET
98-
binascii.CRYPT_ALPHABET
99-
binascii.URLSAFE_BASE64_ALPHABET
100-
binascii.UU_ALPHABET
101-
binascii.Z85_ALPHABET
102-
binascii.a2b_ascii85
103-
binascii.a2b_base32
104-
binascii.a2b_base64
105-
binascii.a2b_base85
106-
binascii.a2b_hex
107-
binascii.b2a_ascii85
108-
binascii.b2a_base32
109-
binascii.b2a_base64
110-
binascii.b2a_base85
111-
binascii.unhexlify
11279
codecs.backslashreplace_errors
11380
codecs.ignore_errors
11481
codecs.namereplace_errors

stdlib/base64.pyi

Lines changed: 84 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,31 +28,98 @@ __all__ = [
2828
if sys.version_info >= (3, 13):
2929
__all__ += ["z85decode", "z85encode"]
3030

31-
def b64encode(s: ReadableBuffer, altchars: ReadableBuffer | None = None) -> bytes: ...
32-
def b64decode(s: str | ReadableBuffer, altchars: str | ReadableBuffer | None = None, validate: bool = False) -> bytes: ...
31+
if sys.version_info >= (3, 15):
32+
def b64encode(
33+
s: ReadableBuffer, altchars: ReadableBuffer | None = None, *, padded: bool = True, wrapcol: int = 0
34+
) -> bytes: ...
35+
def b64decode(
36+
s: str | ReadableBuffer,
37+
altchars: str | ReadableBuffer | None = None,
38+
validate: bool = ...,
39+
*,
40+
padded: bool = True,
41+
ignorechars: ReadableBuffer = ...,
42+
canonical: bool = False,
43+
) -> bytes: ...
44+
45+
else:
46+
def b64encode(s: ReadableBuffer, altchars: ReadableBuffer | None = None) -> bytes: ...
47+
def b64decode(s: str | ReadableBuffer, altchars: str | ReadableBuffer | None = None, validate: bool = False) -> bytes: ...
48+
3349
def standard_b64encode(s: ReadableBuffer) -> bytes: ...
3450
def standard_b64decode(s: str | ReadableBuffer) -> bytes: ...
35-
def urlsafe_b64encode(s: ReadableBuffer) -> bytes: ...
36-
def urlsafe_b64decode(s: str | ReadableBuffer) -> bytes: ...
37-
def b32encode(s: ReadableBuffer) -> bytes: ...
38-
def b32decode(s: str | ReadableBuffer, casefold: bool = False, map01: str | ReadableBuffer | None = None) -> bytes: ...
39-
def b16encode(s: ReadableBuffer) -> bytes: ...
40-
def b16decode(s: str | ReadableBuffer, casefold: bool = False) -> bytes: ...
41-
def b32hexencode(s: ReadableBuffer) -> bytes: ...
42-
def b32hexdecode(s: str | ReadableBuffer, casefold: bool = False) -> bytes: ...
51+
52+
if sys.version_info >= (3, 15):
53+
def urlsafe_b64encode(s: ReadableBuffer, *, padded: bool = True) -> bytes: ...
54+
def urlsafe_b64decode(s: str | ReadableBuffer, *, padded: bool = False) -> bytes: ...
55+
def b32encode(s: ReadableBuffer, *, padded: bool = True, wrapcol: int = 0) -> bytes: ...
56+
def b32decode(
57+
s: str | ReadableBuffer,
58+
casefold: bool = False,
59+
map01: str | ReadableBuffer | None = None,
60+
*,
61+
padded: bool = True,
62+
ignorechars: ReadableBuffer = b"",
63+
canonical: bool = False,
64+
) -> bytes: ...
65+
def b16encode(s: ReadableBuffer, *, wrapcol: int = 0) -> bytes: ...
66+
def b16decode(s: str | ReadableBuffer, casefold: bool = False, *, ignorechars: ReadableBuffer = b"") -> bytes: ...
67+
68+
else:
69+
def urlsafe_b64encode(s: ReadableBuffer) -> bytes: ...
70+
def urlsafe_b64decode(s: str | ReadableBuffer) -> bytes: ...
71+
def b32encode(s: ReadableBuffer) -> bytes: ...
72+
def b32decode(s: str | ReadableBuffer, casefold: bool = False, map01: str | ReadableBuffer | None = None) -> bytes: ...
73+
def b16encode(s: ReadableBuffer) -> bytes: ...
74+
def b16decode(s: str | ReadableBuffer, casefold: bool = False) -> bytes: ...
75+
76+
if sys.version_info >= (3, 15):
77+
def b32hexencode(s: ReadableBuffer, *, padded: bool = True, wrapcol: int = 0) -> bytes: ...
78+
def b32hexdecode(
79+
s: str | ReadableBuffer,
80+
casefold: bool = False,
81+
*,
82+
padded: bool = True,
83+
ignorechars: ReadableBuffer = b"",
84+
canonical: bool = False,
85+
) -> bytes: ...
86+
87+
else:
88+
def b32hexencode(s: ReadableBuffer) -> bytes: ...
89+
def b32hexdecode(s: str | ReadableBuffer, casefold: bool = False) -> bytes: ...
90+
4391
def a85encode(
4492
b: ReadableBuffer, *, foldspaces: bool = False, wrapcol: int = 0, pad: bool = False, adobe: bool = False
4593
) -> bytes: ...
46-
def a85decode(
47-
b: str | ReadableBuffer, *, foldspaces: bool = False, adobe: bool = False, ignorechars: bytearray | bytes = b" \t\n\r\x0b"
48-
) -> bytes: ...
49-
def b85encode(b: ReadableBuffer, pad: bool = False) -> bytes: ...
50-
def b85decode(b: str | ReadableBuffer) -> bytes: ...
94+
95+
if sys.version_info >= (3, 15):
96+
def a85decode(
97+
b: str | ReadableBuffer,
98+
*,
99+
foldspaces: bool = False,
100+
adobe: bool = False,
101+
ignorechars: bytearray | bytes = b" \t\n\r\x0b",
102+
canonical: bool = False,
103+
) -> bytes: ...
104+
def b85encode(b: ReadableBuffer, pad: bool = False, *, wrapcol: int = 0) -> bytes: ...
105+
def b85decode(b: str | ReadableBuffer, *, ignorechars: ReadableBuffer = b"", canonical: bool = False) -> bytes: ...
106+
107+
else:
108+
def a85decode(
109+
b: str | ReadableBuffer, *, foldspaces: bool = False, adobe: bool = False, ignorechars: bytearray | bytes = b" \t\n\r\x0b"
110+
) -> bytes: ...
111+
def b85encode(b: ReadableBuffer, pad: bool = False) -> bytes: ...
112+
def b85decode(b: str | ReadableBuffer) -> bytes: ...
113+
51114
def decode(input: IO[bytes], output: IO[bytes]) -> None: ...
52115
def encode(input: IO[bytes], output: IO[bytes]) -> None: ...
53116
def encodebytes(s: ReadableBuffer) -> bytes: ...
54117
def decodebytes(s: ReadableBuffer) -> bytes: ...
55118

56119
if sys.version_info >= (3, 13):
57-
def z85encode(s: ReadableBuffer) -> bytes: ...
58-
def z85decode(s: str | ReadableBuffer) -> bytes: ...
120+
if sys.version_info >= (3, 15):
121+
def z85encode(s: ReadableBuffer, pad: bool = False, *, wrapcol: int = 0) -> bytes: ...
122+
def z85decode(s: str | ReadableBuffer, *, ignorechars: ReadableBuffer = b"", canonical: bool = False) -> bytes: ...
123+
else:
124+
def z85encode(s: ReadableBuffer) -> bytes: ...
125+
def z85decode(s: str | ReadableBuffer) -> bytes: ...

stdlib/binascii.pyi

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,68 @@ _AsciiBuffer: TypeAlias = str | ReadableBuffer
1010
def a2b_uu(data: _AsciiBuffer, /) -> bytes: ...
1111
def b2a_uu(data: ReadableBuffer, /, *, backtick: bool = False) -> bytes: ...
1212

13-
if sys.version_info >= (3, 11):
13+
if sys.version_info >= (3, 15):
14+
ASCII85_ALPHABET: bytes
15+
BINHEX_ALPHABET: bytes
16+
CRYPT_ALPHABET: bytes
17+
UU_ALPHABET: bytes
18+
BASE64_ALPHABET: bytes
19+
URLSAFE_BASE64_ALPHABET: bytes
20+
BASE32_ALPHABET: bytes
21+
BASE32HEX_ALPHABET: bytes
22+
BASE85_ALPHABET: bytes
23+
Z85_ALPHABET: bytes
24+
def a2b_base64(
25+
data: _AsciiBuffer,
26+
/,
27+
*,
28+
strict_mode: bool = False,
29+
alphabet: ReadableBuffer = ...,
30+
padded: bool = True,
31+
ignorechars: ReadableBuffer = ...,
32+
canonical: bool = False,
33+
) -> bytes: ...
34+
def b2a_base64(
35+
data: ReadableBuffer, /, *, newline: bool = True, alphabet: ReadableBuffer = ..., padded: bool = True, wrapcol: int = 0
36+
) -> bytes: ...
37+
def b2a_base32(
38+
data: ReadableBuffer, /, *, alphabet: ReadableBuffer = ..., padded: bool = True, wrapcol: int = 0
39+
) -> bytes: ...
40+
def a2b_base32(
41+
data: _AsciiBuffer,
42+
/,
43+
*,
44+
alphabet: ReadableBuffer = ...,
45+
padded: bool = True,
46+
ignorechars: ReadableBuffer = b"",
47+
canonical: bool = False,
48+
) -> bytes: ...
49+
def b2a_ascii85(
50+
data: ReadableBuffer, /, *, foldspaces: bool = False, wrapcol: int = 0, pad: bool = False, adobe: bool = False
51+
) -> bytes: ...
52+
def a2b_ascii85(
53+
data: _AsciiBuffer,
54+
/,
55+
*,
56+
foldspaces: bool = False,
57+
adobe: bool = False,
58+
ignorechars: ReadableBuffer = b"",
59+
canonical: bool = False,
60+
) -> bytes: ...
61+
def b2a_base85(data: ReadableBuffer, /, *, alphabet: ReadableBuffer = ..., pad: bool = False, wrapcol: int = 0) -> bytes: ...
62+
def a2b_base85(
63+
data: _AsciiBuffer, /, *, alphabet: ReadableBuffer = ..., ignorechars: ReadableBuffer = b"", canonical: bool = False
64+
) -> bytes: ...
65+
66+
elif sys.version_info >= (3, 11):
1467
def a2b_base64(data: _AsciiBuffer, /, *, strict_mode: bool = False) -> bytes: ...
1568

1669
else:
1770
def a2b_base64(data: _AsciiBuffer, /) -> bytes: ...
1871

19-
def b2a_base64(data: ReadableBuffer, /, *, newline: bool = True) -> bytes: ...
72+
if sys.version_info < (3, 15):
73+
def b2a_base64(data: ReadableBuffer, /, *, newline: bool = True) -> bytes: ...
74+
2075
def a2b_qp(data: _AsciiBuffer, header: bool = False) -> bytes: ...
2176
def b2a_qp(data: ReadableBuffer, quotetabs: bool = False, istext: bool = True, header: bool = False) -> bytes: ...
2277

@@ -34,8 +89,14 @@ def crc_hqx(data: ReadableBuffer, crc: int, /) -> int: ...
3489
def crc32(data: ReadableBuffer, crc: int = 0, /) -> int: ...
3590
def b2a_hex(data: ReadableBuffer, sep: str | bytes = ..., bytes_per_sep: int = 1) -> bytes: ...
3691
def hexlify(data: ReadableBuffer, sep: str | bytes = ..., bytes_per_sep: int = 1) -> bytes: ...
37-
def a2b_hex(hexstr: _AsciiBuffer, /) -> bytes: ...
38-
def unhexlify(hexstr: _AsciiBuffer, /) -> bytes: ...
92+
93+
if sys.version_info >= (3, 15):
94+
def a2b_hex(hexstr: _AsciiBuffer, /, *, ignorechars: ReadableBuffer = b"") -> bytes: ...
95+
def unhexlify(hexstr: _AsciiBuffer, /, *, ignorechars: ReadableBuffer = b"") -> bytes: ...
96+
97+
else:
98+
def a2b_hex(hexstr: _AsciiBuffer, /) -> bytes: ...
99+
def unhexlify(hexstr: _AsciiBuffer, /) -> bytes: ...
39100

40101
class Error(ValueError): ...
41102
class Incomplete(Exception): ...

0 commit comments

Comments
 (0)