diff --git a/stdlib/@tests/stubtest_allowlists/py310.txt b/stdlib/@tests/stubtest_allowlists/py310.txt index 8d0631cdd..cff86548a 100644 --- a/stdlib/@tests/stubtest_allowlists/py310.txt +++ b/stdlib/@tests/stubtest_allowlists/py310.txt @@ -3,7 +3,7 @@ _weakref.ProxyType.__reversed__ # Doesn't really exist asyncio.base_events.BaseEventLoop.subprocess_exec # BaseEventLoop adds several parameters and stubtest fails on the difference if we add them builtins.float.__setformat__ # Internal method for CPython test suite builtins.property.__set_name__ # Doesn't actually exist -bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set +_?bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set collections\.UserList\.index # ignoring pos-or-keyword parameter configparser.ParsingError.filename contextlib.AbstractAsyncContextManager.__class_getitem__ diff --git a/stdlib/@tests/stubtest_allowlists/py311.txt b/stdlib/@tests/stubtest_allowlists/py311.txt index 89755650e..ff4e07b7f 100644 --- a/stdlib/@tests/stubtest_allowlists/py311.txt +++ b/stdlib/@tests/stubtest_allowlists/py311.txt @@ -5,7 +5,7 @@ _collections_abc.Iterable.__class_getitem__ _collections_abc.MappingView.__class_getitem__ _csv.Reader _csv.Writer -bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set +_?bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set configparser.ParsingError.filename collections\.UserList\.index # ignoring pos-or-keyword parameter enum.Enum.__init__ diff --git a/stdlib/@tests/stubtest_allowlists/py38.txt b/stdlib/@tests/stubtest_allowlists/py38.txt index 547d84e03..d24b77d9c 100644 --- a/stdlib/@tests/stubtest_allowlists/py38.txt +++ b/stdlib/@tests/stubtest_allowlists/py38.txt @@ -14,7 +14,7 @@ asyncio.transports.WriteTransport.get_write_buffer_limits # Documented. Exists asyncio.WriteTransport.get_write_buffer_limits # Documented. Exists in subclasses, but not in WriteTransport itself builtins.float.__set_format__ # Internal method for CPython test suite builtins.input # Incorrect default value in text signature, fixed in 3.10 -bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set +_?bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set collections.AsyncGenerator.asend # async at runtime, deliberately not in the stub, see #7491. Pos-only differences also. collections.AsyncGenerator.__anext__ # async at runtime, deliberately not in the stub, see #7491 collections.AsyncGenerator.aclose # async at runtime, deliberately not in the stub, see #7491 diff --git a/stdlib/@tests/stubtest_allowlists/py39.txt b/stdlib/@tests/stubtest_allowlists/py39.txt index 9c646178b..0355043a9 100644 --- a/stdlib/@tests/stubtest_allowlists/py39.txt +++ b/stdlib/@tests/stubtest_allowlists/py39.txt @@ -3,7 +3,7 @@ ast.ExtSlice.__new__ ast.Index.__new__ builtins.float.__setformat__ # Internal method for CPython test suite builtins.input # Incorrect default value in text signature, fixed in 3.10 -bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set +_?bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set collections.AsyncGenerator.asend # async at runtime, deliberately not in the stub, see #7491. Pos-only differences also. collections.AsyncGenerator.__anext__ # async at runtime, deliberately not in the stub, see #7491 collections.AsyncGenerator.aclose # async at runtime, deliberately not in the stub, see #7491 diff --git a/stdlib/VERSIONS b/stdlib/VERSIONS index 581ee1a00..702fdbab7 100644 --- a/stdlib/VERSIONS +++ b/stdlib/VERSIONS @@ -24,6 +24,7 @@ _asyncio: 3.0- _bisect: 3.0- _blake2: 3.6- _bootlocale: 3.4-3.9 +_bz2: 3.3- _codecs: 3.0- _collections_abc: 3.3- _compat_pickle: 3.1- diff --git a/stdlib/_bz2.pyi b/stdlib/_bz2.pyi new file mode 100644 index 000000000..4ba26fe96 --- /dev/null +++ b/stdlib/_bz2.pyi @@ -0,0 +1,18 @@ +from _typeshed import ReadableBuffer +from typing import final + +@final +class BZ2Compressor: + def __init__(self, compresslevel: int = 9) -> None: ... + def compress(self, data: ReadableBuffer, /) -> bytes: ... + def flush(self) -> bytes: ... + +@final +class BZ2Decompressor: + def decompress(self, data: ReadableBuffer, max_length: int = -1) -> bytes: ... + @property + def eof(self) -> bool: ... + @property + def needs_input(self) -> bool: ... + @property + def unused_data(self) -> bytes: ... diff --git a/stdlib/bz2.pyi b/stdlib/bz2.pyi index cd11baa1a..ee5587031 100644 --- a/stdlib/bz2.pyi +++ b/stdlib/bz2.pyi @@ -1,9 +1,10 @@ import _compression import sys +from _bz2 import BZ2Compressor as BZ2Compressor, BZ2Decompressor as BZ2Decompressor from _compression import BaseStream from _typeshed import ReadableBuffer, StrOrBytesPath, WriteableBuffer from collections.abc import Iterable -from typing import IO, Any, Literal, Protocol, SupportsIndex, TextIO, final, overload +from typing import IO, Any, Literal, Protocol, SupportsIndex, TextIO, overload from typing_extensions import Self, TypeAlias __all__ = ["BZ2File", "BZ2Compressor", "BZ2Decompressor", "open", "compress", "decompress"] @@ -128,19 +129,3 @@ class BZ2File(BaseStream, IO[bytes]): def seek(self, offset: int, whence: int = 0) -> int: ... def write(self, data: ReadableBuffer) -> int: ... def writelines(self, seq: Iterable[ReadableBuffer]) -> None: ... - -@final -class BZ2Compressor: - def __init__(self, compresslevel: int = 9) -> None: ... - def compress(self, data: ReadableBuffer, /) -> bytes: ... - def flush(self) -> bytes: ... - -@final -class BZ2Decompressor: - def decompress(self, data: ReadableBuffer, max_length: int = -1) -> bytes: ... - @property - def eof(self) -> bool: ... - @property - def needs_input(self) -> bool: ... - @property - def unused_data(self) -> bytes: ...