diff options
author | AmalaBasha <amala.alungal@RACKSPACE.COM> | 2014-07-01 14:45:12 +0530 |
---|---|---|
committer | AmalaBasha <amala.alungal@RACKSPACE.COM> | 2014-07-10 13:22:05 +0530 |
commit | dbb242b776908ca50ed8557ebfe7cfcd879366c8 (patch) | |
tree | 597e583588dfb4313cf9d10bca34cc956c716e9f /glanceclient/v1 | |
parent | 1db17aaad9a04cc98fc848b23a76db52a5f62965 (diff) | |
download | python-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.py | 14 | ||||
-rw-r--r-- | glanceclient/v1/image_members.py | 10 | ||||
-rw-r--r-- | glanceclient/v1/images.py | 49 |
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'])) |