1
0
mirror of https://github.com/arsenetar/send2trash.git synced 2026-01-25 16:11:39 +00:00

8 Commits
1.2.0 ... 1.3.0

Author SHA1 Message Date
Virgil Dupras
a568370c6a v1.3.0 2013-07-19 19:26:34 -04:00
Virgil Dupras
baf125ff61 Added support for Gnome's gio
Instead of using our own Freedesktop's trash implementation,
use gio when it's available.
2013-07-19 19:16:11 -04:00
Virgil Dupras
bb8ed834da Add same-codebase support for python 2.7.
When I opted for two codebases for python2/python3,
Send2Trash used C modules and it was easier to just have two
packages. With the ctypes version, supporting both python
versions becomes trivial and it's much more convenient to
merge them back into a single codebase.

I've only tested this code on Linux. I've converted plat_osx and
plat_win, but they only work theoretically.
2013-07-19 18:42:32 -04:00
Virgil Dupras
a8dbb1ac63 Renamed CHANGES --> CHANGES.rst
And fixed setup.py which was broken since README rename.
2013-07-19 18:23:00 -04:00
Virgil Dupras
bfd8f6e024 Updated repo URL to point to GH. 2013-07-19 18:18:16 -04:00
Virgil Dupras
8996fb9eac Renamed README --> README.rst 2013-07-19 18:14:27 -04:00
Virgil Dupras
f7a6f217ce Converted to git. 2013-07-19 18:12:18 -04:00
Virgil Dupras
a4936be846 Added tag 1.2.0 for changeset 2cba92b88b1d 2011-03-16 10:27:52 +01:00
14 changed files with 106 additions and 48 deletions

View File

@@ -1,7 +1,5 @@
syntax: glob
*.pyc *.pyc
*.egg-info *.egg-info
build /build
dist /dist
.DS_Store .DS_Store

View File

@@ -1,3 +0,0 @@
48c2103380f5e7deca49364f44fb31ded9942bb7 1.0.0
a7e04d8e47e161daaa1f031a7c1e98c52fa269ac 1.0.1
de5f43fcce5e776eb28306951939afb9946cbd3d 1.1.0

View File

@@ -1,6 +1,12 @@
Changes Changes
======= =======
Version 1.3.0 -- 2013/07/19
---------------------------
* Added support for Gnome's GIO.
* Merged Python 3 and Python 2 vesion in a single codebase.
Version 1.2.0 -- 2011/03/16 Version 1.2.0 -- 2011/03/16
--------------------------- ---------------------------

View File

@@ -1,4 +1,4 @@
Copyright (c) 2010, Hardcoded Software Inc., http://www.hardcoded.net Copyright (c) 2013, Hardcoded Software, http://www.hardcoded.net
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

View File

@@ -1 +1 @@
include CHANGES include CHANGES.rst

25
README
View File

@@ -1,25 +0,0 @@
==================================================
Send2Trash -- Send files to trash on all platforms
==================================================
This is a Python 3 package. The Python 2 package is at http://pypi.python.org/pypi/Send2Trash .
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, it follows the trash specifications from freedesktop.org.
``ctypes`` is used to access native libraries, so no compilation is necessary.
Installation
------------
Download the source from http://hg.hardcoded.net/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.

36
README.rst Normal file
View File

@@ -0,0 +1,36 @@
==================================================
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/

View File

@@ -1,4 +1,4 @@
# Copyright 2010 Hardcoded Software (http://www.hardcoded.net) # Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
# This software is licensed under the "BSD" License as described in the "LICENSE" file, # 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 # which should be included with this package. The terms are also available at
@@ -11,4 +11,9 @@ if sys.platform == 'darwin':
elif sys.platform == 'win32': elif sys.platform == 'win32':
from .plat_win import send2trash from .plat_win import send2trash
else: else:
from .plat_other import send2trash try:
# If we can use gio, let's use it
from .plat_gio import send2trash
except ImportError:
# Oh well, let's fallback to our own Freedesktop trash implementation
from .plat_other import send2trash

13
send2trash/compat.py Normal file
View File

@@ -0,0 +1,13 @@
# Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
# 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
if sys.version < '3':
text_type = unicode
binary_type = str
else:
text_type = str
binary_type = bytes

14
send2trash/plat_gio.py Normal file
View File

@@ -0,0 +1,14 @@
# Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
# 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 gi.repository import GObject, Gio
def send2trash(path):
try:
f = Gio.File.new_for_path(path)
f.trash(cancellable=None)
except GObject.GError as e:
raise OSError(e.message)

