Updated send2trash to version 1.4.2.

Thu, 30 Nov 2017 17:00:18 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 30 Nov 2017 17:00:18 +0100
changeset 5994
cf0b37d2a28d
parent 5993
4b2b9be7de14
child 5996
e7a64baca254

Updated send2trash to version 1.4.2.

ThirdParty/Send2Trash/LICENSE file | annotate | diff | comparison | revisions
ThirdParty/Send2Trash/PKG-INFO file | annotate | diff | comparison | revisions
ThirdParty/Send2Trash/send2trash/compat.py file | annotate | diff | comparison | revisions
ThirdParty/Send2Trash/send2trash/plat_gio.py file | annotate | diff | comparison | revisions
ThirdParty/Send2Trash/send2trash/plat_osx.py file | annotate | diff | comparison | revisions
ThirdParty/Send2Trash/send2trash/plat_other.py file | annotate | diff | comparison | revisions
ThirdParty/Send2Trash/send2trash/plat_win.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
eric6.e4p file | annotate | diff | comparison | revisions
--- a/ThirdParty/Send2Trash/LICENSE	Sat Nov 25 13:49:54 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-Copyright (c) 2013, Hardcoded Software, http://www.hardcoded.net
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-    * Neither the name of Hardcoded Software Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ThirdParty/Send2Trash/PKG-INFO	Thu Nov 30 17:00:18 2017 +0100
@@ -0,0 +1,114 @@
+Metadata-Version: 1.1
+Name: Send2Trash
+Version: 1.4.2
+Summary: Send file to trash natively under Mac OS X, Windows and Linux.
+Home-page: https://github.com/hsoft/send2trash
+Author: Virgil Dupras
+Author-email: hsoft@hardcoded.net
+License: BSD License
+Description: ==================================================
+        Send2Trash -- Send files to trash on all platforms
+        ==================================================
+        
+        Send2Trash is a small package that sends files to the Trash (or Recycle Bin) *natively* and on
+        *all platforms*. On OS X, it uses native ``FSMoveObjectToTrashSync`` Cocoa calls, on Windows, it
+        uses native (and ugly) ``SHFileOperation`` win32 calls. On other platforms, if `PyGObject`_ and
+        `GIO`_ are available, it will use this.  Otherwise, it will fallback to its own implementation
+        of the `trash specifications from freedesktop.org`_.
+        
+        ``ctypes`` is used to access native libraries, so no compilation is necessary.
+        
+        Send2Trash supports Python 2.7 and up (Python 3 is supported).
+        
+        Installation
+        ------------
+        
+        You can download it with pip::
+        
+            pip install Send2Trash
+        
+        or you can download the source from http://github.com/hsoft/send2trash and install it with::
+        
+            >>> python setup.py install
+        
+        Usage
+        -----
+        
+        >>> from send2trash import send2trash
+        >>> send2trash('some_file')
+        
+        When there's a problem ``OSError`` is raised.
+        
+        .. _PyGObject: https://wiki.gnome.org/PyGObject
+        .. _GIO: https://developer.gnome.org/gio/
+        .. _trash specifications from freedesktop.org: http://freedesktop.org/wiki/Specifications/trash-spec/
+        
+        
+        Changes
+        =======
+        
+        Version 1.4.2 -- 2017/11/17
+        ---------------------------
+        
+        * Fix incompatibility with Python 3.6 on Windows. (#18)
+        
+        Version 1.4.1 -- 2017/08/07
+        ---------------------------
+        
+        * Fix crash on Windows introduced in v1.4.0. Oops... (#14)
+        
+        Version 1.4.0 -- 2017/08/07
+        ---------------------------
+        
+        * Use ``bytes`` instead of ``str`` for internal path handling in ``plat_other``. (#13)
+        
+        Version 1.3.1 -- 2017/07/31
+        ---------------------------
+        
+        * Throw ``WindowsError`` instead of ``OSError`` in ``plat_win``. (#7)
+        * Fix ``TypeError`` on python 2 in ``plat_other``. (#12)
+        
+        Version 1.3.0 -- 2013/07/19
+        ---------------------------
+        
+        * Added support for Gnome's GIO.
+        * Merged Python 3 and Python 2 versions in a single codebase.
+        
+        Version 1.2.0 -- 2011/03/16
+        ---------------------------
+        
+        * Improved ``plat_other`` to follow freedesktop.org trash specification.
+        
+        Version 1.1.0 -- 2010/10/18
+        ---------------------------
+        
+        * Converted compiled modules to ctypes so that cross-platform compilation isn't necessary anymore.
+        
+        Version 1.0.2 -- 2010/07/10
+        ---------------------------
+        
+        * Fixed bugs with external volumes in plat_other.
+        
+        Version 1.0.1 -- 2010/04/19
+        ---------------------------
+        
+        * Fixed memory leak in OS X module.
+        
+        Version 1.0.0 -- 2010/04/07
+        ---------------------------
+        
+        * Initial Release
+        
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Operating System :: MacOS :: MacOS X
+Classifier: Operating System :: Microsoft :: Windows
+Classifier: Operating System :: POSIX
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Topic :: Desktop Environment :: File Managers
--- a/ThirdParty/Send2Trash/send2trash/compat.py	Sat Nov 25 13:49:54 2017 +0100
+++ b/ThirdParty/Send2Trash/send2trash/compat.py	Thu Nov 30 17:00:18 2017 +0100
@@ -1,15 +1,22 @@
-# Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
+# 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 
+# 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
 
 from __future__ import unicode_literals
 
 import sys
-if sys.version < '3':
+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
     binary_type = str
-else:
-    text_type = str
-    binary_type = bytes
+    environb = os.environ
--- a/ThirdParty/Send2Trash/send2trash/plat_gio.py	Sat Nov 25 13:49:54 2017 +0100
+++ b/ThirdParty/Send2Trash/send2trash/plat_gio.py	Thu Nov 30 17:00:18 2017 +0100
@@ -1,7 +1,7 @@
-# Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
+# 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 
+# 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
 
 from __future__ import unicode_literals
--- a/ThirdParty/Send2Trash/send2trash/plat_osx.py	Sat Nov 25 13:49:54 2017 +0100
+++ b/ThirdParty/Send2Trash/send2trash/plat_osx.py	Thu Nov 30 17:00:18 2017 +0100
@@ -1,7 +1,7 @@
-# Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
+# 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 
+# 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
 
 from __future__ import unicode_literals
--- a/ThirdParty/Send2Trash/send2trash/plat_other.py	Sat Nov 25 13:49:54 2017 +0100
+++ b/ThirdParty/Send2Trash/send2trash/plat_other.py	Thu Nov 30 17:00:18 2017 +0100
@@ -1,7 +1,7 @@
-# Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
+# 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 
+# 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
 
 # This is a reimplementation of plat_other.py with reference to the
@@ -15,10 +15,6 @@
 # find or create the user's trash directory.
 
 from __future__ import unicode_literals
-try:
-    str = unicode
-except NameError:
-    pass
 
 import sys
 import os
@@ -31,28 +27,46 @@
     # Python 2
     from urllib import quote
 
-FILES_DIR = 'files'
-INFO_DIR = 'info'
-INFO_SUFFIX = '.trashinfo'
+from .compat import text_type, environb
+
+try:
+    fsencode = os.fsencode   # Python 3
+    fsdecode = os.fsdecode
+except AttributeError:
+    def fsencode(u):         # Python 2
+        return u.encode(sys.getfilesystemencoding())
+    def fsdecode(b):
+        return b.decode(sys.getfilesystemencoding())
+    # The Python 3 versions are a bit smarter, handling surrogate escapes,
+    # but these should work in most cases.
+
+FILES_DIR = b'files'
+INFO_DIR = b'info'
+INFO_SUFFIX = b'.trashinfo'
 
 # Default of ~/.local/share [3]
-XDG_DATA_HOME = op.expanduser(os.environ.get('XDG_DATA_HOME', '~/.local/share'))
-HOMETRASH = op.join(XDG_DATA_HOME, 'Trash')
+XDG_DATA_HOME = op.expanduser(environb.get(b'XDG_DATA_HOME', b'~/.local/share'))
+HOMETRASH_B = op.join(XDG_DATA_HOME, b'Trash')
+HOMETRASH = fsdecode(HOMETRASH_B)
 
 uid = os.getuid()
-TOPDIR_TRASH = '.Trash'
-TOPDIR_FALLBACK = '.Trash-' + str(uid)
+TOPDIR_TRASH = b'.Trash'
+TOPDIR_FALLBACK = b'.Trash-' + text_type(uid).encode('ascii')
 
 def is_parent(parent, path):
     path = op.realpath(path) # In case it's a symlink
+    if isinstance(path, text_type):
+        path = fsencode(path)
     parent = op.realpath(parent)
+    if isinstance(parent, text_type):
+        parent = fsencode(parent)
     return path.startswith(parent)
 
 def format_date(date):
     return date.strftime("%Y-%m-%dT%H:%M:%S")
 
 def info_for(src, topdir):
-    # ...it MUST not include a ".."" directory, and for files not "under" that
+    # ...it MUST not include a ".." directory, and for files not "under" that
     # directory, absolute pathnames must be used. [2]
     if topdir is None or not is_parent(topdir, src):
         src = op.abspath(src)
@@ -79,22 +93,15 @@
     destname = filename
     while op.exists(op.join(filespath, destname)) or op.exists(op.join(infopath, destname + INFO_SUFFIX)):
         counter += 1
-        destname = '%s %s%s' % (base_name, counter, ext)
-    
+        destname = base_name + b' ' + text_type(counter).encode('ascii') + ext
+
     check_create(filespath)
     check_create(infopath)
-    
+
     os.rename(src, op.join(filespath, destname))
     f = open(op.join(infopath, destname + INFO_SUFFIX), 'w')
     f.write(info_for(src, topdir))
     f.close()
-    
-    # added by detlev@die-offenbachs.de to update the Trash metadata file
-    metadata = op.join(dst, "metadata")
-    entriesCount = len(os.listdir(filespath))
-    f = open(metadata, 'w')
-    f.write("[Cached]\nSize={0}\n".format(entriesCount))
-    f.close()
 
 def find_mount_point(path):
     # Even if something's wrong, "/" is a mount point, so the loop will exit.
@@ -110,14 +117,14 @@
     trash_dir = op.join(volume_root, TOPDIR_TRASH)
     if not op.exists(trash_dir):
         return None
-    
+
     mode = os.lstat(trash_dir).st_mode
     # vol/.Trash must be a directory, cannot be a symlink, and must have the
     # sticky bit set.
     if not op.isdir(trash_dir) or op.islink(trash_dir) or not (mode & stat.S_ISVTX):
         return None
 
-    trash_dir = op.join(trash_dir, str(uid))
+    trash_dir = op.join(trash_dir, text_type(uid).encode('ascii'))
     try:
         check_create(trash_dir)
     except OSError:
@@ -143,29 +150,37 @@
     return os.lstat(path).st_dev
 
 def send2trash(path):
-    if not isinstance(path, str):
-        path = str(path, sys.getfilesystemencoding())
-    if not op.exists(path):
+    if isinstance(path, text_type):
+        path_b = fsencode(path)
+    elif isinstance(path, bytes):
+        path_b = path
+    elif hasattr(path, '__fspath__'):
+        # Python 3.6 PathLike protocol
+        return send2trash(path.__fspath__())
+    else:
+        raise TypeError('str, bytes or PathLike expected, not %r' % type(path))
+
+    if not op.exists(path_b):
         raise OSError("File not found: %s" % path)
     # ...should check whether the user has the necessary permissions to delete
     # it, before starting the trashing operation itself. [2]
-    if not os.access(path, os.W_OK):
+    if not os.access(path_b, os.W_OK):
         raise OSError("Permission denied: %s" % path)
     # if the file to be trashed is on the same device as HOMETRASH we
     # want to move it there.
-    path_dev = get_dev(path)
-    
+    path_dev = get_dev(path_b)
+
     # If XDG_DATA_HOME or HOMETRASH do not yet exist we need to stat the
     # home directory, and these paths will be created further on if needed.
-    trash_dev = get_dev(op.expanduser('~'))
+    trash_dev = get_dev(op.expanduser(b'~'))
 
     if path_dev == trash_dev:
         topdir = XDG_DATA_HOME
-        dest_trash = HOMETRASH
+        dest_trash = HOMETRASH_B
     else:
-        topdir = find_mount_point(path)
+        topdir = find_mount_point(path_b)
         trash_dev = get_dev(topdir)
         if trash_dev != path_dev:
             raise OSError("Couldn't find mount point for %s" % path)
         dest_trash = find_ext_volume_trash(topdir)
-    trash_move(path, dest_trash, topdir)
+    trash_move(path_b, dest_trash, topdir)
--- a/ThirdParty/Send2Trash/send2trash/plat_win.py	Sat Nov 25 13:49:54 2017 +0100
+++ b/ThirdParty/Send2Trash/send2trash/plat_win.py	Thu Nov 30 17:00:18 2017 +0100
@@ -1,12 +1,13 @@
-# Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
+# 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 
+# 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
 
 from __future__ import unicode_literals
 
-from ctypes import windll, Structure, byref, c_uint
+from ctypes import (windll, Structure, byref, c_uint,
+                    create_unicode_buffer, sizeof, addressof)
 from ctypes.wintypes import HWND, UINT, LPCWSTR, BOOL
 import os.path as op
 
@@ -46,7 +47,19 @@
     fileop = SHFILEOPSTRUCTW()
     fileop.hwnd = 0
     fileop.wFunc = FO_DELETE
-    fileop.pFrom = LPCWSTR(path + '\0')
+    # FIX: https://github.com/hsoft/send2trash/issues/17
+    # Starting in python 3.6.3 it is no longer possible to use:
+    # LPCWSTR(path + '\0') directly as embedded null characters are no longer
+    # allowed in strings
+    # Workaround 
+    #  - create buffer of c_wchar[] (LPCWSTR is based on this type)
+    #  - buffer is two c_wchar characters longer (double null terminator)
+    #  - cast the address of the buffer to a LPCWSTR
+    # NOTE: based on how python allocates memory for these types they should
+    # always be zero, if this is ever not true we can go back to explicitly
+    # setting the last two characters to null using buffer[index] = '\0'.
+    buffer = create_unicode_buffer(path, len(path)+2)
+    fileop.pFrom = LPCWSTR(addressof(buffer))
     fileop.pTo = None
     fileop.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT
     fileop.fAnyOperationsAborted = 0
@@ -54,6 +67,4 @@
     fileop.lpszProgressTitle = None
     result = SHFileOperationW(byref(fileop))
     if result:
-        msg = "Couldn't perform operation. Error code: %d" % result
-        raise OSError(msg)
-
+        raise WindowsError(None, None, path, result)
--- a/changelog	Sat Nov 25 13:49:54 2017 +0100
+++ b/changelog	Thu Nov 30 17:00:18 2017 +0100
@@ -13,6 +13,8 @@
      situations on low power or low memory machines)
 - Styles
   -- added a dark style (*.qss and Python lexers) provided by Giuseppe Corbelli
+- Third Party packages
+  -- updated send2trash to version 1.4.2
 
 Version 17.11:
 - bug fixes
--- a/eric6.e4p	Sat Nov 25 13:49:54 2017 +0100
+++ b/eric6.e4p	Thu Nov 30 17:00:18 2017 +0100
@@ -2118,7 +2118,7 @@
     <Other>ThirdParty/Pygments/pygments/CHANGES</Other>
     <Other>ThirdParty/Pygments/pygments/LICENSE</Other>
     <Other>ThirdParty/Pygments/pygments/PKG-INFO</Other>
-    <Other>ThirdParty/Send2Trash/LICENSE</Other>
+    <Other>ThirdParty/Send2Trash/PKG-INFO</Other>
     <Other>ThirdParty/enum/LICENSE</Other>
     <Other>UI/data/documentViewerStyle.css</Other>
     <Other>WebBrowser/Bookmarks/DefaultBookmarks.xbel</Other>

eric ide

mercurial