Skip to content

Commit e47787e

Browse files
author
Steve Martinelli
committed
Add preliminary support for downloading objects
Added command and library to download a single object from swift Change-Id: I3dc47b414ff37b526e6f633aa83ac3aa4b5be0ae implements: bp swift-client
1 parent ae957b1 commit e47787e

3 files changed

Lines changed: 63 additions & 0 deletions

File tree

‎openstackclient/object/v1/lib/object.py‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,32 @@ def list_objects(
150150
return session.get(requrl, params=params).json()
151151

152152

153+
def save_object(
154+
session,
155+
url,
156+
container,
157+
obj,
158+
file=None
159+
):
160+
"""Save an object stored in a container
161+
162+
:param session: an authenticated keystoneclient.session.Session object
163+
:param url: endpoint
164+
:param container: name of container that stores object
165+
:param object: name of object to save
166+
:param file: local name of object
167+
"""
168+
169+
if not file:
170+
file = obj
171+
172+
response = session.get("%s/%s/%s" % (url, container, obj), stream=True)
173+
if response.status_code == 200:
174+
with open(file, 'wb') as f:
175+
for chunk in response.iter_content():
176+
f.write(chunk)
177+
178+
153179
def show_object(
154180
session,
155181
url,

‎openstackclient/object/v1/object.py‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,42 @@ def take_action(self, parsed_args):
183183
) for s in data))
184184

185185

186+
class SaveObject(command.Command):
187+
"""Save an object locally"""
188+
189+
log = logging.getLogger(__name__ + ".SaveObject")
190+
191+
def get_parser(self, prog_name):
192+
parser = super(SaveObject, self).get_parser(prog_name)
193+
parser.add_argument(
194+
"--file",
195+
metavar="<filename>",
196+
help="Downloaded object filename [defaults to object name]",
197+
)
198+
parser.add_argument(
199+
'container',
200+
metavar='<container>',
201+
help='Container name that has the object',
202+
)
203+
parser.add_argument(
204+
"object",
205+
metavar="<object>",
206+
help="Name of the object to save",
207+
)
208+
return parser
209+
210+
def take_action(self, parsed_args):
211+
self.log.debug("take_action(%s)", parsed_args)
212+
213+
lib_object.save_object(
214+
self.app.client_manager.session,
215+
self.app.client_manager.object_store.endpoint,
216+
parsed_args.container,
217+
parsed_args.object,
218+
parsed_args.file,
219+
)
220+
221+
186222
class ShowObject(show.ShowOne):
187223
"""Show object information"""
188224

‎setup.cfg‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ openstack.object_store.v1 =
277277
object_create = openstackclient.object.v1.object:CreateObject
278278
object_delete = openstackclient.object.v1.object:DeleteObject
279279
object_list = openstackclient.object.v1.object:ListObject
280+
object_save = openstackclient.object.v1.object:SaveObject
280281
object_show = openstackclient.object.v1.object:ShowObject
281282

282283
openstack.volume.v1 =

0 commit comments

Comments
 (0)