From 6379d799d66cba306833ce9d0a6b70625835bd0f Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Wed, 7 Aug 2019 14:05:25 +0200 Subject: [PATCH 1/5] Fix Match.group problems * group() may return None values * group() allows to mix int and str arguments * Use concrete return type * Merge overloads --- stdlib/3/typing.pyi | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/stdlib/3/typing.pyi b/stdlib/3/typing.pyi index 1fefd23a2bf4..ec02fe5ac07e 100644 --- a/stdlib/3/typing.pyi +++ b/stdlib/3/typing.pyi @@ -526,15 +526,9 @@ class Match(Generic[AnyStr]): def expand(self, template: AnyStr) -> AnyStr: ... @overload - def group(self, group1: int = ...) -> AnyStr: ... + def group(self, group1: Union[str, int] = ...) -> Optional[AnyStr]: ... @overload - def group(self, group1: str) -> AnyStr: ... - @overload - def group(self, group1: int, group2: int, - *groups: int) -> Sequence[AnyStr]: ... - @overload - def group(self, group1: str, group2: str, - *groups: str) -> Sequence[AnyStr]: ... + def group(self, group1: Union[str, int], group2: Union[str, int], *groups: Union[str, int]) -> Tuple[Optional[AnyStr], ...]: ... def groups(self, default: AnyStr = ...) -> Sequence[AnyStr]: ... def groupdict(self, default: AnyStr = ...) -> dict[str, AnyStr]: ... From 22fba264c1b85821eed9df176f6f08ee180236e7 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Wed, 7 Aug 2019 18:27:44 +0200 Subject: [PATCH 2/5] Mark arguments as positional-only --- stdlib/3/typing.pyi | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/stdlib/3/typing.pyi b/stdlib/3/typing.pyi index ec02fe5ac07e..c217e7f5fcf2 100644 --- a/stdlib/3/typing.pyi +++ b/stdlib/3/typing.pyi @@ -526,9 +526,14 @@ class Match(Generic[AnyStr]): def expand(self, template: AnyStr) -> AnyStr: ... @overload - def group(self, group1: Union[str, int] = ...) -> Optional[AnyStr]: ... + def group(self, __group: Union[str, int]) -> Optional[AnyStr]: ... @overload - def group(self, group1: Union[str, int], group2: Union[str, int], *groups: Union[str, int]) -> Tuple[Optional[AnyStr], ...]: ... + def group( + self, + __group1: Union[str, int], + __group2: Union[str, int], + *groups: Union[str, int], + ) -> Tuple[Optional[AnyStr], ...]: ... def groups(self, default: AnyStr = ...) -> Sequence[AnyStr]: ... def groupdict(self, default: AnyStr = ...) -> dict[str, AnyStr]: ... From 692dddb862f3c425b69ee923dcc83b2dba024a91 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Wed, 7 Aug 2019 18:29:42 +0200 Subject: [PATCH 3/5] Add overload for group 0 --- stdlib/3/typing.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stdlib/3/typing.pyi b/stdlib/3/typing.pyi index c217e7f5fcf2..116461ab0c0c 100644 --- a/stdlib/3/typing.pyi +++ b/stdlib/3/typing.pyi @@ -525,6 +525,7 @@ class Match(Generic[AnyStr]): def expand(self, template: AnyStr) -> AnyStr: ... + def group(self, __group: Literal[0] = ...) -> AnyStr: ... @overload def group(self, __group: Union[str, int]) -> Optional[AnyStr]: ... @overload From 318605c868f6333f378e5d99ecc2d72cfde2af5a Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Wed, 7 Aug 2019 21:25:56 +0200 Subject: [PATCH 4/5] Add missing @overload --- stdlib/3/typing.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stdlib/3/typing.pyi b/stdlib/3/typing.pyi index 116461ab0c0c..b2df27645e77 100644 --- a/stdlib/3/typing.pyi +++ b/stdlib/3/typing.pyi @@ -525,6 +525,7 @@ class Match(Generic[AnyStr]): def expand(self, template: AnyStr) -> AnyStr: ... + @overload def group(self, __group: Literal[0] = ...) -> AnyStr: ... @overload def group(self, __group: Union[str, int]) -> Optional[AnyStr]: ... From 48bc000279c5c3957005fe18b787ce995d294257 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 8 Aug 2019 10:21:37 +0200 Subject: [PATCH 5/5] Import Literal on Python < 3.8 --- stdlib/3/typing.pyi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/stdlib/3/typing.pyi b/stdlib/3/typing.pyi index b2df27645e77..8b2481e55feb 100644 --- a/stdlib/3/typing.pyi +++ b/stdlib/3/typing.pyi @@ -5,6 +5,9 @@ from abc import abstractmethod, ABCMeta from types import CodeType, FrameType, TracebackType import collections # Needed by aliases like DefaultDict, see mypy issue 2986 +if sys.version_info < (3, 8): + from typing_extensions import Literal + # Definitions of special type checking related constructs. Their definition # are not used, so their value does not matter.