View File

@@ -1,12 +1,16 @@
# Copyright 2010 Hardcoded Software (http://www.hardcoded.net) # Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
# This software is licensed under the "BSD" License as described in the "LICENSE" file, # 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 # 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
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 .compat import binary_type
Foundation = cdll.LoadLibrary(find_library('Foundation')) Foundation = cdll.LoadLibrary(find_library('Foundation'))
CoreServices = cdll.LoadLibrary(find_library('CoreServices')) CoreServices = cdll.LoadLibrary(find_library('CoreServices'))
@@ -33,7 +37,7 @@ def check_op_result(op_result):
raise OSError(msg) raise OSError(msg)
def send2trash(path): def send2trash(path):
if not isinstance(path, bytes): if not isinstance(path, binary_type):
path = path.encode('utf-8') path = path.encode('utf-8')
fp = FSRef() fp = FSRef()
opts = kFSPathMakeRefDoNotFollowLeafSymlink opts = kFSPathMakeRefDoNotFollowLeafSymlink

View File

@@ -1,4 +1,4 @@
# Copyright 2010 Hardcoded Software (http://www.hardcoded.net) # Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
# This software is licensed under the "BSD" License as described in the "LICENSE" file, # 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 # which should be included with this package. The terms are also available at
@@ -14,12 +14,18 @@
# For external volumes this implementation will raise an exception if it can't # For external volumes this implementation will raise an exception if it can't
# find or create the user's trash directory. # find or create the user's trash directory.
from __future__ import unicode_literals
import sys import sys
import os import os
import os.path as op import os.path as op
from datetime import datetime from datetime import datetime
import stat import stat
from urllib.parse import quote try:
from urllib.parse import quote
except ImportError:
# Python 2
from urllib import quote
FILES_DIR = 'files' FILES_DIR = 'files'
INFO_DIR = 'info' INFO_DIR = 'info'

View File

@@ -1,13 +1,17 @@
# Copyright 2010 Hardcoded Software (http://www.hardcoded.net) # Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
# This software is licensed under the "BSD" License as described in the "LICENSE" file, # 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 # 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
from __future__ import unicode_literals
from ctypes import windll, Structure, byref, c_uint from ctypes import windll, Structure, byref, c_uint
from ctypes.wintypes import HWND, UINT, LPCWSTR, BOOL from ctypes.wintypes import HWND, UINT, LPCWSTR, BOOL
import os.path as op import os.path as op
from .compat import text_type
shell32 = windll.shell32 shell32 = windll.shell32
SHFileOperationW = shell32.SHFileOperationW SHFileOperationW = shell32.SHFileOperationW
@@ -35,8 +39,8 @@ FOF_ALLOWUNDO = 64
FOF_NOERRORUI = 1024 FOF_NOERRORUI = 1024
def send2trash(path): def send2trash(path):
if not isinstance(path, str): if not isinstance(path, text_type):
path = str(path, 'mbcs') path = text_type(path, 'mbcs')
if not op.isabs(path): if not op.isabs(path):
path = op.abspath(path) path = op.abspath(path)
fileop = SHFILEOPSTRUCTW() fileop = SHFILEOPSTRUCTW()

View File

@@ -10,23 +10,23 @@ 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',
'Topic :: Desktop Environment :: File Managers', 'Topic :: Desktop Environment :: File Managers',
] ]
LONG_DESCRIPTION = open('README', 'rt').read() + '\n\n' + open('CHANGES', 'rt').read() LONG_DESCRIPTION = open('README.rst', 'rt').read() + '\n\n' + open('CHANGES.rst', 'rt').read()
setup( setup(
name='Send2Trash3k', name='Send2Trash',
version='1.2.0', version='1.3.0',
author='Hardcoded Software', author='Hardcoded Software',
author_email='hsoft@hardcoded.net', author_email='hsoft@hardcoded.net',
packages=['send2trash'], packages=['send2trash'],
scripts=[], scripts=[],
url='http://hg.hardcoded.net/send2trash/', url='http://github.com/hsoft/send2trash',
license='BSD License', license='BSD License',
description='Send file to trash natively under Mac OS X, Windows and Linux.', description='Send file to trash natively under Mac OS X, Windows and Linux.',
long_description=LONG_DESCRIPTION, long_description=LONG_DESCRIPTION,
classifiers=CLASSIFIERS, classifiers=CLASSIFIERS,
zip_safe=False,
) )