8000 gh-68583: webbrowser: replace `getopt` with `argparse`, add long options by hugovk · Pull Request #117047 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

gh-68583: webbrowser: replace getopt with argparse, add long options #117047

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
Apr 13, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Fix whitespace
  • Loading branch information
hugovk committed Mar 19, 2024
commit 2428bbaec08609a1751cc7a35c2052bb89be9344
27 changes: 19 additions & 8 deletions Lib/webbrowser.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,17 @@

__all__ = ["Error", "open", "open_new", "open_new_tab", "get", "register"]


class Error(Exception):
pass


_lock = threading.RLock()
_browsers = {} # Dictionary of available browser controllers
_tryorder = None # Preference order of available browsers
_os_preferred_browser = None # The preferred browser


def register(name, klass, instance=None, *, preferred=False):
"""Register a browser connector."""
with _lock:
Expand All @@ -34,6 +37,7 @@ def register(name, klass, instance=None, *, preferred=False):
else:
_tryorder.append(name)


def get(using=None):
"""Return a browser launcher instance appropriate for the environment."""
if _tryorder is None:
Expand Down Expand Up @@ -64,6 +68,7 @@ def get(using=None):
return command[0]()
raise Error("could not locate runnable browser")


# Please note: the following definition hides a builtin function.
# It is recommended one does "import webbrowser" and uses webbrowser.open(url)
# instead of "from webbrowser import *".
Expand All @@ -87,13 +92,15 @@ def open(url, new=0, autoraise=True):
return True
return False


def open_new(url):
"""Open url in a new window of the default browser.

If not possible, then open url in the only browser window.
"""
return open(url, 1)


def open_new_tab(url):
"""Open url in a new page ("tab") of the default browser.

Expand Down Expand Up @@ -225,7 +232,8 @@ def _invoke(self, args, remote, autoraise, url=None):
# use autoraise argument only for remote invocation
autoraise = int(autoraise)
opt = self.raise_opts[autoraise]
if opt: raise_opt = [opt]
if opt:
raise_opt = [opt]

cmdline = [self.name] + raise_opt + args

Expand Down Expand Up @@ -310,6 +318,7 @@ class Chrome(UnixBrowser):
remote_action_newtab = ""
background = True


Chromium = Chrome


Expand Down Expand Up @@ -461,7 +470,6 @@ def register_X_browsers():
if shutil.which("opera"):
register("opera", None, Opera("opera"))


if shutil.which("microsoft-edge"):
register("microsoft-edge", None, Edge("microsoft-edge"))

Expand Down Expand Up @@ -511,7 +519,7 @@ def register_standard_browsers():
cmd = "xdg-settings get default-web-browser".split()
raw_result = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
result = raw_result.decode().strip()
except (FileNotFoundError, subprocess.CalledProcessError, PermissionError, NotADirectoryError) :
except (FileNotFoundError, subprocess.CalledProcessError, PermissionError, NotADirectoryError):
pass
else:
global _os_preferred_browser
Expand Down Expand Up @@ -582,14 +590,14 @@ def __init__(self, name='default'):
def open(self, url, new=0, autoraise=True):
sys.audit("webbrowser.open", url)
if self.name == 'default':
script = 'open location "%s"' % url.replace('"', '%22') # opens in default browser
script = 'open location "%s"' % url.replace('"', '%22') # opens in default browser
else:
script = f'''
tell application "%s"
activate
open location "%s"
end
'''%(self.name, url.replace('"', '%22'))
''' % (self.name, url.replace('"', '%22'))

osapipe = os.popen("osascript", "w")
if osapipe is None:
Expand All @@ -607,15 +615,17 @@ def main():
-t: open new tab
-h, --help: show help""" % sys.argv[0]
try:
opts, args = getopt.getopt(sys.argv[1:], 'ntdh',['help'])
opts, args = getopt.getopt(sys.argv[1:], 'ntdh', ['help'])
except getopt.error as msg:
print(msg, file=sys.stderr)
print(usage, file=sys.stderr)
sys.exit(1)
new_win = 0
for o, a in opts:
if o == '-n': new_win = 1
elif o == '-t': new_win = 2
if o == '-n':
new_win = 1
elif o == '-t':
new_win = 2
elif o == '-h' or o == '--help':
print(usage, file=sys.stderr)
sys.exit()
Expand All @@ -628,5 +638,6 @@ def main():

print("\a")


if __name__ == "__main__":
main()
0