mirror of
				https://github.com/arsenetar/send2trash.git
				synced 2025-09-11 18:08:16 +00:00 
			
		
		
		
	Compare commits
	
		
			No commits in common. "master" and "1.8.2" have entirely different histories.
		
	
	
		
	
		
							
								
								
									
										34
									
								
								.github/workflows/default.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								.github/workflows/default.yml
									
									
									
									
										vendored
									
									
								
							| @ -2,15 +2,19 @@ | |||||||
| 
 | 
 | ||||||
| name: Default CI/CD | name: Default CI/CD | ||||||
| 
 | 
 | ||||||
| on: push | on: | ||||||
|  |   push: | ||||||
|  |     branches: [master] | ||||||
|  |   pull_request: | ||||||
|  |     branches: [master] | ||||||
| 
 | 
 | ||||||
| jobs: | jobs: | ||||||
|   lint: |   lint: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |       - uses: actions/checkout@v3 | ||||||
|       - name: Set up Python 3.x |       - name: Set up Python 3.x | ||||||
|         uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 |         uses: actions/setup-python@v3 | ||||||
|         with: |         with: | ||||||
|           python-version: 3.x |           python-version: 3.x | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
| @ -26,10 +30,6 @@ jobs: | |||||||
|     strategy: |     strategy: | ||||||
|       matrix: |       matrix: | ||||||
|         include: |         include: | ||||||
|           - os: ubuntu-latest |  | ||||||
|             python-version: 3.13 |  | ||||||
|           - os: ubuntu-latest |  | ||||||
|             python-version: 3.12 |  | ||||||
|           - os: ubuntu-latest |           - os: ubuntu-latest | ||||||
|             python-version: 3.11 |             python-version: 3.11 | ||||||
|           - os: ubuntu-latest |           - os: ubuntu-latest | ||||||
| @ -38,19 +38,31 @@ jobs: | |||||||
|             python-version: 3.9 |             python-version: 3.9 | ||||||
|           - os: ubuntu-latest |           - os: ubuntu-latest | ||||||
|             python-version: 3.8 |             python-version: 3.8 | ||||||
|  |           - os: ubuntu-latest | ||||||
|  |             python-version: 3.7 | ||||||
|  |           - os: ubuntu-20.04 | ||||||
|  |             python-version: 3.6 | ||||||
|  |           - os: ubuntu-20.04 | ||||||
|  |             python-version: 3.5 | ||||||
|  |           - os: ubuntu-latest | ||||||
|  |             python-version: 2.7 | ||||||
|           # - os: macos-latest |           # - os: macos-latest | ||||||
|           #   python-version: 3.13 |           #   python-version: 3.11 | ||||||
|           # - os: macos-latest |           # - os: macos-latest | ||||||
|           #   python-version: 3.8 |           #   python-version: 3.8 | ||||||
|  |           # - os: macos-latest | ||||||
|  |           #   python-version: 2.7 | ||||||
|           - os: windows-latest |           - os: windows-latest | ||||||
|             python-version: 3.13 |             python-version: 3.11 | ||||||
|           - os: windows-latest |           - os: windows-latest | ||||||
|             python-version: 3.8 |             python-version: 3.8 | ||||||
|  |           - os: windows-latest | ||||||
|  |             python-version: 2.7 | ||||||
| 
 | 
 | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |       - uses: actions/checkout@v3 | ||||||
|       - name: Set up Python ${{ matrix.python-version }} |       - name: Set up Python ${{ matrix.python-version }} | ||||||
|         uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 |         uses: actions/setup-python@v3 | ||||||
|         with: |         with: | ||||||
|           python-version: ${{ matrix.python-version }} |           python-version: ${{ matrix.python-version }} | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|  | |||||||
| @ -1,11 +1,6 @@ | |||||||
| Changes | Changes | ||||||
| ======= | ======= | ||||||
| 
 | 
 | ||||||
