 daed43a44a
			
		
	
	daed43a44a
	
	
	
		
			
			This patch fixes a missing code-block section in the capabilities section of service-api.rst, and fixes the import of walk in the upload.py examples to support both python2 and python3. Change-Id: I572769f971f84e0029f2948e42c130e73517f434
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import logging
 | |
| 
 | |
| from os import walk
 | |
| from os.path import join
 | |
| from swiftclient.multithreading import OutputManager
 | |
| from swiftclient.service import SwiftError, SwiftService, SwiftUploadObject
 | |
| from sys import argv
 | |
| 
 | |
| logging.basicConfig(level=logging.ERROR)
 | |
| logging.getLogger("requests").setLevel(logging.CRITICAL)
 | |
| logging.getLogger("swiftclient").setLevel(logging.CRITICAL)
 | |
| logger = logging.getLogger(__name__)
 | |
| 
 | |
| _opts = {'object_uu_threads': 20}
 | |
| dir = argv[1]
 | |
| container = argv[2]
 | |
| with SwiftService(options=_opts) as swift, OutputManager() as out_manager:
 | |
|     try:
 | |
|         # Collect all the files and folders in the given directory
 | |
|         objs = []
 | |
|         dir_markers = []
 | |
|         for (_dir, _ds, _fs) in walk(dir):
 | |
|             if not (_ds + _fs):
 | |
|                 dir_markers.append(_dir)
 | |
|             else:
 | |
|                 objs.extend([join(_dir, _f) for _f in _fs])
 | |
| 
 | |
|         # Now that we've collected all the required files and dir markers
 | |
|         # build the ``SwiftUploadObject``s for the call to upload
 | |
|         objs = [
 | |
|             SwiftUploadObject(
 | |
|                 o, object_name=o.replace(
 | |
|                     dir, 'my-%s-objects' % dir, 1
 | |
|                 )
 | |
|             ) for o in objs
 | |
|         ]
 | |
|         dir_markers = [
 | |
|             SwiftUploadObject(
 | |
|                 None, object_name=d.replace(
 | |
|                     dir, 'my-%s-objects' % dir, 1
 | |
|                 ), options={'dir_marker': True}
 | |
|             ) for d in dir_markers
 | |
|         ]
 | |
| 
 | |
|         # Schedule uploads on the SwiftService thread pool and iterate
 | |
|         # over the results
 | |
|         for r in swift.upload(container, objs + dir_markers):
 | |
|             if r['success']:
 | |
|                 if 'object' in r:
 | |
|                     print(r['object'])
 | |
|                 elif 'for_object' in r:
 | |
|                     print(
 | |
|                         '%s segment %s' % (r['for_object'],
 | |
|                                            r['segment_index'])
 | |
|                         )
 | |
|             else:
 | |
|                 error = r['error']
 | |
|                 if r['action'] == "create_container":
 | |
|                     logger.warning(
 | |
|                         'Warning: failed to create container '
 | |
|                         "'%s'%s", container, error
 | |
|                     )
 | |
|                 elif r['action'] == "upload_object":
 | |
|                     logger.error(
 | |
|                         "Failed to upload object %s to container %s: %s" %
 | |
|                         (container, r['object'], error)
 | |
|                     )
 | |
|                 else:
 | |
|                     logger.error("%s" % error)
 | |
| 
 | |
|     except SwiftError as e:
 | |
|         logger.error(e.value)
 |