Deprecated show_file "file" argument in favour of "path"

This commit is contained in:
Andrew Murray 2022-01-15 16:08:37 +11:00
parent fd2b07c454
commit 86944abbab
2 changed files with 60 additions and 14 deletions

View File

@ -79,3 +79,18 @@ def test_ipythonviewer():
im = hopper() im = hopper()
assert test_viewer.show(im) == 1 assert test_viewer.show(im) == 1
@pytest.mark.skipif(
not on_ci() or is_win32(),
reason="Only run on CIs; hangs on Windows CIs",
)
def test_file_deprecated():
for viewer in ImageShow._viewers:
with pytest.warns(DeprecationWarning):
try:
viewer.show_file(file="test.jpg")
except NotImplementedError:
pass
with pytest.raises(TypeError):
viewer.show_file()

View File

@ -16,6 +16,7 @@ import shutil
import subprocess import subprocess
import sys import sys
import tempfile import tempfile
import warnings
from shlex import quote from shlex import quote
from PIL import Image from PIL import Image
@ -105,9 +106,19 @@ class Viewer:
"""Display the given image.""" """Display the given image."""
return self.show_file(self.save_image(image), **options) return self.show_file(self.save_image(image), **options)
def show_file(self, file, **options): def show_file(self, path=None, **options):
"""Display the given file.""" """Display given file."""
os.system(self.get_command(file, **options)) if path is None:
if "file" in options:
warnings.warn(
"The 'file' argument is deprecated and will be removed in Pillow "
"10 (2023-07-01). Use 'path' instead.",
DeprecationWarning,
)
path = options.pop("file")
else:
raise TypeError("Missing required argument: 'path'")
os.system(self.get_command(path, **options))
return 1 return 1
@ -145,18 +156,28 @@ class MacViewer(Viewer):
command = f"({command} {quote(file)}; sleep 20; rm -f {quote(file)})&" command = f"({command} {quote(file)}; sleep 20; rm -f {quote(file)})&"
return command return command
def show_file(self, file, **options): def show_file(self, path=None, **options):
"""Display given file""" """Display given file"""
fd, path = tempfile.mkstemp() if path is None:
if "file" in options:
warnings.warn(
"The 'file' argument is deprecated and will be removed in Pillow "
"10 (2023-07-01). Use 'path' instead.",
DeprecationWarning,
)
path = options.pop("file")
else:
raise TypeError("Missing required argument: 'path'")
fd, temp_path = tempfile.mkstemp()
with os.fdopen(fd, "w") as f: with os.fdopen(fd, "w") as f:
f.write(file) f.write(path)
with open(path) as f: with open(temp_path) as f:
subprocess.Popen( subprocess.Popen(
["im=$(cat); open -a Preview.app $im; sleep 20; rm -f $im"], ["im=$(cat); open -a Preview.app $im; sleep 20; rm -f $im"],
shell=True, shell=True,
stdin=f, stdin=f,
) )
os.remove(path) os.remove(temp_path)
return 1 return 1
@ -172,17 +193,27 @@ class UnixViewer(Viewer):
command = self.get_command_ex(file, **options)[0] command = self.get_command_ex(file, **options)[0]
return f"({command} {quote(file)}; rm -f {quote(file)})&" return f"({command} {quote(file)}; rm -f {quote(file)})&"
def show_file(self, file, **options): def show_file(self, path=None, **options):
"""Display given file""" """Display given file"""
fd, path = tempfile.mkstemp() if path is None:
if "file" in options:
warnings.warn(
"The 'file' argument is deprecated and will be removed in Pillow "
"10 (2023-07-01). Use 'path' instead.",
DeprecationWarning,
)
path = options.pop("file")
else:
raise TypeError("Missing required argument: 'path'")
fd, temp_path = tempfile.mkstemp()
with os.fdopen(fd, "w") as f: with os.fdopen(fd, "w") as f:
f.write(file) f.write(path)
with open(path) as f: with open(temp_path) as f:
command = self.get_command_ex(file, **options)[0] command = self.get_command_ex(path, **options)[0]
subprocess.Popen( subprocess.Popen(
["im=$(cat);" + command + " $im; rm -f $im"], shell=True, stdin=f ["im=$(cat);" + command + " $im; rm -f $im"], shell=True, stdin=f
) )
os.remove(path) os.remove(temp_path)
return 1 return 1