| Version 1.8.3 -- 2024/04/06 |  | ||||||
| --------------------------- |  | ||||||
| * Add support for any iterable type as input by @PalmtopTiger in https://github.com/arsenetar/send2trash/pull/88 |  | ||||||
| * fix: Use os.fsdecode() for arguments to shutil.move() by @yogeshiitm in https://github.com/arsenetar/send2trash/pull/90 |  | ||||||
| 
 |  | ||||||
| Version 1.8.2 -- 2023/04/27 | Version 1.8.2 -- 2023/04/27 | ||||||
| --------------------------- | --------------------------- | ||||||
| * win/legacy: tiny logic simplification by @BoboTiG in https://github.com/arsenetar/send2trash/pull/77 | * win/legacy: tiny logic simplification by @BoboTiG in https://github.com/arsenetar/send2trash/pull/77 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| [build-system] | [build-system] | ||||||
| requires = ["setuptools >= 75.3.1"] | requires = ["setuptools >= 40.6.0", "wheel"] | ||||||
| build-backend = "setuptools.build_meta" | build-backend = "setuptools.build_meta" | ||||||
| 
 | 
 | ||||||
| [tool.black] | [tool.black] | ||||||
|  | |||||||
| @ -8,9 +8,6 @@ import sys | |||||||
| 
 | 
 | ||||||
| from send2trash.exceptions import TrashPermissionError  # noqa: F401 | from send2trash.exceptions import TrashPermissionError  # noqa: F401 | ||||||
| 
 | 
 | ||||||
| if sys.version_info[0] < 3: |  | ||||||
|     raise RuntimeError("send2trash is only compatible with Python 3 and above (use versions <= 1.8.3 for python 2).") |  | ||||||
| 
 |  | ||||||
| if sys.platform == "darwin": | if sys.platform == "darwin": | ||||||
|     from send2trash.mac import send2trash |     from send2trash.mac import send2trash | ||||||
| elif sys.platform == "win32": | elif sys.platform == "win32": | ||||||
|  | |||||||
| @ -12,9 +12,6 @@ import sys | |||||||
| from argparse import ArgumentParser | from argparse import ArgumentParser | ||||||
| from send2trash import send2trash | from send2trash import send2trash | ||||||
| 
 | 
 | ||||||
| if sys.version_info[0] < 3: |  | ||||||
|     raise RuntimeError("send2trash is only compatible with Python 3 and above (use versions <= 1.8.3 for python 2).") |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| def main(args=None): | def main(args=None): | ||||||
|     parser = ArgumentParser(description="Tool to send files to trash") |     parser = ArgumentParser(description="Tool to send files to trash") | ||||||
|  | |||||||
							
								
								
									
										20
									
								
								send2trash/compat.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								send2trash/compat.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | # 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 | ||||||
|  | 
 | ||||||
|  | import sys | ||||||
|  | import os | ||||||
|  | 
 | ||||||
|  | PY3 = sys.version_info[0] >= 3 | ||||||
|  | if PY3: | ||||||
|  |     text_type = str | ||||||
|  |     binary_type = bytes | ||||||
|  |     if os.supports_bytes_environ: | ||||||
|  |         # environb will be unset under Windows, but then again we're not supposed to use it. | ||||||
|  |         environb = os.environb | ||||||
|  | else: | ||||||
|  |     text_type = unicode  # noqa: F821 | ||||||
|  |     binary_type = str | ||||||
|  |     environb = os.environ | ||||||
| @ -1,7 +1,13 @@ | |||||||
| import errno | import errno | ||||||
|  | from send2trash.compat import PY3 | ||||||
|  | 
 | ||||||
|  | if PY3: | ||||||
|  |     _permission_error = PermissionError  # noqa: F821 | ||||||
|  | else: | ||||||
|  |     _permission_error = OSError | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class TrashPermissionError(PermissionError): | class TrashPermissionError(_permission_error): | ||||||
|     """A permission error specific to a trash directory. |     """A permission error specific to a trash directory. | ||||||
| 
 | 
 | ||||||
