From 5a730077bfeb71ed1d5988bee2ae519f328894ea Mon Sep 17 00:00:00 2001 From: sobolevn Date: Thu, 23 Dec 2021 14:37:30 +0300 Subject: [PATCH 1/4] bpo-43424: Deprecate `webbrowser.MacOSXOSAScript._name` attribute --- Doc/library/webbrowser.rst | 5 +++++ Lib/webbrowser.py | 15 +++++++++++---- .../2021-12-23-14-36-58.bpo-43424.d9x2JZ.rst | 1 + 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-12-23-14-36-58.bpo-43424.d9x2JZ.rst diff --git a/Doc/library/webbrowser.rst b/Doc/library/webbrowser.rst index 19b3c463bb81744..1dc59306164ecdc 100644 --- a/Doc/library/webbrowser.rst +++ b/Doc/library/webbrowser.rst @@ -197,6 +197,11 @@ Browser controllers provide these methods which parallel three of the module-level convenience functions: +.. attribute:: name + + System-dependent name for the browser. + + .. method:: controller.open(url, new=0, autoraise=True) Display *url* using the browser handled by this controller. If *new* is 1, a new diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 3244f206aade678..a9cd2446678baf3 100755 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -667,18 +667,25 @@ def open(self, url, new=0, autoraise=True): class MacOSXOSAScript(BaseBrowser): def __init__(self, name): - self._name = name + super().__init__(name) + + @property + def _name(self): + warnings.warn(f'{self.__class__.__name__}._name is deprecated in 3.11' + f' use {self.__class__.__name__}.name instead.', + DeprecationWarning, stacklevel=2) + return self.name def open(self, url, new=0, autoraise=True): - if self._name == 'default': + if self.name == 'default': script = 'open location "%s"' % url.replace('"', '%22') # opens in default browser else: - script = ''' + 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: diff --git a/Misc/NEWS.d/next/Library/2021-12-23-14-36-58.bpo-43424.d9x2JZ.rst b/Misc/NEWS.d/next/Library/2021-12-23-14-36-58.bpo-43424.d9x2JZ.rst new file mode 100644 index 000000000000000..aa5f8d4211c37ce --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-12-23-14-36-58.bpo-43424.d9x2JZ.rst @@ -0,0 +1 @@ +Deprecate :attr:`webbrowser.MacOSXOSAScript._name` and use ``name`` instead. From 17687be7a682b1a79f8cfe38bf10e27005bd6557 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Thu, 23 Dec 2021 15:32:01 +0300 Subject: [PATCH 2/4] Also include `setter` --- Lib/webbrowser.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index a9cd2446678baf3..eca57e2382993e5 100755 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -676,6 +676,13 @@ def _name(self): DeprecationWarning, stacklevel=2) return self.name + @_name.setter + def _name(self, val): + warnings.warn(f'{self.__class__.__name__}._name is deprecated in 3.11' + f' use {self.__class__.__name__}.name instead.', + DeprecationWarning, stacklevel=2) + self.name = val + def open(self, url, new=0, autoraise=True): if self.name == 'default': script = 'open location "%s"' % url.replace('"', '%22') # opens in default browser From 9b7936cd468bd34031706b50eb310351fd6f738f Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Sun, 26 Dec 2021 17:06:10 +0300 Subject: [PATCH 3/4] Add `default` value to `name` in `__init__` --- Lib/webbrowser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index eca57e2382993e5..02d2036906178fa 100755 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -666,7 +666,7 @@ def open(self, url, new=0, autoraise=True): return not rc class MacOSXOSAScript(BaseBrowser): - def __init__(self, name): + def __init__(self, name='default'): super().__init__(name) @property From 8ec6955b9e937682ef2eb54a82af4a04eea08a87 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Wed, 29 Dec 2021 19:57:29 +0300 Subject: [PATCH 4/4] Remove `AttributeError` from `test_webbrowser` --- Lib/test/test_webbrowser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_webbrowser.py b/Lib/test/test_webbrowser.py index 673cc995d3f5a40..dbfd2e5a0f280b8 100644 --- a/Lib/test/test_webbrowser.py +++ b/Lib/test/test_webbrowser.py @@ -304,7 +304,7 @@ def test_environment(self): webbrowser = import_helper.import_fresh_module('webbrowser') try: browser = webbrowser.get().name - except (webbrowser.Error, AttributeError) as err: + except webbrowser.Error as err: self.skipTest(str(err)) with os_helper.EnvironmentVarGuard() as env: env["BROWSER"] = browser @@ -316,7 +316,7 @@ def test_environment_preferred(self): try: webbrowser.get() least_preferred_browser = webbrowser.get(webbrowser._tryorder[-1]).name - except (webbrowser.Error, AttributeError, IndexError) as err: + except (webbrowser.Error, IndexError) as err: self.skipTest(str(err)) with os_helper.EnvironmentVarGuard() as env: