Merge "add the ability to get an object back from swift"
This commit is contained in:
commit
53290944fb
@ -472,6 +472,11 @@ class ObjectMetadata(task_manager.Task):
|
|||||||
return client.swift_client.head_object(**self.args)
|
return client.swift_client.head_object(**self.args)
|
||||||
|
|
||||||
|
|
||||||
|
class ObjectGet(task_manager.Task):
|
||||||
|
def main(self, client):
|
||||||
|
return client.swift_client.get_object(**self.args)
|
||||||
|
|
||||||
|
|
||||||
class SubnetCreate(task_manager.Task):
|
class SubnetCreate(task_manager.Task):
|
||||||
def main(self, client):
|
def main(self, client):
|
||||||
return client.neutron_client.create_subnet(**self.args)
|
return client.neutron_client.create_subnet(**self.args)
|
||||||
|
@ -3751,6 +3751,31 @@ class OpenStackCloud(object):
|
|||||||
"Object metadata fetch failed: %s (%s/%s)" % (
|
"Object metadata fetch failed: %s (%s/%s)" % (
|
||||||
e.http_reason, e.http_host, e.http_path))
|
e.http_reason, e.http_host, e.http_path))
|
||||||
|
|
||||||
|
def get_object(self, container, obj, query_string=None,
|
||||||
|
resp_chunk_size=None):
|
||||||
|
"""Get the headers and body of an object from swift
|
||||||
|
|
||||||
|
:param string container: name of the container.
|
||||||
|
:param string obj: name of the object.
|
||||||
|
:param string query_string: query args for uri.
|
||||||
|
(delimiter, prefix, etc.)
|
||||||
|
:param int resp_chunk_size: chunk size of data to read.
|
||||||
|
|
||||||
|
:returns: Tuple (headers, body) of the object, or None if the object
|
||||||
|
is not found (404)
|
||||||
|
:raises: OpenStackCloudException on operation error.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return self.manager.submitTask(_tasks.ObjectGet(
|
||||||
|
container=container, obj=obj, query_string=query_string,
|
||||||
|
resp_chunk_size=resp_chunk_size))
|
||||||
|
except swift_exceptions.ClientException as e:
|
||||||
|
if e.http_status == 404:
|
||||||
|
return None
|
||||||
|
raise OpenStackCloudException(
|
||||||
|
"Object fetch failed: %s (%s/%s)" % (
|
||||||
|
e.http_reason, e.http_host, e.http_path))
|
||||||
|
|
||||||
def create_subnet(self, network_name_or_id, cidr, ip_version=4,
|
def create_subnet(self, network_name_or_id, cidr, ip_version=4,
|
||||||
enable_dhcp=False, subnet_name=None, tenant_id=None,
|
enable_dhcp=False, subnet_name=None, tenant_id=None,
|
||||||
allocation_pools=None,
|
allocation_pools=None,
|
||||||
|
@ -82,7 +82,7 @@ class Task(object):
|
|||||||
if type(self._result) == list:
|
if type(self._result) == list:
|
||||||
return meta.obj_list_to_dict(self._result)
|
return meta.obj_list_to_dict(self._result)
|
||||||
elif type(self._result) not in (bool, int, float, str, set,
|
elif type(self._result) not in (bool, int, float, str, set,
|
||||||
types.GeneratorType):
|
tuple, types.GeneratorType):
|
||||||
return meta.obj_to_dict(self._result)
|
return meta.obj_to_dict(self._result)
|
||||||
else:
|
else:
|
||||||
return self._result
|
return self._result
|
||||||
|
@ -64,6 +64,8 @@ class TestObject(base.TestCase):
|
|||||||
)
|
)
|
||||||
self.assertIsNotNone(
|
self.assertIsNotNone(
|
||||||
self.cloud.get_object_metadata(container_name, name))
|
self.cloud.get_object_metadata(container_name, name))
|
||||||
|
self.assertIsNotNone(
|
||||||
|
self.cloud.get_object(container_name, name))
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
name,
|
name,
|
||||||
self.cloud.list_objects(container_name)[0]['name'])
|
self.cloud.list_objects(container_name)[0]['name'])
|
||||||
|
@ -322,3 +322,32 @@ class TestObject(base.TestCase):
|
|||||||
self.assertRaises(shade.OpenStackCloudException,
|
self.assertRaises(shade.OpenStackCloudException,
|
||||||
self.cloud.delete_object,
|
self.cloud.delete_object,
|
||||||
container_name, object_name)
|
container_name, object_name)
|
||||||
|
|
||||||
|
@mock.patch.object(shade.OpenStackCloud, 'swift_client')
|
||||||
|
def test_get_object(self, mock_swift):
|
||||||
|
fake_resp = ({'headers': 'yup'}, 'test body')
|
||||||
|
mock_swift.get_object.return_value = fake_resp
|
||||||
|
container_name = 'container_name'
|
||||||
|
object_name = 'object_name'
|
||||||
|
resp = self.cloud.get_object(container_name, object_name)
|
||||||
|
self.assertEqual(fake_resp, resp)
|
||||||
|
|
||||||
|
@mock.patch.object(shade.OpenStackCloud, 'swift_client')
|
||||||
|
def test_get_object_not_found(self, mock_swift):
|
||||||
|
mock_swift.get_object.side_effect = swift_exc.ClientException(
|
||||||
|
'ERROR', http_status=404)
|
||||||
|
container_name = 'container_name'
|
||||||
|
object_name = 'object_name'
|
||||||
|
self.assertIsNone(self.cloud.get_object(container_name, object_name))
|
||||||
|
mock_swift.get_object.assert_called_once_with(
|
||||||
|
container=container_name, obj=object_name,
|
||||||
|
query_string=None, resp_chunk_size=None)
|
||||||
|
|
||||||
|
@mock.patch.object(shade.OpenStackCloud, 'swift_client')
|
||||||
|
def test_get_object_exception(self, mock_swift):
|
||||||
|
mock_swift.get_object.side_effect = swift_exc.ClientException("ERROR")
|
||||||
|
container_name = 'container_name'
|
||||||
|
object_name = 'object_name'
|
||||||
|
self.assertRaises(shade.OpenStackCloudException,
|
||||||
|
self.cloud.get_object,
|
||||||
|
container_name, object_name)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user