|     Raising this error indicates that permissions prevent us efficiently |     Raising this error indicates that permissions prevent us efficiently | ||||||
| @ -17,4 +23,4 @@ class TrashPermissionError(PermissionError): | |||||||
|     """ |     """ | ||||||
| 
 | 
 | ||||||
|     def __init__(self, filename): |     def __init__(self, filename): | ||||||
|         PermissionError.__init__(self, errno.EACCES, "Permission denied", filename) |         _permission_error.__init__(self, errno.EACCES, "Permission denied", filename) | ||||||
|  | |||||||
| @ -9,6 +9,7 @@ from __future__ import unicode_literals | |||||||
| from ctypes import cdll, byref, Structure, c_char, c_char_p | from ctypes import cdll, byref, Structure, c_char, c_char_p | ||||||
| from ctypes.util import find_library | from ctypes.util import find_library | ||||||
| 
 | 
 | ||||||
|  | from send2trash.compat import binary_type | ||||||
| from send2trash.util import preprocess_paths | from send2trash.util import preprocess_paths | ||||||
| 
 | 
 | ||||||
| Foundation = cdll.LoadLibrary(find_library("Foundation")) | Foundation = cdll.LoadLibrary(find_library("Foundation")) | ||||||
| @ -41,7 +42,7 @@ def check_op_result(op_result): | |||||||
| 
 | 
 | ||||||
| def send2trash(paths): | def send2trash(paths): | ||||||
|     paths = preprocess_paths(paths) |     paths = preprocess_paths(paths) | ||||||
|     paths = [path.encode("utf-8") if not isinstance(path, bytes) else path for path in paths] |     paths = [path.encode("utf-8") if not isinstance(path, binary_type) else path for path in paths] | ||||||
|     for path in paths: |     for path in paths: | ||||||
|         fp = FSRef() |         fp = FSRef() | ||||||
|         opts = kFSPathMakeRefDoNotFollowLeafSymlink |         opts = kFSPathMakeRefDoNotFollowLeafSymlink | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ | |||||||
| # http://www.hardcoded.net/licenses/bsd_license | # http://www.hardcoded.net/licenses/bsd_license | ||||||
| 
 | 
 | ||||||
| from Foundation import NSFileManager, NSURL | from Foundation import NSFileManager, NSURL | ||||||
|  | from send2trash.compat import text_type | ||||||
| from send2trash.util import preprocess_paths | from send2trash.util import preprocess_paths | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -17,7 +18,7 @@ def check_op_result(op_result): | |||||||
| 
 | 
 | ||||||
| def send2trash(paths): | def send2trash(paths): | ||||||
|     paths = preprocess_paths(paths) |     paths = preprocess_paths(paths) | ||||||
|     paths = [path.decode("utf-8") if not isinstance(path, str) else path for path in paths] |     paths = [path.decode("utf-8") if not isinstance(path, text_type) else path for path in paths] | ||||||
|     for path in paths: |     for path in paths: | ||||||
|         file_url = NSURL.fileURLWithPath_(path) |         file_url = NSURL.fileURLWithPath_(path) | ||||||
|         fm = NSFileManager.defaultManager() |         fm = NSFileManager.defaultManager() | ||||||
|  | |||||||
| @ -30,6 +30,7 @@ except ImportError: | |||||||
|     # Python 2 |     # Python 2 | ||||||
|     from urllib import quote |     from urllib import quote | ||||||
| 
 | 
 | ||||||
|  | from send2trash.compat import text_type, environb | ||||||
| from send2trash.util import preprocess_paths | from send2trash.util import preprocess_paths | ||||||
| from send2trash.exceptions import TrashPermissionError | from send2trash.exceptions import TrashPermissionError | ||||||
| 
 | 
 | ||||||
| @ -52,21 +53,21 @@ INFO_DIR = b"info" | |||||||
| INFO_SUFFIX = b".trashinfo" | INFO_SUFFIX = b".trashinfo" | ||||||
| 
 | 
 | ||||||
