Skip to content

Commit a29d513

Browse files
authored
launch_external_viewer: Use full path when opening the file in a web browser (#3647)
1 parent 6bd5e72 commit a29d513

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

pygmt/helpers/utils.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import time
1313
import webbrowser
1414
from collections.abc import Iterable, Mapping, Sequence
15+
from pathlib import Path
1516
from typing import Any, Literal
1617

1718
import xarray as xr
@@ -580,7 +581,7 @@ def launch_external_viewer(fname: str, waiting: float = 0):
580581
case "win32": # Windows
581582
os.startfile(fname) # type:ignore[attr-defined] # noqa: S606
582583
case _: # Fall back to the browser if can't recognize the operating system.
583-
webbrowser.open_new_tab(f"file://{fname}")
584+
webbrowser.open_new_tab(f"file://{Path(fname).resolve()}")
584585
if waiting > 0:
585586
# Preview images will be deleted when a GMT modern-mode session ends, but the
586587
# external viewer program may take a few seconds to open the images.

pygmt/tests/test_helpers.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,16 @@ def test_launch_external_viewer_win32():
194194
mock_startfile.assert_called_once_with("preview.png")
195195

196196

197-
def test_launch_external_viewer_unknown_os():
197+
@pytest.mark.parametrize("fname", ["preview.png", "/full/path/to/preview.png"])
198+
def test_launch_external_viewer_unknown_os(fname):
198199
"""
199200
Test that launch_external_viewer uses the webbrowser module as a fallback.
200201
"""
201202
with (
202-
patch("webbrowser.open_new_tab") as mock_open,
203203
patch("sys.platform", "unknown"),
204+
patch("webbrowser.open_new_tab") as mock_open,
204205
):
205-
launch_external_viewer("preview.png")
206-
mock_open.assert_called_once_with("file://preview.png")
206+
launch_external_viewer(fname)
207+
fullpath = Path(fname).resolve()
208+
assert fullpath.is_absolute()
209+
mock_open.assert_called_once_with(f"file://{fullpath}")

0 commit comments

Comments
 (0)