Skip to content

Commit

Permalink
bpo-31014: Fix the webbrowser module. (pythonGH-7267)
Browse files Browse the repository at this point in the history
webbrowser._synthesize() called webbrowser.register() with
outdated signature.

Co-Authored-By: John Still <john@jmsdvl.com>
  • Loading branch information
serhiy-storchaka and John Still committed Jul 8, 2018
1 parent 0830858 commit 25b804a
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
19 changes: 19 additions & 0 deletions Lib/test/test_webbrowser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import webbrowser
import unittest
import os
import sys
import subprocess
from unittest import mock
from test import support
Expand Down Expand Up @@ -290,6 +292,23 @@ def test_get(self):
webbrowser.get('fakebrowser')
self.assertIsNotNone(webbrowser._tryorder)

def test_synthesize(self):
webbrowser = support.import_fresh_module('webbrowser')
name = os.path.basename(sys.executable).lower()
webbrowser.register(name, None, webbrowser.GenericBrowser(name))
webbrowser.get(sys.executable)

def test_environment(self):
webbrowser = support.import_fresh_module('webbrowser')
try:
browser = webbrowser.get().name
except (webbrowser.Error, AttributeError) as err:
self.skipTest(str(err))
with support.EnvironmentVarGuard() as env:
env["BROWSER"] = browser
webbrowser = support.import_fresh_module('webbrowser')
webbrowser.get()


if __name__=='__main__':
unittest.main()
6 changes: 3 additions & 3 deletions Lib/webbrowser.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def open_new_tab(url):
return open(url, 2)


def _synthesize(browser, update_tryorder=1):
def _synthesize(browser, *, preferred=True):
"""Attempt to synthesize a controller base on existing controllers.
This is useful to create a controller when a user specifies a path to
Expand All @@ -113,7 +113,7 @@ def _synthesize(browser, update_tryorder=1):
controller = copy.copy(controller)
controller.name = browser
controller.basename = os.path.basename(browser)
register(browser, None, controller, update_tryorder)
register(browser, None, instance=controller, preferred=preferred)
return [None, controller]
return [None, None]

Expand Down Expand Up @@ -563,7 +563,7 @@ def register_standard_browsers():
# and prepend to _tryorder
for cmdline in userchoices:
if cmdline != '':
cmd = _synthesize(cmdline, -1)
cmd = _synthesize(cmdline, preferred=False)
if cmd[1] is None:
register(cmdline, None, GenericBrowser(cmdline), preferred=True)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fixed creating a controller for :mod:`webbrowser` when a user specifies a
path to an entry in the BROWSER environment variable. Based on patch by
John Still.

0 comments on commit 25b804a

Please sign in to comment.