
As a result of the Hackathon we have produced a new documentation structure for the python-swiftclient. This patch introduces the new structure and adds the required content. The intention is to document the CLI, the SwiftService and Connection API. Importantly, we also provide guidance on important considerations when using a swift object store, such as which aspect of the python-swiftclient to use for various use cases, common authentication patterns and some useful examples. Co-Authored-By: Alexandra Settle <alexandra.settle@rackspace.com> Co-Authored-By: Mohit Motiani <mohit.motiani@intel.com> Co-Authored-By: Hisashi Osanai <osanai.hisashi@jp.fujitsu.com> Change-Id: I9eb41f8e9137efa66cead67dc264a76a3c03fbda
72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
import logging
|
|
|
|
from os.path import join, walk
|
|
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)
|