| # Default of ~/.local/share [3] | # Default of ~/.local/share [3] | ||||||
| XDG_DATA_HOME = op.expanduser(os.environb.get(b"XDG_DATA_HOME", b"~/.local/share")) | XDG_DATA_HOME = op.expanduser(environb.get(b"XDG_DATA_HOME", b"~/.local/share")) | ||||||
| HOMETRASH_B = op.join(XDG_DATA_HOME, b"Trash") | HOMETRASH_B = op.join(XDG_DATA_HOME, b"Trash") | ||||||
| HOMETRASH = fsdecode(HOMETRASH_B) | HOMETRASH = fsdecode(HOMETRASH_B) | ||||||
| 
 | 
 | ||||||
| uid = os.getuid() | uid = os.getuid() | ||||||
| TOPDIR_TRASH = b".Trash" | TOPDIR_TRASH = b".Trash" | ||||||
| TOPDIR_FALLBACK = b".Trash-" + str(uid).encode("ascii") | TOPDIR_FALLBACK = b".Trash-" + text_type(uid).encode("ascii") | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def is_parent(parent, path): | def is_parent(parent, path): | ||||||
|     path = op.realpath(path)  # In case it's a symlink |     path = op.realpath(path)  # In case it's a symlink | ||||||
|     if isinstance(path, str): |     if isinstance(path, text_type): | ||||||
|         path = fsencode(path) |         path = fsencode(path) | ||||||
|     parent = op.realpath(parent) |     parent = op.realpath(parent) | ||||||
|     if isinstance(parent, str): |     if isinstance(parent, text_type): | ||||||
|         parent = fsencode(parent) |         parent = fsencode(parent) | ||||||
|     return path.startswith(parent) |     return path.startswith(parent) | ||||||
| 
 | 
 | ||||||
| @ -105,7 +106,7 @@ def trash_move(src, dst, topdir=None, cross_dev=False): | |||||||
|     destname = filename |     destname = filename | ||||||
|     while op.exists(op.join(filespath, destname)) or op.exists(op.join(infopath, destname + INFO_SUFFIX)): |     while op.exists(op.join(filespath, destname)) or op.exists(op.join(infopath, destname + INFO_SUFFIX)): | ||||||
|         counter += 1 |         counter += 1 | ||||||
|         destname = base_name + b" " + str(counter).encode("ascii") + ext |         destname = base_name + b" " + text_type(counter).encode("ascii") + ext | ||||||
| 
 | 
 | ||||||
|     check_create(filespath) |     check_create(filespath) | ||||||
|     check_create(infopath) |     check_create(infopath) | ||||||
| @ -114,7 +115,7 @@ def trash_move(src, dst, topdir=None, cross_dev=False): | |||||||
|         f.write(info_for(src, topdir)) |         f.write(info_for(src, topdir)) | ||||||
|     destpath = op.join(filespath, destname) |     destpath = op.join(filespath, destname) | ||||||
|     if cross_dev: |     if cross_dev: | ||||||
|         shutil.move(fsdecode(src), fsdecode(destpath)) |         shutil.move(src, destpath) | ||||||
|     else: |     else: | ||||||
|         os.rename(src, destpath) |         os.rename(src, destpath) | ||||||
| 
 | 
 | ||||||
| @ -141,7 +142,7 @@ def find_ext_volume_global_trash(volume_root): | |||||||
|     if not op.isdir(trash_dir) or op.islink(trash_dir) or not (mode & stat.S_ISVTX): |     if not op.isdir(trash_dir) or op.islink(trash_dir) or not (mode & stat.S_ISVTX): | ||||||
|         return None |         return None | ||||||
| 
 | 
 | ||||||
