diff --git a/stdlib/@tests/stubtest_allowlists/py315.txt b/stdlib/@tests/stubtest_allowlists/py315.txt index dc7e5fbe5c58..a8ad9ec62c21 100644 --- a/stdlib/@tests/stubtest_allowlists/py315.txt +++ b/stdlib/@tests/stubtest_allowlists/py315.txt @@ -60,19 +60,6 @@ annotationlib.ForwardRef.__resolved_str__ annotationlib.ForwardRef.__resolved_str_cache__ annotationlib.ForwardRef.__slots__ annotationlib.ForwardRef.__stringifier_dict__ -argparse.ArgumentParser.__init__ -argparse.ArgumentParser._get_formatter -argparse.ArgumentParser.format_help -argparse.ArgumentParser.format_usage -argparse.HelpFormatter.__init__ -array.typecodes -ast.DictComp.value -ast.Import.__match_args__ -ast.Import.is_lazy -ast.ImportFrom.__match_args__ -ast.ImportFrom.is_lazy -ast.dump -ast.parse ast.type_param.__init__ base64.a85decode base64.b16decode @@ -258,16 +245,6 @@ profiling.sampling.string_table profiling.tracing pydoc.Doc.STDLIB_DIR pydoc.Doc.getdocloc -re.Pattern.prefixmatch -re.__all__ -re.prefixmatch -shelve.BsdDbShelf.__init__ -shelve.DbfilenameShelf.__init__ -shelve.Shelf.__init__ -shelve.Shelf.reorganize -shelve.ShelveError -shelve.__all__ -shelve.open site.addsitedir site.addsitepackages site.addusersitepackages @@ -291,7 +268,6 @@ sys.last_exc sys.lazy_modules sys.set_lazy_imports sys.set_lazy_imports_filter -tarfile.TarFile.__init__ threading.Condition.locked threading.__all__ threading.concurrent_tee @@ -341,8 +317,6 @@ typing.Union typing._SpecialForm.__mro_entries__ typing_extensions.__all__ typing_extensions.Protocol -unittest._log._AssertLogsContext.__init__ -unittest.case.TestCase.assertLogs urllib.parse._DefragResultBase.geturl urllib.parse._ParseResultBase.geturl urllib.parse._SplitResultBase.geturl @@ -351,18 +325,6 @@ urllib.parse.urlparse urllib.parse.urlsplit urllib.parse.urlunparse urllib.parse.urlunsplit -warnings.WarningMessage.__init__ -wave.WAVE_FORMAT_EXTENSIBLE -wave.WAVE_FORMAT_IEEE_FLOAT -wave.Wave_read.getformat -wave.Wave_read.getmark -wave.Wave_read.getmarkers -wave.Wave_write.getformat -wave.Wave_write.getmark -wave.Wave_write.getmarkers -wave.Wave_write.setformat -wave.Wave_write.setmark -wave.__all__ xml.etree.ElementTree.__all__ xml.is_valid_name xml.utils diff --git a/stdlib/argparse.pyi b/stdlib/argparse.pyi index 9f190c4235f0..4c14c4639a39 100644 --- a/stdlib/argparse.pyi +++ b/stdlib/argparse.pyi @@ -161,7 +161,28 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): _subparsers: _ArgumentGroup | None # Note: the constructor arguments are also used in _SubParsersAction.add_parser. - if sys.version_info >= (3, 14): + if sys.version_info >= (3, 15): + def __init__( + self, + prog: str | None = None, + usage: str | None = None, + description: str | None = None, + epilog: str | None = None, + parents: Iterable[ArgumentParser] = [], + formatter_class: _FormatterClass = ..., + prefix_chars: str = "-", + fromfile_prefix_chars: str | None = None, + argument_default: Any = None, + conflict_handler: str = "error", + add_help: bool = True, + allow_abbrev: bool = True, + exit_on_error: bool = True, + *, + suggest_on_error: bool = True, + color: bool = True, + ) -> None: ... + + elif sys.version_info >= (3, 14): def __init__( self, prog: str | None = None, @@ -236,8 +257,14 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): ) -> _SubParsersAction[_ArgumentParserT]: ... def print_usage(self, file: SupportsWrite[str] | None = None) -> None: ... def print_help(self, file: SupportsWrite[str] | None = None) -> None: ... - def format_usage(self) -> str: ... - def format_help(self) -> str: ... + if sys.version_info >= (3, 15): + def format_usage(self, formatter: HelpFormatter | None = None) -> str: ... + def format_help(self, formatter: HelpFormatter | None = None) -> str: ... + + else: + def format_usage(self) -> str: ... + def format_help(self) -> str: ... + @overload def parse_known_args(self, args: Iterable[str] | None = None, namespace: None = None) -> tuple[Namespace, list[str]]: ... @overload @@ -284,7 +311,11 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): def _get_values(self, action: Action, arg_strings: list[str]) -> Any: ... def _get_value(self, action: Action, arg_string: str) -> Any: ... def _check_value(self, action: Action, value: Any) -> None: ... - def _get_formatter(self) -> HelpFormatter: ... + if sys.version_info >= (3, 15): + def _get_formatter(self, file: SupportsWrite[str] | None = None) -> HelpFormatter: ... + else: + def _get_formatter(self) -> HelpFormatter: ... + def _print_message(self, message: str, file: SupportsWrite[str] | None = None) -> None: ... class HelpFormatter: @@ -309,7 +340,12 @@ class HelpFormatter: def __init__(self, formatter: HelpFormatter, parent: Self | None, heading: str | None = None) -> None: ... def format_help(self) -> str: ... - if sys.version_info >= (3, 14): + if sys.version_info >= (3, 15): + def __init__( + self, prog: str, indent_increment: int = 2, max_help_position: int = 24, width: int | None = None + ) -> None: ... + + elif sys.version_info >= (3, 14): def __init__( self, prog: str, indent_increment: int = 2, max_help_position: int = 24, width: int | None = None, color: bool = True ) -> None: ... diff --git a/stdlib/array.pyi b/stdlib/array.pyi index f780c60dc34e..4ff1e171ecfc 100644 --- a/stdlib/array.pyi +++ b/stdlib/array.pyi @@ -6,7 +6,10 @@ from typing import Any, ClassVar, Literal, SupportsIndex, TypeAlias, TypeVar, ov from typing_extensions import Self, deprecated, disjoint_base _IntTypeCode: TypeAlias = Literal["b", "B", "h", "H", "i", "I", "l", "L", "q", "Q"] -_FloatTypeCode: TypeAlias = Literal["f", "d"] +if sys.version_info >= (3, 15): + _FloatTypeCode: TypeAlias = Literal["f", "d", "e", "Zf", "Zd"] +else: + _FloatTypeCode: TypeAlias = Literal["f", "d"] if sys.version_info >= (3, 13): _UnicodeTypeCode: TypeAlias = Literal["u", "w"] else: @@ -15,7 +18,10 @@ _TypeCode: TypeAlias = _IntTypeCode | _FloatTypeCode | _UnicodeTypeCode _T = TypeVar("_T", int, float, str) -typecodes: str +if sys.version_info >= (3, 15): + typecodes: tuple[str, ...] +else: + typecodes: str @disjoint_base class array(MutableSequence[_T]): diff --git a/stdlib/ast.pyi b/stdlib/ast.pyi index a3e11576fc55..0e07cf9c9950 100644 --- a/stdlib/ast.pyi +++ b/stdlib/ast.pyi @@ -710,22 +710,54 @@ class Assert(stmt): def __replace__(self, *, test: expr = ..., msg: expr | None = ..., **kwargs: Unpack[_Attributes]) -> Self: ... class Import(stmt): - __match_args__ = ("names",) + if sys.version_info >= (3, 15): + __match_args__ = ("names", "is_lazy") + else: + __match_args__ = ("names",) names: list[alias] - if sys.version_info >= (3, 13): + if sys.version_info >= (3, 15): + is_lazy: bool | None + if sys.version_info >= (3, 15): + def __init__(self, names: list[alias] = ..., is_lazy: bool | None = None, **kwargs: Unpack[_Attributes]) -> None: ... + + elif sys.version_info >= (3, 13): def __init__(self, names: list[alias] = ..., **kwargs: Unpack[_Attributes]) -> None: ... else: def __init__(self, names: list[alias], **kwargs: Unpack[_Attributes]) -> None: ... - if sys.version_info >= (3, 14): + if sys.version_info >= (3, 15): + def __replace__(self, *, names: list[alias] = ..., is_lazy: bool | None = ..., **kwargs: Unpack[_Attributes]) -> Self: ... + + elif sys.version_info >= (3, 14): def __replace__(self, *, names: list[alias] = ..., **kwargs: Unpack[_Attributes]) -> Self: ... class ImportFrom(stmt): - __match_args__ = ("module", "names", "level") + if sys.version_info >= (3, 15): + __match_args__ = ("module", "names", "level", "is_lazy") + else: + __match_args__ = ("module", "names", "level") module: str | None names: list[alias] level: int - if sys.version_info >= (3, 13): + if sys.version_info >= (3, 15): + is_lazy: bool | None + if sys.version_info >= (3, 15): + @overload + def __init__( + self, module: str | None, names: list[alias], level: int, is_lazy: bool | None = None, **kwargs: Unpack[_Attributes] + ) -> None: ... + @overload + def __init__( + self, + module: str | None = None, + names: list[alias] = ..., + *, + level: int, + is_lazy: bool | None = None, + **kwargs: Unpack[_Attributes], + ) -> None: ... + + elif sys.version_info >= (3, 13): @overload def __init__(self, module: str | None, names: list[alias], level: int, **kwargs: Unpack[_Attributes]) -> None: ... @overload @@ -740,7 +772,18 @@ class ImportFrom(stmt): self, module: str | None = None, *, names: list[alias], level: int, **kwargs: Unpack[_Attributes] ) -> None: ... - if sys.version_info >= (3, 14): + if sys.version_info >= (3, 15): + def __replace__( + self, + *, + module: str | None = ..., + names: list[alias] = ..., + level: int = ..., + is_lazy: bool | None = ..., + **kwargs: Unpack[_Attributes], + ) -> Self: ... + + elif sys.version_info >= (3, 14): def __replace__( self, *, module: str | None = ..., names: list[alias] = ..., level: int = ..., **kwargs: Unpack[_Attributes] ) -> Self: ... @@ -908,7 +951,10 @@ class SetComp(expr): class DictComp(expr): __match_args__ = ("key", "value", "generators") key: expr - value: expr + if sys.version_info >= (3, 15): + value: expr | None + else: + value: expr generators: list[comprehension] if sys.version_info >= (3, 13): def __init__( @@ -1672,7 +1718,105 @@ if sys.version_info < (3, 14): _T = _TypeVar("_T", bound=AST) -if sys.version_info >= (3, 13): +if sys.version_info >= (3, 15): + @overload + def parse( + source: _T, + filename: str | bytes | os.PathLike[Any] = "", + mode: Literal["exec", "eval", "func_type", "single"] = "exec", + *, + type_comments: bool = False, + feature_version: None | int | tuple[int, int] = None, + optimize: Literal[-1, 0, 1, 2] = -1, + module: str | None = None, + ) -> _T: ... + @overload + def parse( + source: str | ReadableBuffer, + filename: str | bytes | os.PathLike[Any] = "", + mode: Literal["exec"] = "exec", + *, + type_comments: bool = False, + feature_version: None | int | tuple[int, int] = None, + optimize: Literal[-1, 0, 1, 2] = -1, + module: str | None = None, + ) -> Module: ... + @overload + def parse( + source: str | ReadableBuffer, + filename: str | bytes | os.PathLike[Any], + mode: Literal["eval"], + *, + type_comments: bool = False, + feature_version: None | int | tuple[int, int] = None, + optimize: Literal[-1, 0, 1, 2] = -1, + module: str | None = None, + ) -> Expression: ... + @overload + def parse( + source: str | ReadableBuffer, + filename: str | bytes | os.PathLike[Any], + mode: Literal["func_type"], + *, + type_comments: bool = False, + feature_version: None | int | tuple[int, int] = None, + optimize: Literal[-1, 0, 1, 2] = -1, + module: str | None = None, + ) -> FunctionType: ... + @overload + def parse( + source: str | ReadableBuffer, + filename: str | bytes | os.PathLike[Any], + mode: Literal["single"], + *, + type_comments: bool = False, + feature_version: None | int | tuple[int, int] = None, + optimize: Literal[-1, 0, 1, 2] = -1, + module: str | None = None, + ) -> Interactive: ... + @overload + def parse( + source: str | ReadableBuffer, + *, + mode: Literal["eval"], + type_comments: bool = False, + feature_version: None | int | tuple[int, int] = None, + optimize: Literal[-1, 0, 1, 2] = -1, + module: str | None = None, + ) -> Expression: ... + @overload + def parse( + source: str | ReadableBuffer, + *, + mode: Literal["func_type"], + type_comments: bool = False, + feature_version: None | int | tuple[int, int] = None, + optimize: Literal[-1, 0, 1, 2] = -1, + module: str | None = None, + ) -> FunctionType: ... + @overload + def parse( + source: str | ReadableBuffer, + *, + mode: Literal["single"], + type_comments: bool = False, + feature_version: None | int | tuple[int, int] = None, + optimize: Literal[-1, 0, 1, 2] = -1, + module: str | None = None, + ) -> Interactive: ... + @overload + def parse( + source: str | ReadableBuffer, + filename: str | bytes | os.PathLike[Any] = "", + mode: str = "exec", + *, + type_comments: bool = False, + feature_version: None | int | tuple[int, int] = None, + optimize: Literal[-1, 0, 1, 2] = -1, + module: str | None = None, + ) -> mod: ... + +elif sys.version_info >= (3, 13): @overload def parse( source: _T, @@ -1843,7 +1987,18 @@ else: def literal_eval(node_or_string: str | AST) -> Any: ... -if sys.version_info >= (3, 13): +if sys.version_info >= (3, 15): + def dump( + node: AST, + annotate_fields: bool = True, + include_attributes: bool = False, + *, + indent: int | str | None = None, + show_empty: bool = False, + color: bool = False, + ) -> str: ... + +elif sys.version_info >= (3, 13): def dump( node: AST, annotate_fields: bool = True, diff --git a/stdlib/faulthandler.pyi b/stdlib/faulthandler.pyi index 17d4eef69af7..6999933c43b9 100644 --- a/stdlib/faulthandler.pyi +++ b/stdlib/faulthandler.pyi @@ -3,16 +3,39 @@ from _typeshed import FileDescriptorLike def cancel_dump_traceback_later() -> None: ... def disable() -> None: ... -def dump_traceback(file: FileDescriptorLike = sys.stderr, all_threads: bool = True) -> None: ... + +if sys.version_info >= (3, 15): + def dump_traceback( + file: FileDescriptorLike = sys.stderr, all_threads: bool = True, *, max_threads: int | None = None + ) -> None: ... + +else: + def dump_traceback(file: FileDescriptorLike = sys.stderr, all_threads: bool = True) -> None: ... if sys.version_info >= (3, 14): def dump_c_stack(file: FileDescriptorLike = sys.stderr) -> None: ... -def dump_traceback_later( - timeout: float, repeat: bool = False, file: FileDescriptorLike = sys.stderr, exit: bool = False -) -> None: ... +if sys.version_info >= (3, 15): + def dump_traceback_later( + timeout: float, + repeat: bool = False, + file: FileDescriptorLike = sys.stderr, + exit: bool = False, + *, + max_threads: int | None = None, + ) -> None: ... -if sys.version_info >= (3, 14): +else: + def dump_traceback_later( + timeout: float, repeat: bool = False, file: FileDescriptorLike = sys.stderr, exit: bool = False + ) -> None: ... + +if sys.version_info >= (3, 15): + def enable( + file: FileDescriptorLike = sys.stderr, all_threads: bool = True, c_stack: bool = True, *, max_threads: int | None = None + ) -> None: ... + +elif sys.version_info >= (3, 14): def enable(file: FileDescriptorLike = sys.stderr, all_threads: bool = True, c_stack: bool = True) -> None: ... else: @@ -21,5 +44,18 @@ else: def is_enabled() -> bool: ... if sys.platform != "win32": - def register(signum: int, file: FileDescriptorLike = sys.stderr, all_threads: bool = True, chain: bool = False) -> None: ... + if sys.version_info >= (3, 15): + def register( + signum: int, + file: FileDescriptorLike = sys.stderr, + all_threads: bool = True, + chain: bool = False, + *, + max_threads: int | None = None, + ) -> None: ... + else: + def register( + signum: int, file: FileDescriptorLike = sys.stderr, all_threads: bool = True, chain: bool = False + ) -> None: ... + def unregister(signum: int, /) -> None: ... diff --git a/stdlib/re.pyi b/stdlib/re.pyi index c83e411c8121..2fb1bd0d6c96 100644 --- a/stdlib/re.pyi +++ b/stdlib/re.pyi @@ -1,6 +1,4 @@ import enum -import sre_compile -import sre_constants import sys from _typeshed import MaybeNone, ReadableBuffer from collections.abc import Callable, Iterator, Mapping @@ -38,6 +36,8 @@ __all__ = [ "Match", "Pattern", ] +if sys.version_info >= (3, 15): + __all__ += ["prefixmatch"] if sys.version_info < (3, 13): __all__ += ["template"] @@ -47,8 +47,6 @@ if sys.version_info >= (3, 11): if sys.version_info >= (3, 13): __all__ += ["PatternError"] - PatternError = sre_constants.error - _T = TypeVar("_T") # The implementation defines this in re._constants (version_info >= 3, 11) or @@ -61,6 +59,9 @@ class error(Exception): colno: int def __init__(self, msg: str, pattern: str | bytes | None = None, pos: int | None = None) -> None: ... +if sys.version_info >= (3, 13): + PatternError = error + @final class Match(Generic[AnyStr]): @property @@ -139,6 +140,9 @@ class Pattern(Generic[AnyStr]): def match(self: Pattern[bytes], string: ReadableBuffer, pos: int = 0, endpos: int = sys.maxsize) -> Match[bytes] | None: ... @overload def match(self, string: AnyStr, pos: int = 0, endpos: int = sys.maxsize) -> Match[AnyStr] | None: ... + if sys.version_info >= (3, 15): + prefixmatch = match + @overload def fullmatch(self: Pattern[str], string: str, pos: int = 0, endpos: int = sys.maxsize) -> Match[str] | None: ... @overload @@ -199,23 +203,23 @@ class Pattern(Generic[AnyStr]): # ----- re variables and constants ----- class RegexFlag(enum.IntFlag): - A = sre_compile.SRE_FLAG_ASCII + A = 256 ASCII = A - DEBUG = sre_compile.SRE_FLAG_DEBUG - I = sre_compile.SRE_FLAG_IGNORECASE + DEBUG = 128 + I = 2 IGNORECASE = I - L = sre_compile.SRE_FLAG_LOCALE + L = 4 LOCALE = L - M = sre_compile.SRE_FLAG_MULTILINE + M = 8 MULTILINE = M - S = sre_compile.SRE_FLAG_DOTALL + S = 16 DOTALL = S - X = sre_compile.SRE_FLAG_VERBOSE + X = 64 VERBOSE = X - U = sre_compile.SRE_FLAG_UNICODE + U = 32 UNICODE = U if sys.version_info < (3, 13): - T = sre_compile.SRE_FLAG_TEMPLATE + T = 1 TEMPLATE = T if sys.version_info >= (3, 11): NOFLAG = 0 @@ -261,6 +265,13 @@ def search(pattern: bytes | Pattern[bytes], string: ReadableBuffer, flags: _Flag def match(pattern: str | Pattern[str], string: str, flags: _FlagsType = 0) -> Match[str] | None: ... @overload def match(pattern: bytes | Pattern[bytes], string: ReadableBuffer, flags: _FlagsType = 0) -> Match[bytes] | None: ... + +if sys.version_info >= (3, 15): + @overload + def prefixmatch(pattern: str | Pattern[str], string: str, flags: _FlagsType = 0) -> Match[str] | None: ... + @overload + def prefixmatch(pattern: bytes | Pattern[bytes], string: ReadableBuffer, flags: _FlagsType = 0) -> Match[bytes] | None: ... + @overload def fullmatch(pattern: str | Pattern[str], string: str, flags: _FlagsType = 0) -> Match[str] | None: ... @overload diff --git a/stdlib/shelve.pyi b/stdlib/shelve.pyi index 654c2ea097f7..5e250d6aadbb 100644 --- a/stdlib/shelve.pyi +++ b/stdlib/shelve.pyi @@ -1,20 +1,43 @@ import sys from _typeshed import StrOrBytesPath -from collections.abc import Iterator, MutableMapping +from collections.abc import Callable, Iterator, MutableMapping from dbm import _TFlags from types import TracebackType from typing import Any, TypeVar, overload from typing_extensions import Self __all__ = ["Shelf", "BsdDbShelf", "DbfilenameShelf", "open"] +if sys.version_info >= (3, 15): + __all__ += ["ShelveError"] _T = TypeVar("_T") _VT = TypeVar("_VT") +if sys.version_info >= (3, 15): + class ShelveError(Exception): ... + class Shelf(MutableMapping[str, _VT]): - def __init__( - self, dict: MutableMapping[bytes, bytes], protocol: int | None = None, writeback: bool = False, keyencoding: str = "utf-8" - ) -> None: ... + if sys.version_info >= (3, 15): + def __init__( + self, + dict: MutableMapping[bytes, bytes], + protocol: int | None = None, + writeback: bool = False, + keyencoding: str = "utf-8", + *, + serializer: Callable[[Any], bytes] | None = None, + deserializer: Callable[[bytes], Any] | None = None, + ) -> None: ... + + else: + def __init__( + self, + dict: MutableMapping[bytes, bytes], + protocol: int | None = None, + writeback: bool = False, + keyencoding: str = "utf-8", + ) -> None: ... + def __iter__(self) -> Iterator[str]: ... def __len__(self) -> int: ... @overload # type: ignore[override] @@ -34,6 +57,8 @@ class Shelf(MutableMapping[str, _VT]): def __del__(self) -> None: ... def close(self) -> None: ... def sync(self) -> None: ... + if sys.version_info >= (3, 15): + def reorganize(self) -> None: ... class BsdDbShelf(Shelf[_VT]): def set_location(self, key: str) -> tuple[str, _VT]: ... @@ -43,14 +68,38 @@ class BsdDbShelf(Shelf[_VT]): def last(self) -> tuple[str, _VT]: ... class DbfilenameShelf(Shelf[_VT]): - if sys.version_info >= (3, 11): + if sys.version_info >= (3, 15): + def __init__( + self, + filename: StrOrBytesPath, + flag: _TFlags = "c", + protocol: int | None = None, + writeback: bool = False, + *, + serializer: Callable[[Any], bytes] | None = None, + deserializer: Callable[[bytes], Any] | None = None, + ) -> None: ... + + elif sys.version_info >= (3, 11): def __init__( self, filename: StrOrBytesPath, flag: _TFlags = "c", protocol: int | None = None, writeback: bool = False ) -> None: ... + else: def __init__(self, filename: str, flag: _TFlags = "c", protocol: int | None = None, writeback: bool = False) -> None: ... -if sys.version_info >= (3, 11): +if sys.version_info >= (3, 15): + def open( + filename: StrOrBytesPath, + flag: _TFlags = "c", + protocol: int | None = None, + writeback: bool = False, + *, + serializer: Callable[[Any], bytes] | None = None, + deserializer: Callable[[bytes], Any] | None = None, + ) -> Shelf[Any]: ... + +elif sys.version_info >= (3, 11): def open( filename: StrOrBytesPath, flag: _TFlags = "c", protocol: int | None = None, writeback: bool = False ) -> Shelf[Any]: ... diff --git a/stdlib/tarfile.pyi b/stdlib/tarfile.pyi index 4e4738498b19..9bc738c9fd7b 100644 --- a/stdlib/tarfile.pyi +++ b/stdlib/tarfile.pyi @@ -132,7 +132,27 @@ class TarFile: errorlevel: Literal[0, 1, 2] offset: int # undocumented extraction_filter: _FilterFunction | None - if sys.version_info >= (3, 13): + if sys.version_info >= (3, 15): + stream: bool + def __init__( + self, + name: StrOrBytesPath | None = None, + mode: Literal["r", "a", "w", "x"] = "r", + fileobj: _Fileobj | None = None, + format: int | None = None, + tarinfo: type[TarInfo] | None = None, + dereference: bool | None = None, + ignore_zeros: bool | None = None, + encoding: str | None = None, + errors: str = "surrogateescape", + pax_headers: Mapping[str, str] | None = None, + debug: Literal[0, 1, 2, 3] | None = None, # default 0 + errorlevel: Literal[0, 1, 2] | None = None, # default 1 + copybufsize: int | None = None, # undocumented + stream: bool = False, + mtime: float | None = None, + ) -> None: ... + elif sys.version_info >= (3, 13): stream: bool def __init__( self, diff --git a/stdlib/unittest/_log.pyi b/stdlib/unittest/_log.pyi index 09ba7d945025..da6ce5a5ac7a 100644 --- a/stdlib/unittest/_log.pyi +++ b/stdlib/unittest/_log.pyi @@ -1,4 +1,5 @@ import logging +import sys from types import TracebackType from typing import ClassVar, Generic, NamedTuple, TypeVar from unittest.case import TestCase, _BaseTestCaseContext @@ -15,7 +16,13 @@ class _AssertLogsContext(_BaseTestCaseContext, Generic[_L]): level: int msg: None no_logs: bool - def __init__(self, test_case: TestCase, logger_name: str, level: int, no_logs: bool) -> None: ... + if sys.version_info >= (3, 15): + def __init__( + self, test_case: TestCase, logger_name: str, level: int, no_logs: bool, formatter: logging.Formatter | None = None + ) -> None: ... + else: + def __init__(self, test_case: TestCase, logger_name: str, level: int, no_logs: bool) -> None: ... + def __enter__(self) -> _L: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, tb: TracebackType | None diff --git a/stdlib/unittest/case.pyi b/stdlib/unittest/case.pyi index b8b3fa5c7ebe..f40e84366a8d 100644 --- a/stdlib/unittest/case.pyi +++ b/stdlib/unittest/case.pyi @@ -178,9 +178,18 @@ class TestCase: def assertWarnsRegex( self, expected_warning: type[Warning] | tuple[type[Warning], ...], expected_regex: str | Pattern[str], *, msg: Any = ... ) -> _AssertWarnsContext: ... - def assertLogs( - self, logger: str | logging.Logger | None = None, level: int | str | None = None - ) -> _AssertLogsContext[_LoggingWatcher]: ... + if sys.version_info >= (3, 15): + def assertLogs( + self, + logger: str | logging.Logger | None = None, + level: int | str | None = None, + formatter: logging.Formatter | None = None, + ) -> _AssertLogsContext[_LoggingWatcher]: ... + else: + def assertLogs( + self, logger: str | logging.Logger | None = None, level: int | str | None = None + ) -> _AssertLogsContext[_LoggingWatcher]: ... + def assertNoLogs( self, logger: str | logging.Logger | None = None, level: int | str | None = None ) -> _AssertLogsContext[None]: ... diff --git a/stdlib/warnings.pyi b/stdlib/warnings.pyi index 188b6bb6b246..da281e38ddd0 100644 --- a/stdlib/warnings.pyi +++ b/stdlib/warnings.pyi @@ -56,16 +56,32 @@ class WarningMessage: file: TextIO | None line: str | None source: Any | None - def __init__( - self, - message: Warning | str, - category: type[Warning], - filename: str, - lineno: int, - file: TextIO | None = None, - line: str | None = None, - source: Any | None = None, - ) -> None: ... + if sys.version_info >= (3, 15): + module: str | None + if sys.version_info >= (3, 15): + def __init__( + self, + message: Warning | str, + category: type[Warning], + filename: str, + lineno: int, + file: TextIO | None = None, + line: str | None = None, + source: Any | None = None, + module: str | None = None, + ) -> None: ... + + else: + def __init__( + self, + message: Warning | str, + category: type[Warning], + filename: str, + lineno: int, + file: TextIO | None = None, + line: str | None = None, + source: Any | None = None, + ) -> None: ... class catch_warnings(Generic[_W_co]): if sys.version_info >= (3, 11): diff --git a/stdlib/wave.pyi b/stdlib/wave.pyi index f0fdef5233e2..0692d462f002 100644 --- a/stdlib/wave.pyi +++ b/stdlib/wave.pyi @@ -4,12 +4,17 @@ from typing import IO, Any, BinaryIO, Final, Literal, NamedTuple, NoReturn, Type from typing_extensions import Self, deprecated __all__ = ["open", "Error", "Wave_read", "Wave_write"] +if sys.version_info >= (3, 15): + __all__ += ["WAVE_FORMAT_PCM", "WAVE_FORMAT_IEEE_FLOAT", "WAVE_FORMAT_EXTENSIBLE"] _File: TypeAlias = str | IO[bytes] class Error(Exception): ... WAVE_FORMAT_PCM: Final = 0x0001 +if sys.version_info >= (3, 15): + WAVE_FORMAT_IEEE_FLOAT: Final = 0x0003 + WAVE_FORMAT_EXTENSIBLE: Final = 0xFFFE class _wave_params(NamedTuple): nchannels: int @@ -32,10 +37,15 @@ class Wave_read: def getnframes(self) -> int: ... def getsampwidth(self) -> int: ... def getframerate(self) -> int: ... + if sys.version_info >= (3, 15): + def getformat(self) -> int: ... + def getcomptype(self) -> str: ... def getcompname(self) -> str: ... def getparams(self) -> _wave_params: ... - if sys.version_info >= (3, 13): + if sys.version_info >= (3, 15): + pass + elif sys.version_info >= (3, 13): @deprecated("Deprecated since Python 3.13; will be removed in Python 3.15.") def getmarkers(self) -> None: ... @deprecated("Deprecated since Python 3.13; will be removed in Python 3.15.") @@ -58,24 +68,31 @@ class Wave_write: def getsampwidth(self) -> int: ... def setframerate(self, framerate: float) -> None: ... def getframerate(self) -> int: ... + if sys.version_info >= (3, 15): + def setformat(self, format: int) -> None: ... + def getformat(self) -> int: ... + def setnframes(self, nframes: int) -> None: ... def getnframes(self) -> int: ... def setcomptype(self, comptype: str, compname: str) -> None: ... def getcomptype(self) -> str: ... def getcompname(self) -> str: ... - def setparams(self, params: _wave_params | tuple[int, int, int, int, str, str]) -> None: ... + if sys.version_info >= (3, 15): + def setparams( + self, params: _wave_params | tuple[int, int, int, int, str, str] | tuple[int, int, int, int, str, str, int] + ) -> None: ... + else: + def setparams(self, params: _wave_params | tuple[int, int, int, int, str, str]) -> None: ... + def getparams(self) -> _wave_params: ... - if sys.version_info >= (3, 13): + + if sys.version_info < (3, 15): @deprecated("Deprecated since Python 3.13; will be removed in Python 3.15.") def setmark(self, id: Any, pos: Any, name: Any) -> NoReturn: ... @deprecated("Deprecated since Python 3.13; will be removed in Python 3.15.") def getmark(self, id: Any) -> NoReturn: ... @deprecated("Deprecated since Python 3.13; will be removed in Python 3.15.") def getmarkers(self) -> None: ... - else: - def setmark(self, id: Any, pos: Any, name: Any) -> NoReturn: ... - def getmark(self, id: Any) -> NoReturn: ... - def getmarkers(self) -> None: ... def tell(self) -> int: ... def writeframesraw(self, data: ReadableBuffer) -> None: ...