From 6a272f0397c9752c2072444dcca99584d85ce5b2 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 27 Nov 2018 16:00:00 -0800 Subject: [PATCH 1/2] Improve overloads of parse_args() -- it never returns None Fixes #2641 --- stdlib/2and3/argparse.pyi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stdlib/2and3/argparse.pyi b/stdlib/2and3/argparse.pyi index cc9b2d82ec28..dc656b37c612 100644 --- a/stdlib/2and3/argparse.pyi +++ b/stdlib/2and3/argparse.pyi @@ -125,8 +125,12 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): @overload def parse_args(self, args: Optional[Sequence[_Text]] = ...) -> Namespace: ... @overload + def parse_args(self, args: Optional[Sequence[_Text]], namespace: None) -> Namespace: ... + @overload def parse_args(self, args: Optional[Sequence[_Text]], namespace: _N) -> _N: ... @overload + def parse_args(self, *, namespace: None) -> Namespace: ... + @overload def parse_args(self, *, namespace: _N) -> _N: ... if sys.version_info >= (3, 7): From be7afda9f0c911a161f9f0fd5af65327a8f721b6 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 27 Nov 2018 17:29:29 -0800 Subject: [PATCH 2/2] Add type-ignores to make the self-tests pass --- stdlib/2and3/argparse.pyi | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/stdlib/2and3/argparse.pyi b/stdlib/2and3/argparse.pyi index dc656b37c612..bdb471a30406 100644 --- a/stdlib/2and3/argparse.pyi +++ b/stdlib/2and3/argparse.pyi @@ -122,14 +122,17 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): argument_default: Optional[_Text] = ..., conflict_handler: _Text = ..., add_help: bool = ...) -> None: ... + + # The type-ignores in these overloads should be temporary. See: + # https://github.com/python/typeshed/pull/2643#issuecomment-442280277 @overload def parse_args(self, args: Optional[Sequence[_Text]] = ...) -> Namespace: ... @overload - def parse_args(self, args: Optional[Sequence[_Text]], namespace: None) -> Namespace: ... + def parse_args(self, args: Optional[Sequence[_Text]], namespace: None) -> Namespace: ... # type: ignore @overload def parse_args(self, args: Optional[Sequence[_Text]], namespace: _N) -> _N: ... @overload - def parse_args(self, *, namespace: None) -> Namespace: ... + def parse_args(self, *, namespace: None) -> Namespace: ... # type: ignore @overload def parse_args(self, *, namespace: _N) -> _N: ...