|     trash_dir = op.join(trash_dir, str(uid).encode("ascii")) |     trash_dir = op.join(trash_dir, text_type(uid).encode("ascii")) | ||||||
|     try: |     try: | ||||||
|         check_create(trash_dir) |         check_create(trash_dir) | ||||||
|     except OSError: |     except OSError: | ||||||
| @ -177,7 +178,7 @@ def get_dev(path): | |||||||
| def send2trash(paths): | def send2trash(paths): | ||||||
|     paths = preprocess_paths(paths) |     paths = preprocess_paths(paths) | ||||||
|     for path in paths: |     for path in paths: | ||||||
|         if isinstance(path, str): |         if isinstance(path, text_type): | ||||||
|             path_b = fsencode(path) |             path_b = fsencode(path) | ||||||
|         elif isinstance(path, bytes): |         elif isinstance(path, bytes): | ||||||
|             path_b = path |             path_b = path | ||||||
|  | |||||||
| @ -5,13 +5,9 @@ | |||||||
| # which should be included with this package. The terms are also available at | # which should be included with this package. The terms are also available at | ||||||
| # http://www.hardcoded.net/licenses/bsd_license | # http://www.hardcoded.net/licenses/bsd_license | ||||||
| 
 | 
 | ||||||
| import collections.abc |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| def preprocess_paths(paths): | def preprocess_paths(paths): | ||||||
|     if isinstance(paths, collections.abc.Iterable) and not isinstance(paths, (str, bytes)): |     if not isinstance(paths, list): | ||||||
|         paths = list(paths) |  | ||||||
|     elif not isinstance(paths, list): |  | ||||||
|         paths = [paths] |         paths = [paths] | ||||||
|     # Convert items such as pathlib paths to strings |     # Convert items such as pathlib paths to strings | ||||||
|     paths = [path.__fspath__() if hasattr(path, "__fspath__") else path for path in paths] |     paths = [path.__fspath__() if hasattr(path, "__fspath__") else path for path in paths] | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ | |||||||
| from __future__ import unicode_literals | from __future__ import unicode_literals | ||||||
| import os.path as op | import os.path as op | ||||||
| 
 | 
 | ||||||
|  | from send2trash.compat import text_type | ||||||
| from send2trash.util import preprocess_paths | from send2trash.util import preprocess_paths | ||||||
| 
 | 
 | ||||||
