From 0109a371d68af1e865910cc143d901c2a90c8e0a Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Mon, 14 Feb 2022 01:10:43 +0000 Subject: [PATCH] Improve `webbrowser` stubs (#7190) - `BaseBrowser.open` is an abstract method that should be overridden in all subclasses. - `UnixBrowser.open` only accepts 0, 1 or 2 for the `new` parameter. --- stdlib/webbrowser.pyi | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/stdlib/webbrowser.pyi b/stdlib/webbrowser.pyi index 459d886ac..0a1f41b5e 100644 --- a/stdlib/webbrowser.pyi +++ b/stdlib/webbrowser.pyi @@ -1,5 +1,7 @@ import sys +from abc import abstractmethod from typing import Callable, Sequence +from typing_extensions import Literal class Error(Exception): ... @@ -23,16 +25,19 @@ class BaseBrowser: name: str basename: str def __init__(self, name: str = ...) -> None: ... + @abstractmethod def open(self, url: str, new: int = ..., autoraise: bool = ...) -> bool: ... def open_new(self, url: str) -> bool: ... def open_new_tab(self, url: str) -> bool: ... class GenericBrowser(BaseBrowser): def __init__(self, name: str | Sequence[str]) -> None: ... + def open(self, url: str, new: int = ..., autoraise: bool = ...) -> bool: ... class BackgroundBrowser(GenericBrowser): ... class UnixBrowser(BaseBrowser): + def open(self, url: str, new: Literal[0, 1, 2] = ..., autoraise: bool = ...) -> bool: ... # type: ignore[override] raise_opts: list[str] | None background: bool redirect_stdout: bool @@ -49,12 +54,20 @@ class Galeon(UnixBrowser): class Chrome(UnixBrowser): ... class Opera(UnixBrowser): ... class Elinks(UnixBrowser): ... -class Konqueror(BaseBrowser): ... -class Grail(BaseBrowser): ... + +class Konqueror(BaseBrowser): + def open(self, url: str, new: int = ..., autoraise: bool = ...) -> bool: ... + +class Grail(BaseBrowser): + def open(self, url: str, new: int = ..., autoraise: bool = ...) -> bool: ... if sys.platform == "win32": - class WindowsDefault(BaseBrowser): ... + class WindowsDefault(BaseBrowser): + def open(self, url: str, new: int = ..., autoraise: bool = ...) -> bool: ... if sys.platform == "darwin": - class MacOSX(BaseBrowser): ... - class MacOSXOSAScript(BaseBrowser): ... # In runtime this class does not have `name` and `basename` + class MacOSX(BaseBrowser): + def open(self, url: str, new: int = ..., autoraise: bool = ...) -> bool: ... + + class MacOSXOSAScript(BaseBrowser): # In runtime this class does not have `name` and `basename` + def open(self, url: str, new: int = ..., autoraise: bool = ...) -> bool: ...