From cf946bd4c3e2178e92d67a860d559fe938e0231e Mon Sep 17 00:00:00 2001 From: CraftSpider Date: Fri, 11 Oct 2019 17:24:26 -0400 Subject: [PATCH 1/7] Add stubs for bdb module --- stdlib/2and3/bdb.pyi | 94 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 stdlib/2and3/bdb.pyi diff --git a/stdlib/2and3/bdb.pyi b/stdlib/2and3/bdb.pyi new file mode 100644 index 000000000000..d3041d53ee54 --- /dev/null +++ b/stdlib/2and3/bdb.pyi @@ -0,0 +1,94 @@ + +from typing import Set, Dict, Iterable, Any, Callable, Tuple, Type, SupportsInt, List, Union, TypeVar, Optional, IO +from types import FrameType, TracebackType, CodeType + + +_T = TypeVar("_T") +_TraceDispatch = Callable[[FrameType, str, Any], '_TraceDispatch'] # type: ignore +_ExcInfo = Tuple[Type[BaseException], BaseException, FrameType] + +GENERATOR_AND_COROUTINE_FLAGS: int = ... + +class BdbQuit(Exception): ... + +class Bdb: + + skip: Set[str] + breaks: Dict[str, List[int]] + fncache: Dict[str, str] + frame_returning: None + botframe: Optional[FrameType] + quitting: bool + stopframe: Optional[FrameType] + returnframe: Optional[FrameType] + stoplineno: int + + def __init__(self, skip: Iterable[str] = ...) -> None: ... + def canonic(self, filename: str) -> str: ... + def reset(self) -> None: ... + def trace_dispatch(self, frame: FrameType, event: str, arg: Any) -> _TraceDispatch: ... + def dispatch_line(self, frame: FrameType) -> _TraceDispatch: ... + def dispatch_call(self, frame: FrameType, arg: None) -> _TraceDispatch: ... + def dispatch_return(self, frame: FrameType, arg: Any) -> _TraceDispatch: ... + def dispatch_exception(self, frame: FrameType, arg: _ExcInfo) -> _TraceDispatch: ... + def is_skipped_module(self, module_name: str) -> bool: ... + def stop_here(self, frame: FrameType) -> bool: ... + def break_here(self, frame: FrameType) -> bool: ... + def do_clear(self, arg) -> None: ... + def break_anywhere(self, frame: FrameType) -> bool: ... + def user_call(self, frame: FrameType, argument_list: None) -> None: ... + def user_line(self, frame: FrameType) -> None: ... + def user_return(self, frame: FrameType, return_value: Any) -> None: ... + def user_exception(self, frame: FrameType, exc_info: _ExcInfo) -> None: ... + def set_until(self, frame: FrameType, lineno: int = ...) -> None: ... + def set_step(self) -> None: ... + def set_next(self, frame: FrameType) -> None: ... + def set_return(self, frame: FrameType) -> None: ... + def set_trace(self, frame: FrameType = ...) -> None: ... + def set_continue(self) -> None: ... + def set_quit(self) -> None: ... + def set_break(self, filename: str, lineno: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... + def clear_break(self, filename: str, lineno: int) -> None: ... + def clear_bpbynumber(self, arg: SupportsInt) -> None: ... + def clear_all_file_breaks(self, filename: str) -> None: ... + def clear_all_breaks(self) -> None: ... + def get_bpbynumber(self, arg: SupportsInt) -> Breakpoint: ... + def get_break(self, filename: str, lineno: int) -> bool: ... + def get_breaks(self, filename: str, lineno: int) -> List[Breakpoint]: ... + def get_file_breaks(self, filename: str) -> List[Breakpoint]: ... + def get_all_breaks(self) -> List[Breakpoint]: ... + def get_stack(self, f: FrameType, t: TracebackType) -> Tuple[List[Tuple[FrameType, int]], int]: ... + def format_stack_entry(self, frame_lineno: int, lprefix: str = ...) -> str: ... + def run(self, cmd: Union[str, CodeType], globals: Dict[str, Any] = ..., locals: Dict[str, Any] = ...) -> None: ... + def runeval(self, expr: str, globals: Dict[str, Any] = ..., locals: Dict[str, Any] = ...) -> None: ... + def runctx(self, cmd: Union[str, CodeType], globals: Dict[str, Any], locals: Dict[str, Any]) -> None: ... + def runcall(self, func: Callable[[Any], _T], *args: Any, **kwds: Any) -> _T: ... + +class Breakpoint: + + next: int = ... + bplist: Dict[Tuple[str, int], List[Breakpoint]] = ... + bpbynumber: List[Optional[Breakpoint]] = ... + + funcname: str + func_first_executable_line: Optional[int] + file: str + line: int + temporary: bool + cond: str + enabled: bool + ignore: int + hits: int + number: int + + def __init__(self, file: str, line: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... + def deleteMe(self) -> None: ... + def enable(self) -> None: ... + def disable(self) -> None: ... + def bpprint(self, out: IO[str] = ...) -> None: ... + def bpformat(self) -> str: ... + def __str__(self) -> str: ... + +def checkfuncname(b: Breakpoint, frame: FrameType) -> bool: ... +def effective(file: str, line: int, frame: FrameType) -> Union[Tuple[Breakpoint, bool], Tuple[None, None]]: ... +def set_trace() -> None: ... From e47879a49423cf8e25f0e0d6e1b3681499d8fde5 Mon Sep 17 00:00:00 2001 From: CraftSpider Date: Fri, 11 Oct 2019 17:25:30 -0400 Subject: [PATCH 2/7] Change file variables to 'Text' as filenames can include unicode characters --- stdlib/2and3/bdb.pyi | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/stdlib/2and3/bdb.pyi b/stdlib/2and3/bdb.pyi index d3041d53ee54..f2ebf61b641a 100644 --- a/stdlib/2and3/bdb.pyi +++ b/stdlib/2and3/bdb.pyi @@ -1,5 +1,5 @@ -from typing import Set, Dict, Iterable, Any, Callable, Tuple, Type, SupportsInt, List, Union, TypeVar, Optional, IO +from typing import Set, Dict, Iterable, Any, Callable, Tuple, Type, SupportsInt, List, Union, TypeVar, Optional, IO, Text from types import FrameType, TracebackType, CodeType @@ -24,7 +24,7 @@ class Bdb: stoplineno: int def __init__(self, skip: Iterable[str] = ...) -> None: ... - def canonic(self, filename: str) -> str: ... + def canonic(self, filename: Text) -> str: ... def reset(self) -> None: ... def trace_dispatch(self, frame: FrameType, event: str, arg: Any) -> _TraceDispatch: ... def dispatch_line(self, frame: FrameType) -> _TraceDispatch: ... @@ -47,15 +47,15 @@ class Bdb: def set_trace(self, frame: FrameType = ...) -> None: ... def set_continue(self) -> None: ... def set_quit(self) -> None: ... - def set_break(self, filename: str, lineno: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... - def clear_break(self, filename: str, lineno: int) -> None: ... + def set_break(self, filename: Text, lineno: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... + def clear_break(self, filename: Text, lineno: int) -> None: ... def clear_bpbynumber(self, arg: SupportsInt) -> None: ... - def clear_all_file_breaks(self, filename: str) -> None: ... + def clear_all_file_breaks(self, filename: Text) -> None: ... def clear_all_breaks(self) -> None: ... def get_bpbynumber(self, arg: SupportsInt) -> Breakpoint: ... - def get_break(self, filename: str, lineno: int) -> bool: ... - def get_breaks(self, filename: str, lineno: int) -> List[Breakpoint]: ... - def get_file_breaks(self, filename: str) -> List[Breakpoint]: ... + def get_break(self, filename: Text, lineno: int) -> bool: ... + def get_breaks(self, filename: Text, lineno: int) -> List[Breakpoint]: ... + def get_file_breaks(self, filename: Text) -> List[Breakpoint]: ... def get_all_breaks(self) -> List[Breakpoint]: ... def get_stack(self, f: FrameType, t: TracebackType) -> Tuple[List[Tuple[FrameType, int]], int]: ... def format_stack_entry(self, frame_lineno: int, lprefix: str = ...) -> str: ... @@ -72,7 +72,7 @@ class Breakpoint: funcname: str func_first_executable_line: Optional[int] - file: str + file: Text line: int temporary: bool cond: str @@ -81,7 +81,7 @@ class Breakpoint: hits: int number: int - def __init__(self, file: str, line: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... + def __init__(self, file: Text, line: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... def deleteMe(self) -> None: ... def enable(self) -> None: ... def disable(self) -> None: ... @@ -90,5 +90,5 @@ class Breakpoint: def __str__(self) -> str: ... def checkfuncname(b: Breakpoint, frame: FrameType) -> bool: ... -def effective(file: str, line: int, frame: FrameType) -> Union[Tuple[Breakpoint, bool], Tuple[None, None]]: ... +def effective(file: Text, line: int, frame: FrameType) -> Union[Tuple[Breakpoint, bool], Tuple[None, None]]: ... def set_trace() -> None: ... From 456f1475ed8c3f65ffd896d3989a7d8816818dfe Mon Sep 17 00:00:00 2001 From: CraftSpider Date: Fri, 11 Oct 2019 18:13:34 -0400 Subject: [PATCH 3/7] Revert last commit, checked runtime type for Py2 and it's definitely str This reverts commit e47879a4 --- stdlib/2and3/bdb.pyi | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/stdlib/2and3/bdb.pyi b/stdlib/2and3/bdb.pyi index f2ebf61b641a..d3041d53ee54 100644 --- a/stdlib/2and3/bdb.pyi +++ b/stdlib/2and3/bdb.pyi @@ -1,5 +1,5 @@ -from typing import Set, Dict, Iterable, Any, Callable, Tuple, Type, SupportsInt, List, Union, TypeVar, Optional, IO, Text +from typing import Set, Dict, Iterable, Any, Callable, Tuple, Type, SupportsInt, List, Union, TypeVar, Optional, IO from types import FrameType, TracebackType, CodeType @@ -24,7 +24,7 @@ class Bdb: stoplineno: int def __init__(self, skip: Iterable[str] = ...) -> None: ... - def canonic(self, filename: Text) -> str: ... + def canonic(self, filename: str) -> str: ... def reset(self) -> None: ... def trace_dispatch(self, frame: FrameType, event: str, arg: Any) -> _TraceDispatch: ... def dispatch_line(self, frame: FrameType) -> _TraceDispatch: ... @@ -47,15 +47,15 @@ class Bdb: def set_trace(self, frame: FrameType = ...) -> None: ... def set_continue(self) -> None: ... def set_quit(self) -> None: ... - def set_break(self, filename: Text, lineno: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... - def clear_break(self, filename: Text, lineno: int) -> None: ... + def set_break(self, filename: str, lineno: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... + def clear_break(self, filename: str, lineno: int) -> None: ... def clear_bpbynumber(self, arg: SupportsInt) -> None: ... - def clear_all_file_breaks(self, filename: Text) -> None: ... + def clear_all_file_breaks(self, filename: str) -> None: ... def clear_all_breaks(self) -> None: ... def get_bpbynumber(self, arg: SupportsInt) -> Breakpoint: ... - def get_break(self, filename: Text, lineno: int) -> bool: ... - def get_breaks(self, filename: Text, lineno: int) -> List[Breakpoint]: ... - def get_file_breaks(self, filename: Text) -> List[Breakpoint]: ... + def get_break(self, filename: str, lineno: int) -> bool: ... + def get_breaks(self, filename: str, lineno: int) -> List[Breakpoint]: ... + def get_file_breaks(self, filename: str) -> List[Breakpoint]: ... def get_all_breaks(self) -> List[Breakpoint]: ... def get_stack(self, f: FrameType, t: TracebackType) -> Tuple[List[Tuple[FrameType, int]], int]: ... def format_stack_entry(self, frame_lineno: int, lprefix: str = ...) -> str: ... @@ -72,7 +72,7 @@ class Breakpoint: funcname: str func_first_executable_line: Optional[int] - file: Text + file: str line: int temporary: bool cond: str @@ -81,7 +81,7 @@ class Breakpoint: hits: int number: int - def __init__(self, file: Text, line: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... + def __init__(self, file: str, line: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... def deleteMe(self) -> None: ... def enable(self) -> None: ... def disable(self) -> None: ... @@ -90,5 +90,5 @@ class Breakpoint: def __str__(self) -> str: ... def checkfuncname(b: Breakpoint, frame: FrameType) -> bool: ... -def effective(file: Text, line: int, frame: FrameType) -> Union[Tuple[Breakpoint, bool], Tuple[None, None]]: ... +def effective(file: str, line: int, frame: FrameType) -> Union[Tuple[Breakpoint, bool], Tuple[None, None]]: ... def set_trace() -> None: ... From af545644eba99b3e125d10f58856eb7a559dcb51 Mon Sep 17 00:00:00 2001 From: CraftSpider Date: Sat, 12 Oct 2019 16:07:33 -0400 Subject: [PATCH 4/7] frame_returning is not just None, add reasoning for `type: ignore` --- stdlib/2and3/bdb.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/2and3/bdb.pyi b/stdlib/2and3/bdb.pyi index d3041d53ee54..b643c82e8e54 100644 --- a/stdlib/2and3/bdb.pyi +++ b/stdlib/2and3/bdb.pyi @@ -4,7 +4,7 @@ from types import FrameType, TracebackType, CodeType _T = TypeVar("_T") -_TraceDispatch = Callable[[FrameType, str, Any], '_TraceDispatch'] # type: ignore +_TraceDispatch = Callable[[FrameType, str, Any], '_TraceDispatch'] # type: ignore # Recursive type _ExcInfo = Tuple[Type[BaseException], BaseException, FrameType] GENERATOR_AND_COROUTINE_FLAGS: int = ... @@ -16,7 +16,7 @@ class Bdb: skip: Set[str] breaks: Dict[str, List[int]] fncache: Dict[str, str] - frame_returning: None + frame_returning: Optional[FrameType] botframe: Optional[FrameType] quitting: bool stopframe: Optional[FrameType] From 04b1401476e8f55299c66c13b03cef4a9555bace Mon Sep 17 00:00:00 2001 From: CraftSpider Date: Sat, 12 Oct 2019 16:45:34 -0400 Subject: [PATCH 5/7] Fix pytype tests --- stdlib/2and3/bdb.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/2and3/bdb.pyi b/stdlib/2and3/bdb.pyi index b643c82e8e54..29a4310c5c3d 100644 --- a/stdlib/2and3/bdb.pyi +++ b/stdlib/2and3/bdb.pyi @@ -4,7 +4,7 @@ from types import FrameType, TracebackType, CodeType _T = TypeVar("_T") -_TraceDispatch = Callable[[FrameType, str, Any], '_TraceDispatch'] # type: ignore # Recursive type +_TraceDispatch = Callable[[FrameType, str, Any], Any] # TODO: Recursive type _ExcInfo = Tuple[Type[BaseException], BaseException, FrameType] GENERATOR_AND_COROUTINE_FLAGS: int = ... From 3fdc2ad309e310a4538a02b1185b674485ea4f44 Mon Sep 17 00:00:00 2001 From: Rune Tynan Date: Sun, 13 Oct 2019 20:06:55 -0400 Subject: [PATCH 6/7] Add `Optional` to types missing it --- stdlib/2and3/bdb.pyi | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/stdlib/2and3/bdb.pyi b/stdlib/2and3/bdb.pyi index 29a4310c5c3d..3d7fabdb6b3f 100644 --- a/stdlib/2and3/bdb.pyi +++ b/stdlib/2and3/bdb.pyi @@ -13,7 +13,7 @@ class BdbQuit(Exception): ... class Bdb: - skip: Set[str] + skip: Optional[Set[str]] breaks: Dict[str, List[int]] fncache: Dict[str, str] frame_returning: Optional[FrameType] @@ -34,20 +34,20 @@ class Bdb: def is_skipped_module(self, module_name: str) -> bool: ... def stop_here(self, frame: FrameType) -> bool: ... def break_here(self, frame: FrameType) -> bool: ... - def do_clear(self, arg) -> None: ... + def do_clear(self, arg: Any) -> None: ... def break_anywhere(self, frame: FrameType) -> bool: ... def user_call(self, frame: FrameType, argument_list: None) -> None: ... def user_line(self, frame: FrameType) -> None: ... def user_return(self, frame: FrameType, return_value: Any) -> None: ... def user_exception(self, frame: FrameType, exc_info: _ExcInfo) -> None: ... - def set_until(self, frame: FrameType, lineno: int = ...) -> None: ... + def set_until(self, frame: FrameType, lineno: Optional[int] = ...) -> None: ... def set_step(self) -> None: ... def set_next(self, frame: FrameType) -> None: ... def set_return(self, frame: FrameType) -> None: ... def set_trace(self, frame: FrameType = ...) -> None: ... def set_continue(self) -> None: ... def set_quit(self) -> None: ... - def set_break(self, filename: str, lineno: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... + def set_break(self, filename: str, lineno: int, temporary: bool = ..., cond: Optional[str] = ..., funcname: Optional[str] = ...) -> None: ... def clear_break(self, filename: str, lineno: int) -> None: ... def clear_bpbynumber(self, arg: SupportsInt) -> None: ... def clear_all_file_breaks(self, filename: str) -> None: ... @@ -62,7 +62,7 @@ class Bdb: def run(self, cmd: Union[str, CodeType], globals: Dict[str, Any] = ..., locals: Dict[str, Any] = ...) -> None: ... def runeval(self, expr: str, globals: Dict[str, Any] = ..., locals: Dict[str, Any] = ...) -> None: ... def runctx(self, cmd: Union[str, CodeType], globals: Dict[str, Any], locals: Dict[str, Any]) -> None: ... - def runcall(self, func: Callable[[Any], _T], *args: Any, **kwds: Any) -> _T: ... + def runcall(self, func: Callable[[Any], _T], *args: Any, **kwds: Any) -> Optional[_T]: ... class Breakpoint: @@ -70,22 +70,22 @@ class Breakpoint: bplist: Dict[Tuple[str, int], List[Breakpoint]] = ... bpbynumber: List[Optional[Breakpoint]] = ... - funcname: str + funcname: Optional[str] func_first_executable_line: Optional[int] file: str line: int temporary: bool - cond: str + cond: Optional[str] enabled: bool ignore: int hits: int number: int - def __init__(self, file: str, line: int, temporary: bool = ..., cond: str = ..., funcname: str = ...) -> None: ... + def __init__(self, file: str, line: int, temporary: bool = ..., cond: Optional[str] = ..., funcname: Optional[str] = ...) -> None: ... def deleteMe(self) -> None: ... def enable(self) -> None: ... def disable(self) -> None: ... - def bpprint(self, out: IO[str] = ...) -> None: ... + def bpprint(self, out: Optional[IO[str]] = ...) -> None: ... def bpformat(self) -> str: ... def __str__(self) -> str: ... From 28dc782990cd247e8d9a0824d5e495cd895b9b77 Mon Sep 17 00:00:00 2001 From: Rune Tynan Date: Sun, 13 Oct 2019 20:07:17 -0400 Subject: [PATCH 7/7] set_trace FrameType is also Optional --- stdlib/2and3/bdb.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/2and3/bdb.pyi b/stdlib/2and3/bdb.pyi index 3d7fabdb6b3f..18f46893775d 100644 --- a/stdlib/2and3/bdb.pyi +++ b/stdlib/2and3/bdb.pyi @@ -44,7 +44,7 @@ class Bdb: def set_step(self) -> None: ... def set_next(self, frame: FrameType) -> None: ... def set_return(self, frame: FrameType) -> None: ... - def set_trace(self, frame: FrameType = ...) -> None: ... + def set_trace(self, frame: Optional[FrameType] = ...) -> None: ... def set_continue(self) -> None: ... def set_quit(self) -> None: ... def set_break(self, filename: str, lineno: int, temporary: bool = ..., cond: Optional[str] = ..., funcname: Optional[str] = ...) -> None: ...