| from ctypes import ( | from ctypes import ( | ||||||
| @ -142,7 +143,7 @@ def send2trash(paths): | |||||||
|     if not paths: |     if not paths: | ||||||
|         return |         return | ||||||
|     # convert data type |     # convert data type | ||||||
|     paths = [str(path, "mbcs") if not isinstance(path, str) else path for path in paths] |     paths = [text_type(path, "mbcs") if not isinstance(path, text_type) else path for path in paths] | ||||||
|     # convert to full paths |     # convert to full paths | ||||||
|     paths = [op.abspath(path) if not op.isabs(path) else path for path in paths] |     paths = [op.abspath(path) if not op.isabs(path) else path for path in paths] | ||||||
|     # get short path to handle path length issues |     # get short path to handle path length issues | ||||||
|  | |||||||
| @ -6,6 +6,7 @@ | |||||||
| 
 | 
 | ||||||
| from __future__ import unicode_literals | from __future__ import unicode_literals | ||||||
| import os.path as op | import os.path as op | ||||||
|  | from send2trash.compat import text_type | ||||||
| from send2trash.util import preprocess_paths | from send2trash.util import preprocess_paths | ||||||
| from platform import version | from platform import version | ||||||
| import pythoncom | import pythoncom | ||||||
| @ -19,7 +20,7 @@ def send2trash(paths): | |||||||
|     if not paths: |     if not paths: | ||||||
|         return |         return | ||||||
|     # convert data type |     # convert data type | ||||||
|     paths = [str(path, "mbcs") if not isinstance(path, str) else path for path in paths] |     paths = [text_type(path, "mbcs") if not isinstance(path, text_type) else path for path in paths] | ||||||
|     # convert to full paths |     # convert to full paths | ||||||
|     paths = [op.abspath(path) if not op.isabs(path) else path for path in paths] |     paths = [op.abspath(path) if not op.isabs(path) else path for path in paths] | ||||||
|     # remove the leading \\?\ if present |     # remove the leading \\?\ if present | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								setup.cfg
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								setup.cfg
									
									
									
									
									
								
							| @ -1,6 +1,6 @@ | |||||||
| [metadata] | [metadata] | ||||||
| name = Send2Trash | name = Send2Trash | ||||||
| version = 2.0.0-dev | version = 1.8.2 | ||||||
| url = https://github.com/arsenetar/send2trash | url = https://github.com/arsenetar/send2trash | ||||||
| project_urls =  | project_urls =  | ||||||
|     Bug Reports = https://github.com/arsenetar/send2trash/issues |     Bug Reports = https://github.com/arsenetar/send2trash/issues | ||||||
| @ -18,19 +18,21 @@ classifiers = | |||||||
|     Operating System :: MacOS :: MacOS X |     Operating System :: MacOS :: MacOS X | ||||||
|     Operating System :: Microsoft :: Windows |     Operating System :: Microsoft :: Windows | ||||||
|     Operating System :: POSIX |     Operating System :: POSIX | ||||||
|  |     Programming Language :: Python :: 2.7 | ||||||
|     Programming Language :: Python :: 3 |     Programming Language :: Python :: 3 | ||||||
|  |     Programming Language :: Python :: 3.5 | ||||||
|  |     Programming Language :: Python :: 3.6 | ||||||
|  |     Programming Language :: Python :: 3.7 | ||||||
|     Programming Language :: Python :: 3.8 |     Programming Language :: Python :: 3.8 | ||||||
|     Programming Language :: Python :: 3.9 |     Programming Language :: Python :: 3.9 | ||||||
|     Programming Language :: Python :: 3.10 |     Programming Language :: Python :: 3.10 | ||||||
|     Programming Language :: Python :: 3.11 |     Programming Language :: Python :: 3.11 | ||||||
|     Programming Language :: Python :: 3.12 |  | ||||||
|     Programming Language :: Python :: 3.13 |  | ||||||
|     Topic :: Desktop Environment :: File Managers |     Topic :: Desktop Environment :: File Managers | ||||||
| 
 | 
 | ||||||
| [options] | [options] | ||||||
| packages = find: | packages = find: | ||||||
| tests_require = pytest | tests_require = pytest | ||||||
| python_requires = !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, !=3.7.* | python_requires = >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* | ||||||
| 
 | 
 | ||||||
| [options.packages.find] | [options.packages.find] | ||||||
| include= | include= | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ import codecs | |||||||
| import os | import os | ||||||
| import sys | import sys | ||||||
| from os import path as op | from os import path as op | ||||||
|  | from send2trash.compat import PY3 | ||||||
| from send2trash import TrashPermissionError | from send2trash import TrashPermissionError | ||||||
| 
 | 
 | ||||||
| try: | try: | ||||||
| @ -88,7 +89,7 @@ def _filesys_enc(): | |||||||
| 
 | 
 | ||||||
| @pytest.fixture | @pytest.fixture | ||||||
| def gen_unicode_file(): | def gen_unicode_file(): | ||||||
|     name = "send2trash_tést1" |     name = u"send2trash_tést1" | ||||||
|     file = op.join(op.expanduser(b"~"), name.encode("utf-8")) |     file = op.join(op.expanduser(b"~"), name.encode("utf-8")) | ||||||
|     touch(file) |     touch(file) | ||||||
|     assert op.exists(file) is True |     assert op.exists(file) is True | ||||||
| @ -116,7 +117,10 @@ def test_trash_unicode(gen_unicode_file): | |||||||
| class ExtVol: | class ExtVol: | ||||||
|     def __init__(self, path): |     def __init__(self, path): | ||||||
|         self.trash_topdir = path |         self.trash_topdir = path | ||||||
|         self.trash_topdir_b = os.fsencode(self.trash_topdir) |         if PY3: | ||||||
|  |             self.trash_topdir_b = os.fsencode(self.trash_topdir) | ||||||
|  |         else: | ||||||
|  |             self.trash_topdir_b = self.trash_topdir | ||||||
| 
 | 
 | ||||||
|         def s_getdev(path): |         def s_getdev(path): | ||||||
|             from send2trash.plat_other import is_parent |             from send2trash.plat_other import is_parent | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user