From c900c0e7693504bcf98e37bec1ca3268aafabc87 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 16 Dec 2021 16:05:45 +0100 Subject: [PATCH] Fix Python 3.10.1 problems pointed out by stubtest (#6604) Co-authored-by: Akuli --- .github/workflows/stubtest.yml | 8 +++++--- .github/workflows/tests.yml | 8 +++++--- stdlib/_codecs.pyi | 16 ++++++++++++++-- stdlib/dataclasses.pyi | 1 + stdlib/typing.pyi | 4 ++-- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/.github/workflows/stubtest.yml b/.github/workflows/stubtest.yml index 2432a7e17..fa11d7969 100644 --- a/.github/workflows/stubtest.yml +++ b/.github/workflows/stubtest.yml @@ -17,9 +17,11 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: ["ubuntu-latest", "windows-latest", "macos-latest"] - # Python 3.9.7 is required due to changes to ForwardRef. - python-version: ["3.6", "3.7", "3.8", "3.9.7", "3.10.0"] + # Temporarily disable "macos-latest", since Python 3.10.1 is not available. + # os: ["ubuntu-latest", "windows-latest", "macos-latest"] + os: ["ubuntu-latest", "windows-latest"] + # Temporarily hard-coded 3.10.1 due to stubtest incompatibilities. + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10.1"] fail-fast: false steps: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 661dbe7ff..b125705e5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -93,9 +93,11 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: ["ubuntu-latest", "windows-latest", "macos-latest"] - # Python 3.9.7 is required due to changes to ForwardRef. - python-version: ["3.6", "3.7", "3.8", "3.9.7", "3.10.0"] + # Temporarily disable "macos-latest", since Python 3.10.1 is not available. + # os: ["ubuntu-latest", "windows-latest", "macos-latest"] + os: ["ubuntu-latest", "windows-latest"] + # Temporarily hard-coded 3.10.1 due to stubtest incompatibilities. + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10.1"] fail-fast: false steps: diff --git a/stdlib/_codecs.pyi b/stdlib/_codecs.pyi index 5e4a9ad6d..a44a8a1a7 100644 --- a/stdlib/_codecs.pyi +++ b/stdlib/_codecs.pyi @@ -24,10 +24,22 @@ def escape_decode(__data: str | bytes, __errors: str | None = ...) -> tuple[str, def escape_encode(__data: bytes, __errors: str | None = ...) -> tuple[bytes, int]: ... def latin_1_decode(__data: bytes, __errors: str | None = ...) -> tuple[str, int]: ... def latin_1_encode(__str: str, __errors: str | None = ...) -> tuple[bytes, int]: ... -def raw_unicode_escape_decode(__data: str | bytes, __errors: str | None = ...) -> tuple[str, int]: ... + +if sys.version_info >= (3, 9): + def raw_unicode_escape_decode(__data: str | bytes, __errors: str | None = ..., __final: bool = ...) -> tuple[str, int]: ... + +else: + def raw_unicode_escape_decode(__data: str | bytes, __errors: str | None = ...) -> tuple[str, int]: ... + def raw_unicode_escape_encode(__str: str, __errors: str | None = ...) -> tuple[bytes, int]: ... def readbuffer_encode(__data: str | bytes, __errors: str | None = ...) -> tuple[bytes, int]: ... -def unicode_escape_decode(__data: str | bytes, __errors: str | None = ...) -> tuple[str, int]: ... + +if sys.version_info >= (3, 9): + def unicode_escape_decode(__data: str | bytes, __errors: str | None = ..., __final: bool = ...) -> tuple[str, int]: ... + +else: + def unicode_escape_decode(__data: str | bytes, __errors: str | None = ...) -> tuple[str, int]: ... + def unicode_escape_encode(__str: str, __errors: str | None = ...) -> tuple[bytes, int]: ... if sys.version_info < (3, 8): diff --git a/stdlib/dataclasses.pyi b/stdlib/dataclasses.pyi index 59efbe77a..06a484d7f 100644 --- a/stdlib/dataclasses.pyi +++ b/stdlib/dataclasses.pyi @@ -201,6 +201,7 @@ if sys.version_info >= (3, 10): unsafe_hash: bool = ..., frozen: bool = ..., match_args: bool = ..., + kw_only: bool = ..., slots: bool = ..., ) -> type: ... diff --git a/stdlib/typing.pyi b/stdlib/typing.pyi index 76a818b50..8c2d3157b 100644 --- a/stdlib/typing.pyi +++ b/stdlib/typing.pyi @@ -724,8 +724,8 @@ if sys.version_info >= (3, 7): __forward_value__: Any | None __forward_is_argument__: bool if sys.version_info >= (3, 9): - # The module argument was added in Python 3.9.7. - def __init__(self, arg: str, is_argument: bool = ..., module: Any | None = ...) -> None: ... + # The module and is_class arguments were added in later Python 3.9 versions. + def __init__(self, arg: str, is_argument: bool = ..., module: Any | None = ..., *, is_class: bool = ...) -> None: ... else: def __init__(self, arg: str, is_argument: bool = ...) -> None: ... def _evaluate(self, globalns: dict[str, Any] | None, localns: dict[str, Any] | None) -> Any | None: ...