mirror of
				https://github.com/arsenetar/send2trash.git
				synced 2025-09-11 18:08:16 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									a8dbb1ac63
								
							
						
					
					
						commit
						bb8ed834da
					
				
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							| @ -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. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| include CHANGES | ||||
| include CHANGES.rst | ||||
							
								
								
									
										18
									
								
								README.rst
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								README.rst
									
									
									
									
									
								
							| @ -2,19 +2,25 @@ | ||||
| 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. | ||||
| *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. | ||||
| 
 | ||||
| Send2Trash supports Python 2.7 and up (Python 3 is supported). | ||||
| 
 | ||||
| Installation | ||||
| ------------ | ||||
| 
 | ||||
| Download the source from http://github.com/hsoft/send2trash and install it with:: | ||||
| You can download it with pip:: | ||||
| 
 | ||||
| >>> python setup.py install | ||||
|     pip install Send2Trash | ||||
| 
 | ||||
| or you can download the source from http://github.com/hsoft/send2trash and install it with:: | ||||
| 
 | ||||
|     >>> python setup.py install | ||||
| 
 | ||||
| Usage | ||||
| ----- | ||||
| @ -22,4 +28,4 @@ Usage | ||||
| >>> from send2trash import send2trash | ||||
| >>> send2trash('some_file') | ||||
| 
 | ||||
| When there's a problem ``OSError`` is raised. | ||||
| When there's a problem ``OSError`` is raised. | ||||
|  | ||||
| @ -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,  | ||||
| # which should be included with this package. The terms are also available at  | ||||
|  | ||||
							
								
								
									
										13
									
								
								send2trash/compat.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								send2trash/compat.py
									
									
									
									
									
										Normal 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 | ||||
| @ -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,  | ||||
| # 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 cdll, byref, Structure, c_char, c_char_p | ||||
| from ctypes.util import find_library | ||||
| 
 | ||||
| from .compat import binary_type | ||||
| 
 | ||||
| Foundation = cdll.LoadLibrary(find_library('Foundation')) | ||||
| CoreServices = cdll.LoadLibrary(find_library('CoreServices')) | ||||
| 
 | ||||
| @ -33,7 +37,7 @@ def check_op_result(op_result): | ||||
|         raise OSError(msg) | ||||
| 
 | ||||
| def send2trash(path): | ||||
|     if not isinstance(path, bytes): | ||||
|     if not isinstance(path, binary_type): | ||||
|         path = path.encode('utf-8') | ||||
|     fp = FSRef() | ||||
|     opts = kFSPathMakeRefDoNotFollowLeafSymlink | ||||
|  | ||||
| @ -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,  | ||||
| # 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 | ||||
| # find or create the user's trash directory. | ||||
| 
 | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| import sys | ||||
| import os | ||||
| import os.path as op | ||||
| from datetime import datetime | ||||
| import stat | ||||
| from urllib.parse import quote | ||||
| try: | ||||
|     from urllib.parse import quote | ||||
| except ImportError: | ||||
|     # Python 2 | ||||
|     from urllib import quote | ||||
| 
 | ||||
| FILES_DIR = 'files' | ||||
| INFO_DIR = 'info' | ||||
|  | ||||
| @ -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,  | ||||
| # 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.wintypes import HWND, UINT, LPCWSTR, BOOL | ||||
| import os.path as op | ||||
| 
 | ||||
| from .compat import text_type | ||||
| 
 | ||||
| shell32 = windll.shell32 | ||||
| SHFileOperationW = shell32.SHFileOperationW | ||||
| 
 | ||||
| @ -35,8 +39,8 @@ FOF_ALLOWUNDO = 64 | ||||
| FOF_NOERRORUI = 1024 | ||||
| 
 | ||||
| def send2trash(path): | ||||
|     if not isinstance(path, str): | ||||
|         path = str(path, 'mbcs') | ||||
|     if not isinstance(path, text_type): | ||||
|         path = text_type(path, 'mbcs') | ||||
|     if not op.isabs(path): | ||||
|         path = op.abspath(path) | ||||
|     fileop = SHFILEOPSTRUCTW() | ||||
|  | ||||
							
								
								
									
										3
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								setup.py
									
									
									
									
									
								
							| @ -10,6 +10,7 @@ CLASSIFIERS = [ | ||||
|     'Operating System :: MacOS :: MacOS X', | ||||
|     'Operating System :: Microsoft :: Windows', | ||||
|     'Operating System :: POSIX', | ||||
|     'Programming Language :: Python :: 2.7', | ||||
|     'Programming Language :: Python :: 3', | ||||
|     'Topic :: Desktop Environment :: File Managers', | ||||
| ] | ||||
| @ -17,7 +18,7 @@ CLASSIFIERS = [ | ||||
| LONG_DESCRIPTION = open('README.rst', 'rt').read() + '\n\n' + open('CHANGES.rst', 'rt').read() | ||||
| 
 | ||||
| setup( | ||||
|     name='Send2Trash3k', | ||||
|     name='Send2Trash', | ||||
|     version='1.2.0', | ||||
|     author='Hardcoded Software', | ||||
|     author_email='hsoft@hardcoded.net', | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user