Add preliminary support for downloading objects
Added command and library to download a single object from swift Change-Id: I3dc47b414ff37b526e6f633aa83ac3aa4b5be0ae implements: bp swift-client
This commit is contained in:
parent
ae957b176e
commit
e47787e12f
@ -150,6 +150,32 @@ def list_objects(
|
|||||||
return session.get(requrl, params=params).json()
|
return session.get(requrl, params=params).json()
|
||||||
|
|
||||||
|
|
||||||
|
def save_object(
|
||||||
|
session,
|
||||||
|
url,
|
||||||
|
container,
|
||||||
|
obj,
|
||||||
|
file=None
|
||||||
|
):
|
||||||
|
"""Save an object stored in a container
|
||||||
|
|
||||||
|
:param session: an authenticated keystoneclient.session.Session object
|
||||||
|
:param url: endpoint
|
||||||
|
:param container: name of container that stores object
|
||||||
|
:param object: name of object to save
|
||||||
|
:param file: local name of object
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not file:
|
||||||
|
file = obj
|
||||||
|
|
||||||
|
response = session.get("%s/%s/%s" % (url, container, obj), stream=True)
|
||||||
|
if response.status_code == 200:
|
||||||
|
with open(file, 'wb') as f:
|
||||||
|
for chunk in response.iter_content():
|
||||||
|
f.write(chunk)
|
||||||
|
|
||||||
|
|
||||||
def show_object(
|
def show_object(
|
||||||
session,
|
session,
|
||||||
url,
|
url,
|
||||||
|
@ -183,6 +183,42 @@ class ListObject(lister.Lister):
|
|||||||
) for s in data))
|
) for s in data))
|
||||||
|
|
||||||
|
|
||||||
|
class SaveObject(command.Command):
|
||||||
|
"""Save an object locally"""
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__ + ".SaveObject")
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(SaveObject, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
"--file",
|
||||||
|
metavar="<filename>",
|
||||||
|
help="Downloaded object filename [defaults to object name]",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'container',
|
||||||
|
metavar='<container>',
|
||||||
|
help='Container name that has the object',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"object",
|
||||||
|
metavar="<object>",
|
||||||
|
help="Name of the object to save",
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
self.log.debug("take_action(%s)", parsed_args)
|
||||||
|
|
||||||
|
lib_object.save_object(
|
||||||
|
self.app.client_manager.session,
|
||||||
|
self.app.client_manager.object_store.endpoint,
|
||||||
|
parsed_args.container,
|
||||||
|
parsed_args.object,
|
||||||
|
parsed_args.file,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ShowObject(show.ShowOne):
|
class ShowObject(show.ShowOne):
|
||||||
"""Show object information"""
|
"""Show object information"""
|
||||||
|
|
||||||
|
@ -277,6 +277,7 @@ openstack.object_store.v1 =
|
|||||||
object_create = openstackclient.object.v1.object:CreateObject
|
object_create = openstackclient.object.v1.object:CreateObject
|
||||||
object_delete = openstackclient.object.v1.object:DeleteObject
|
object_delete = openstackclient.object.v1.object:DeleteObject
|
||||||
object_list = openstackclient.object.v1.object:ListObject
|
object_list = openstackclient.object.v1.object:ListObject
|
||||||
|
object_save = openstackclient.object.v1.object:SaveObject
|
||||||
object_show = openstackclient.object.v1.object:ShowObject
|
object_show = openstackclient.object.v1.object:ShowObject
|
||||||
|
|
||||||
openstack.volume.v1 =
|
openstack.volume.v1 =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user