From 94e1ec007a6db5538b170ff27da9a310a8ef7961 Mon Sep 17 00:00:00 2001 From: Andrew Senetar Date: Sat, 7 Aug 2021 21:48:10 -0500 Subject: [PATCH] Add ability to handle pathlib paths - Handle pathlib paths across all implementations, plat_other already did - Move preprocessing code to common location --- send2trash/plat_gio.py | 4 ++-- send2trash/plat_osx_ctypes.py | 4 ++-- send2trash/plat_osx_pyobjc.py | 4 ++-- send2trash/plat_other.py | 4 ++-- send2trash/plat_win_legacy.py | 5 +++-- send2trash/plat_win_modern.py | 4 ++-- send2trash/util.py | 16 ++++++++++++++++ 7 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 send2trash/util.py diff --git a/send2trash/plat_gio.py b/send2trash/plat_gio.py index 9809fe7..0b11c8d 100644 --- a/send2trash/plat_gio.py +++ b/send2trash/plat_gio.py @@ -6,11 +6,11 @@ from gi.repository import GObject, Gio from .exceptions import TrashPermissionError +from .util import preprocess_paths def send2trash(paths): - if not isinstance(paths, list): - paths = [paths] + paths = preprocess_paths(paths) for path in paths: try: f = Gio.File.new_for_path(path) diff --git a/send2trash/plat_osx_ctypes.py b/send2trash/plat_osx_ctypes.py index ac6634c..05a70eb 100644 --- a/send2trash/plat_osx_ctypes.py +++ b/send2trash/plat_osx_ctypes.py @@ -10,6 +10,7 @@ from ctypes import cdll, byref, Structure, c_char, c_char_p from ctypes.util import find_library from .compat import binary_type +from .util import preprocess_paths Foundation = cdll.LoadLibrary(find_library("Foundation")) CoreServices = cdll.LoadLibrary(find_library("CoreServices")) @@ -40,8 +41,7 @@ def check_op_result(op_result): def send2trash(paths): - if not isinstance(paths, list): - paths = [paths] + paths = preprocess_paths(paths) paths = [ path.encode("utf-8") if not isinstance(path, binary_type) else path for path in paths diff --git a/send2trash/plat_osx_pyobjc.py b/send2trash/plat_osx_pyobjc.py index e34726e..49d111c 100644 --- a/send2trash/plat_osx_pyobjc.py +++ b/send2trash/plat_osx_pyobjc.py @@ -6,6 +6,7 @@ from Foundation import NSFileManager, NSURL from .compat import text_type +from .util import preprocess_paths def check_op_result(op_result): @@ -16,8 +17,7 @@ def check_op_result(op_result): def send2trash(paths): - if not isinstance(paths, list): - paths = [paths] + paths = preprocess_paths(paths) paths = [ path.decode("utf-8") if not isinstance(path, text_type) else path for path in paths diff --git a/send2trash/plat_other.py b/send2trash/plat_other.py index 37777ca..78da82f 100644 --- a/send2trash/plat_other.py +++ b/send2trash/plat_other.py @@ -30,6 +30,7 @@ except ImportError: from urllib import quote from .compat import text_type, environb +from .util import preprocess_paths from .exceptions import TrashPermissionError try: @@ -172,8 +173,7 @@ def get_dev(path): def send2trash(paths): - if not isinstance(paths, list): - paths = [paths] + paths = preprocess_paths(paths) for path in paths: if isinstance(path, text_type): path_b = fsencode(path) diff --git a/send2trash/plat_win_legacy.py b/send2trash/plat_win_legacy.py index 4a35ad7..31b8910 100644 --- a/send2trash/plat_win_legacy.py +++ b/send2trash/plat_win_legacy.py @@ -7,6 +7,8 @@ from __future__ import unicode_literals import os.path as op from .compat import text_type +from .util import preprocess_paths + from ctypes import ( windll, Structure, @@ -101,8 +103,7 @@ def get_short_path_name(long_name): def send2trash(paths): - if not isinstance(paths, list): - paths = [paths] + paths = preprocess_paths(paths) # convert data type paths = [ text_type(path, "mbcs") if not isinstance(path, text_type) else path diff --git a/send2trash/plat_win_modern.py b/send2trash/plat_win_modern.py index 1bcf039..ec00934 100644 --- a/send2trash/plat_win_modern.py +++ b/send2trash/plat_win_modern.py @@ -7,6 +7,7 @@ from __future__ import unicode_literals import os.path as op from .compat import text_type +from .util import preprocess_paths from platform import version import pythoncom import pywintypes @@ -15,8 +16,7 @@ from .IFileOperationProgressSink import CreateSink def send2trash(paths): - if not isinstance(paths, list): - paths = [paths] + paths = preprocess_paths(paths) # convert data type paths = [ text_type(path, "mbcs") if not isinstance(path, text_type) else path diff --git a/send2trash/util.py b/send2trash/util.py new file mode 100644 index 0000000..677a856 --- /dev/null +++ b/send2trash/util.py @@ -0,0 +1,16 @@ +# encoding: utf-8 +# Copyright 2017 Virgil Dupras + +# This software is licensed under the "BSD" License as described in the "LICENSE" file, +# which should be included with this package. The terms are also available at +# http://www.hardcoded.net/licenses/bsd_license + + +def preprocess_paths(paths): + if not isinstance(paths, list): + paths = [paths] + # Convert items such as pathlib paths to strings + paths = [ + path.__fspath__() if hasattr(path, "__fspath__") else path for path in paths + ] + return paths