summaryrefslogtreecommitdiff
path: root/glanceclient/v1
diff options
context:
space:
mode:
authorAmalaBasha <amala.alungal@RACKSPACE.COM>2014-07-01 14:45:12 +0530
committerAmalaBasha <amala.alungal@RACKSPACE.COM>2014-07-10 13:22:05 +0530
commitdbb242b776908ca50ed8557ebfe7cfcd879366c8 (patch)
tree597e583588dfb4313cf9d10bca34cc956c716e9f /glanceclient/v1
parent1db17aaad9a04cc98fc848b23a76db52a5f62965 (diff)
downloadpython-glanceclient-dbb242b776908ca50ed8557ebfe7cfcd879366c8.tar.gz
Replace old httpclient with requests
This review implements blueprint python-request and replaces the old http client implementation in favor of a new one based on python-requests. Major changes: * raw_request and json_request removed since everything is now being handled by the same method "_request" * New methods that match HTTP's methods were added: - get - put - post - head - patch - delete * Content-Type is now being "inferred" based on the data being sent: - if it is file-like object it chunks the request - if it is a python type not instance of basestring then it'll try to serialize it to json - Every other case will keep the incoming content-type and will send the data as is. * Glanceclient's HTTPSConnection implementation will be used if no-compression flag is set to True. Co-Author: Flavio Percoco<flaper87@gmail.com> Change-Id: I09f70eee3e2777f52ce040296015d41649c2586a
Diffstat (limited to 'glanceclient/v1')
-rw-r--r--glanceclient/v1/client.py14
-rw-r--r--glanceclient/v1/image_members.py10
-rw-r--r--glanceclient/v1/images.py49
3 files changed, 35 insertions, 38 deletions
diff --git a/glanceclient/v1/client.py b/glanceclient/v1/client.py
index 23bb737..aeb94a2 100644
--- a/glanceclient/v1/client.py
+++ b/glanceclient/v1/client.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
-from glanceclient.common import http
+from glanceclient.common.http import HTTPClient
from glanceclient.common import utils
-from glanceclient.v1 import image_members
-from glanceclient.v1 import images
+from glanceclient.v1.image_members import ImageMemberManager
+from glanceclient.v1.images import ImageManager
class Client(object):
@@ -31,7 +31,7 @@ class Client(object):
def __init__(self, endpoint, *args, **kwargs):
"""Initialize a new client for the Images v1 API."""
- self.http_client = http.HTTPClient(utils.strip_version(endpoint),
- *args, **kwargs)
- self.images = images.ImageManager(self.http_client)
- self.image_members = image_members.ImageMemberManager(self.http_client)
+ self.http_client = HTTPClient(utils.strip_version(endpoint),
+ *args, **kwargs)
+ self.images = ImageManager(self.http_client)
+ self.image_members = ImageMemberManager(self.http_client)
diff --git a/glanceclient/v1/image_members.py b/glanceclient/v1/image_members.py
index f464fb8..d940a5f 100644
--- a/glanceclient/v1/image_members.py
+++ b/glanceclient/v1/image_members.py
@@ -34,7 +34,7 @@ class ImageMemberManager(base.ManagerWithFind):
def get(self, image, member_id):
image_id = base.getid(image)
url = '/v1/images/%s/members/%s' % (image_id, member_id)
- resp, body = self.client.json_request('GET', url)
+ resp, body = self.client.get(url)
member = body['member']
member['image_id'] = image_id
return ImageMember(self, member, loaded=True)
@@ -60,7 +60,7 @@ class ImageMemberManager(base.ManagerWithFind):
def _list_by_image(self, image):
image_id = base.getid(image)
url = '/v1/images/%s/members' % image_id
- resp, body = self.client.json_request('GET', url)
+ resp, body = self.client.get(url)
out = []
for member in body['members']:
member['image_id'] = image_id
@@ -70,7 +70,7 @@ class ImageMemberManager(base.ManagerWithFind):
def _list_by_member(self, member):
member_id = base.getid(member)
url = '/v1/shared-images/%s' % member_id
- resp, body = self.client.json_request('GET', url)
+ resp, body = self.client.get(url)
out = []
for member in body['shared_images']:
member['member_id'] = member_id
@@ -84,7 +84,7 @@ class ImageMemberManager(base.ManagerWithFind):
"""Creates an image."""
url = '/v1/images/%s/members/%s' % (base.getid(image), member_id)
body = {'member': {'can_share': can_share}}
- self._put(url, json=body)
+ self.client.put(url, data=body)
def replace(self, image, members):
memberships = []
@@ -100,4 +100,4 @@ class ImageMemberManager(base.ManagerWithFind):
obj['can_share'] = member['can_share']
memberships.append(obj)
url = '/v1/images/%s/members' % base.getid(image)
- self.client.json_request('PUT', url, {}, {'memberships': memberships})
+ self.client.put(url, data={'memberships': memberships})
diff --git a/glanceclient/v1/images.py b/glanceclient/v1/images.py
index d2af595..87060c2 100644
--- a/glanceclient/v1/images.py
+++ b/glanceclient/v1/images.py
@@ -14,10 +14,9 @@
# under the License.
import copy
-import json
import six
-from six.moves.urllib import parse
+import six.moves.urllib.parse as urlparse
from glanceclient.common import utils
from glanceclient.openstack.common.apiclient import base
@@ -60,12 +59,12 @@ class ImageManager(base.ManagerWithFind):
resource_class = Image
def _list(self, url, response_key, obj_class=None, body=None):
- resp = self.client.get(url)
+ resp, body = self.client.get(url)
if obj_class is None:
obj_class = self.resource_class
- data = resp.json()[response_key]
+ data = body[response_key]
return ([obj_class(self, res, loaded=True) for res in data if res],
resp)
@@ -123,13 +122,12 @@ class ImageManager(base.ManagerWithFind):
:rtype: :class:`Image`
"""
image_id = base.getid(image)
- resp, body = self.client.raw_request(
- 'HEAD', '/v1/images/%s' % parse.quote(str(image_id)))
- meta = self._image_meta_from_headers(dict(resp.getheaders()))
+ resp, body = self.client.head('/v1/images/%s'
+ % urlparse.quote(str(image_id)))
+ meta = self._image_meta_from_headers(resp.headers)
return_request_id = kwargs.get('return_req_id', None)
if return_request_id is not None:
- return_request_id.append(resp.getheader(OS_REQ_ID_HDR, None))
-
+ return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
return Image(self, meta)
def data(self, image, do_checksum=True, **kwargs):
@@ -140,14 +138,14 @@ class ImageManager(base.ManagerWithFind):
:rtype: iterable containing image data
"""
image_id = base.getid(image)
- resp, body = self.client.raw_request(
- 'GET', '/v1/images/%s' % parse.quote(str(image_id)))
- checksum = resp.getheader('x-image-meta-checksum', None)
+ resp, body = self.client.get('/v1/images/%s'
+ % urlparse.quote(str(image_id)))
+ checksum = resp.headers.get('x-image-meta-checksum', None)
if do_checksum and checksum is not None:
- body.set_checksum(checksum)
+ return utils.integrity_iter(body, checksum)
return_request_id = kwargs.get('return_req_id', None)
if return_request_id is not None:
- return_request_id.append(resp.getheader(OS_REQ_ID_HDR, None))
+ return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
return body
@@ -194,11 +192,11 @@ class ImageManager(base.ManagerWithFind):
# trying to encode them
qp[param] = strutils.safe_encode(value)
- url = '/v1/images/detail?%s' % parse.urlencode(qp)
+ url = '/v1/images/detail?%s' % urlparse.urlencode(qp)
images, resp = self._list(url, "images")
if return_request_id is not None:
- return_request_id.append(resp.getheader(OS_REQ_ID_HDR, None))
+ return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
for image in images:
if filter_owner(owner, image):
@@ -253,10 +251,11 @@ class ImageManager(base.ManagerWithFind):
def delete(self, image, **kwargs):
"""Delete an image."""
- resp = self._delete("/v1/images/%s" % base.getid(image))[0]
+ url = "/v1/images/%s" % base.getid(image)
+ resp, body = self.client.delete(url)
return_request_id = kwargs.get('return_req_id', None)
if return_request_id is not None:
- return_request_id.append(resp.getheader(OS_REQ_ID_HDR, None))
+ return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
def create(self, **kwargs):
"""Create an image
@@ -284,12 +283,12 @@ class ImageManager(base.ManagerWithFind):
if copy_from is not None:
hdrs['x-glance-api-copy-from'] = copy_from
- resp, body_iter = self.client.raw_request(
- 'POST', '/v1/images', headers=hdrs, body=image_data)
- body = json.loads(''.join([c for c in body_iter]))
+ resp, body = self.client.post('/v1/images',
+ headers=hdrs,
+ data=image_data)
return_request_id = kwargs.get('return_req_id', None)
if return_request_id is not None:
- return_request_id.append(resp.getheader(OS_REQ_ID_HDR, None))
+ return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
return Image(self, self._format_image_meta_for_user(body['image']))
@@ -327,11 +326,9 @@ class ImageManager(base.ManagerWithFind):
hdrs['x-glance-api-copy-from'] = copy_from
url = '/v1/images/%s' % base.getid(image)
- resp, body_iter = self.client.raw_request(
- 'PUT', url, headers=hdrs, body=image_data)
- body = json.loads(''.join([c for c in body_iter]))
+ resp, body = self.client.put(url, headers=hdrs, data=image_data)
return_request_id = kwargs.get('return_req_id', None)
if return_request_id is not None:
- return_request_id.append(resp.getheader(OS_REQ_ID_HDR, None))
+ return_request_id.append(resp.headers.get(OS_REQ_ID_HDR, None))
return Image(self, self._format_image_meta_for_user(body['image']))