Skip to content

Commit

Permalink
Add ability to handle pathlib paths
Browse files Browse the repository at this point in the history
- Handle pathlib paths across all implementations, plat_other already did
- Move preprocessing code to common location
  • Loading branch information
arsenetar committed Aug 8, 2021
1 parent 84c220c commit 94e1ec0
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 12 deletions.
4 changes: 2 additions & 2 deletions send2trash/plat_gio.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions send2trash/plat_osx_ctypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
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"))
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions send2trash/plat_osx_pyobjc.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions send2trash/plat_other.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from urllib import quote

from .compat import text_type, environb
from .util import preprocess_paths
from .exceptions import TrashPermissionError

try:
Expand Down Expand Up @@ -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)
Expand Down
5 changes: 3 additions & 2 deletions send2trash/plat_win_legacy.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions send2trash/plat_win_modern.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -15,8 +16,7 @@


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
Expand Down
16 changes: 16 additions & 0 deletions send2trash/util.py
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 94e1ec0

Please sign in to comment.