You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2013/10/15 09:37:01 UTC
[4/6] git commit: Update Rackspace DNS driver to support 'region'
argument.
Update Rackspace DNS driver to support 'region' argument.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/18baa686
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/18baa686
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/18baa686
Branch: refs/heads/trunk
Commit: 18baa686a061aabee6d624995d74dd71eb50ce2d
Parents: 0e7ffc9
Author: Tomaz Muraus <to...@apache.org>
Authored: Mon Oct 14 22:34:24 2013 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Mon Oct 14 22:35:19 2013 +0200
----------------------------------------------------------------------
libcloud/storage/drivers/cloudfiles.py | 73 ++++++++++++---------------
libcloud/storage/types.py | 3 +-
libcloud/test/storage/test_cloudfiles.py | 28 +++-------
3 files changed, 40 insertions(+), 64 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/18baa686/libcloud/storage/drivers/cloudfiles.py
----------------------------------------------------------------------
diff --git a/libcloud/storage/drivers/cloudfiles.py b/libcloud/storage/drivers/cloudfiles.py
index 7505c20..b34be48 100644
--- a/libcloud/storage/drivers/cloudfiles.py
+++ b/libcloud/storage/drivers/cloudfiles.py
@@ -48,7 +48,7 @@ from libcloud.storage.types import InvalidContainerNameError
from libcloud.common.openstack import OpenStackBaseConnection
from libcloud.common.openstack import OpenStackDriverMixin
-from libcloud.common.rackspace import AUTH_URL_US, AUTH_URL_UK
+from libcloud.common.rackspace import AUTH_URL
CDN_HOST = 'cdn.clouddrive.com'
API_VERSION = 'v1.0'
@@ -103,45 +103,39 @@ class CloudFilesConnection(OpenStackBaseConnection):
responseCls = CloudFilesResponse
rawResponseCls = CloudFilesRawResponse
- def __init__(self, user_id, key, secure=True, auth_url=AUTH_URL_US,
- **kwargs):
+ auth_url = AUTH_URL
+ _auth_version = '2.0'
+
+ def __init__(self, user_id, key, secure=True, **kwargs):
super(CloudFilesConnection, self).__init__(user_id, key, secure=secure,
**kwargs)
- self.auth_url = auth_url
self.api_version = API_VERSION
self.accept_format = 'application/json'
self.cdn_request = False
- if self._ex_force_service_region:
- self.service_region = self._ex_force_service_region
-
def get_endpoint(self):
- # First, we parse out both files and cdn endpoints
- # for each auth version
+ region = self._ex_force_service_region.upper()
+
if '2.0' in self._auth_version:
- eps = self.service_catalog.get_endpoints(
+ ep = self.service_catalog.get_endpoint(
service_type='object-store',
- name='cloudFiles')
- cdn_eps = self.service_catalog.get_endpoints(
+ name='cloudFiles',
+ region=region)
+ cdn_ep = self.service_catalog.get_endpoint(
service_type='object-store',
- name='cloudFilesCDN')
- elif ('1.1' in self._auth_version) or ('1.0' in self._auth_version):
- eps = self.service_catalog.get_endpoints(name='cloudFiles')
- cdn_eps = self.service_catalog.get_endpoints(name='cloudFilesCDN')
+ name='cloudFilesCDN',
+ region=region)
+ else:
+ raise LibcloudError(
+ 'Auth version "%s" not supported' % (self._auth_version))
# if this is a CDN request, return the cdn url instead
if self.cdn_request:
- eps = cdn_eps
-
- if self._ex_force_service_region:
- eps = [ep for ep in eps if ep['region'].lower() == self._ex_force_service_region.lower()]
+ ep = cdn_ep
- if len(eps) == 0:
- # TODO: Better error message
+ if not ep:
raise LibcloudError('Could not find specified endpoint')
- ep = eps[0]
-
if 'publicURL' in ep:
return ep['publicURL']
else:
@@ -211,17 +205,15 @@ class CloudFilesStorageDriver(StorageDriver, OpenStackDriverMixin):
:param region: ID of the region which should be used.
:type region: ``str``
"""
- if hasattr(self, '_region'):
- region = self._region
-
# This is here for backard compatibility
if 'ex_force_service_region' in kwargs:
region = kwargs['ex_force_service_region']
OpenStackDriverMixin.__init__(self, (), **kwargs)
super(CloudFilesStorageDriver, self).__init__(key=key, secret=secret,
- secure=secure, host=host,
- port=port, region=region, **kwargs)
+ secure=secure, host=host,
+ port=port, region=region,
+ **kwargs)
def iterate_containers(self):
response = self.connection.request('')
@@ -656,7 +648,7 @@ class CloudFilesStorageDriver(StorageDriver, OpenStackDriverMixin):
:rtype: ``list`` of :class:`Object`
"""
return list(self.iterate_container_objects(container,
- ex_prefix=ex_prefix))
+ ex_prefix=ex_prefix))
def iterate_container_objects(self, container, ex_prefix=None):
"""
@@ -820,15 +812,8 @@ class CloudFilesStorageDriver(StorageDriver, OpenStackDriverMixin):
return obj
def _ex_connection_class_kwargs(self):
- kwargs = {'ex_force_service_region': self.region}
-
- if self.region == 'lon':
- kwargs['auth_url'] = AUTH_URL_UK
- else:
- kwargs['auth_url'] = AUTH_URL_US
-
- base_kwargs = self.openstack_connection_kwargs()
- kwargs.update(base_kwargs)
+ kwargs = self.openstack_connection_kwargs()
+ kwargs['ex_force_service_region'] = self.region
return kwargs
@@ -839,7 +824,10 @@ class CloudFilesUSStorageDriver(CloudFilesStorageDriver):
type = Provider.CLOUDFILES_US
name = 'CloudFiles (US)'
- _region = 'ord'
+
+ def __init__(self, *args, **kwargs):
+ kwargs['region'] = 'ord'
+ super(CloudFilesUSStorageDriver, self).__init__(*args, **kwargs)
class CloudFilesSwiftStorageDriver(CloudFilesStorageDriver):
@@ -868,7 +856,10 @@ class CloudFilesUKStorageDriver(CloudFilesStorageDriver):
type = Provider.CLOUDFILES_UK
name = 'CloudFiles (UK)'
- _region = 'lon'
+
+ def __init__(self, *args, **kwargs):
+ kwargs['region'] = 'lon'
+ super(CloudFilesUKStorageDriver, self).__init__(*args, **kwargs)
class FileChunkReader(object):
http://git-wip-us.apache.org/repos/asf/libcloud/blob/18baa686/libcloud/storage/types.py
----------------------------------------------------------------------
diff --git a/libcloud/storage/types.py b/libcloud/storage/types.py
index bc2d0bf..6a0c82f 100644
--- a/libcloud/storage/types.py
+++ b/libcloud/storage/types.py
@@ -31,8 +31,7 @@ class Provider(object):
Defines for each of the supported providers
:cvar DUMMY: Example provider
- :cvar CLOUDFILES_US: CloudFiles US
- :cvar CLOUDFILES_UK: CloudFiles UK
+ :cvar CLOUDFILES: CloudFiles
:cvar S3: Amazon S3 US
:cvar S3_US_WEST: Amazon S3 US West (Northern California)
:cvar S3_EU_WEST: Amazon S3 EU West (Ireland)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/18baa686/libcloud/test/storage/test_cloudfiles.py
----------------------------------------------------------------------
diff --git a/libcloud/test/storage/test_cloudfiles.py b/libcloud/test/storage/test_cloudfiles.py
index f64f5a4..30efa12 100644
--- a/libcloud/test/storage/test_cloudfiles.py
+++ b/libcloud/test/storage/test_cloudfiles.py
@@ -130,7 +130,7 @@ class CloudFilesTests(unittest.TestCase):
self.fail('Exception was not thrown')
def test_service_catalog(self):
- url = 'https://storage101.%s1.clouddrive.com/v1/MossoCloudFS' % \
+ url = 'https://storage4.%s1.clouddrive.com/v1/MossoCloudFS' % \
(self.region)
self.assertEqual(
url,
@@ -138,7 +138,7 @@ class CloudFilesTests(unittest.TestCase):
self.driver.connection.cdn_request = True
self.assertEqual(
- 'https://cdn2.clouddrive.com/v1/MossoCloudFS',
+ 'https://cdn.clouddrive.com/v1/MossoCloudFS',
self.driver.connection.get_endpoint())
self.driver.connection.cdn_request = False
@@ -729,7 +729,7 @@ class CloudFilesTests(unittest.TestCase):
"/v1/MossoCloudFS/foo_bar_container/foo_bar_object")
sig = hmac.new(b('foo'), b(hmac_body), sha1).hexdigest()
ret = self.driver.ex_get_object_temp_url(obj, 'GET')
- temp_url = 'https://storage101.%s1.clouddrive.com/v1/MossoCloudFS/foo_bar_container/foo_bar_object?temp_url_expires=60&temp_url_sig=%s' % (self.region, sig)
+ temp_url = 'https://storage4.%s1.clouddrive.com/v1/MossoCloudFS/foo_bar_container/foo_bar_object?temp_url_expires=60&temp_url_sig=%s' % (self.region, sig)
self.assertEqual(''.join(sorted(ret)), ''.join(sorted(temp_url)))
@@ -767,24 +767,14 @@ class CloudFilesDeprecatedUKTests(CloudFilesTests):
class CloudFilesMockHttp(StorageMockHttp, MockHttpTestCase):
fixtures = StorageFileFixtures('cloudfiles')
- auth_fixtures = OpenStackFixtures()
base_headers = { 'content-type': 'application/json; charset=UTF-8'}
# fake auth token response
- def _v1_0(self, method, url, body, headers):
+ def _v2_0_tokens(self, method, url, body, headers):
headers = copy.deepcopy(self.base_headers)
- headers.update({ 'x-server-management-url':
- 'https://servers.api.rackspacecloud.com/v1.0/slug',
- 'x-auth-token': 'FE011C19',
- 'x-cdn-management-url':
- 'https://cdn.clouddrive.com/v1/MossoCloudFS',
- 'x-storage-token': 'FE011C19',
- 'x-storage-url':
- 'https://storage4.clouddrive.com/v1/MossoCloudFS'})
- return (httplib.NO_CONTENT,
- "",
- headers,
- httplib.responses[httplib.NO_CONTENT])
+ body = self.fixtures.load('_v2_0__auth.json')
+ return (httplib.OK, body, headers,
+ httplib.responses[httplib.OK])
def _v1_MossoCloudFS_MALFORMED_JSON(self, method, url, body, headers):
# test_invalid_json_throws_exception
@@ -1026,10 +1016,6 @@ class CloudFilesMockHttp(StorageMockHttp, MockHttpTestCase):
return (status_code, body, headers, httplib.responses[httplib.OK])
- def _v1_1_auth(self, method, url, body, headers):
- body = self.auth_fixtures.load('_v1_1__auth.json')
- return (httplib.OK, body, {'content-type': 'application/json; charset=UTF-8'}, httplib.responses[httplib.OK])
-
class CloudFilesMockRawResponse(MockRawResponse):