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/01/27 06:57:52 UTC

svn commit: r1439028 - in /libcloud/branches/0.12.x: ./ libcloud/compute/ libcloud/compute/drivers/ libcloud/storage/ libcloud/storage/drivers/ libcloud/test/compute/ libcloud/test/compute/fixtures/openstack/ libcloud/test/storage/

Author: tomaz
Date: Sun Jan 27 05:57:51 2013
New Revision: 1439028

URL: http://svn.apache.org/viewvc?rev=1439028&view=rev
Log:
Remove "datacenter" related changes and improvements in the compute and storage
drivers. Some of those changes are backward incompatible and are still work in
progress. They will be included in the next major release.

Added:
    libcloud/branches/0.12.x/libcloud/compute/drivers/rackspacenova.py
    libcloud/branches/0.12.x/libcloud/test/compute/test_rackspacenova.py
Modified:
    libcloud/branches/0.12.x/CHANGES
    libcloud/branches/0.12.x/libcloud/compute/drivers/ec2.py
    libcloud/branches/0.12.x/libcloud/compute/drivers/rackspace.py
    libcloud/branches/0.12.x/libcloud/compute/providers.py
    libcloud/branches/0.12.x/libcloud/compute/types.py
    libcloud/branches/0.12.x/libcloud/storage/drivers/cloudfiles.py
    libcloud/branches/0.12.x/libcloud/storage/providers.py
    libcloud/branches/0.12.x/libcloud/storage/types.py
    libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v1_1__auth.json
    libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json
    libcloud/branches/0.12.x/libcloud/test/compute/test_deployment.py
    libcloud/branches/0.12.x/libcloud/test/compute/test_ec2.py
    libcloud/branches/0.12.x/libcloud/test/compute/test_rackspace.py
    libcloud/branches/0.12.x/libcloud/test/storage/test_cloudfiles.py

Modified: libcloud/branches/0.12.x/CHANGES
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/CHANGES?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/CHANGES (original)
+++ libcloud/branches/0.12.x/CHANGES Sun Jan 27 05:57:51 2013
@@ -33,16 +33,6 @@ Changes with Apache Libcloud 0.12.0:
       (LIBCLOUD-245)
       [Tomaz Muraus]
 
-    - Refactor Rackspace driver classes and make them easier to use. Now there
-      are two rackspace constants - Provider.RACKSPACE which represents new
-      next-gen OpenStack servers and Provider.RACKSPACE_FIRST_GEN which
-      represents old cloud servers.
-
-      Note: This change is backward incompatible. For more information on those
-      changes and how to upgrade your code to make it work with it, please visit
-      TODO.
-      [Tomaz Muraus]
-
     - Improvements and additions in vCloud driver:
       - Expose generic query method (ex_query)
       - Provide functionality to get and set control access for vApps. This way
@@ -127,15 +117,6 @@ Changes with Apache Libcloud 0.12.0:
       (LIBCLOUD-267)
       [Tomaz Muraus]
 
-    - Deprecate CLOUDFILES_US and CLOUDFILES_UK storage provider constants and
-      add a new CLOUDFILES constant.
-      Driver referenced by this constant takes a "datacenter" keyword argument
-      and can be one of 'ord', 'dfw' or 'lon'.
-
-      Note: Deprecated constants will continue to work for the foreseeable
-      future.
-      [Tomaz Muraus]
-
     - Support for multipart uploads and other improvemetns in the S3 driver
       so it can more easily be re-used with other implementations (e.g. Google
       Storage, etc.).

Modified: libcloud/branches/0.12.x/libcloud/compute/drivers/ec2.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/compute/drivers/ec2.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/compute/drivers/ec2.py (original)
+++ libcloud/branches/0.12.x/libcloud/compute/drivers/ec2.py Sun Jan 27 05:57:51 2013
@@ -1412,53 +1412,149 @@ class IdempotentParamError(LibcloudError
         return repr(self.value)
 
 
+class EC2EUConnection(EC2Connection):
+    """
+    Connection class for EC2 in the Western Europe Region
+    """
+    host = REGION_DETAILS['eu-west-1']['endpoint']
+
+
 class EC2EUNodeDriver(EC2NodeDriver):
     """
     Driver class for EC2 in the Western Europe Region.
     """
-    _datacenter = 'eu-west-1'
+    api_name = 'ec2_eu_west'
+    name = 'Amazon EC2 (eu-west-1)'
+    friendly_name = 'Amazon Europe Ireland'
+    country = 'IE'
+    region_name = 'eu-west-1'
+    connectionCls = EC2EUConnection
+
+
+class EC2USWestConnection(EC2Connection):
+    """
+    Connection class for EC2 in the Western US Region
+    """
+
+    host = REGION_DETAILS['us-west-1']['endpoint']
 
 
 class EC2USWestNodeDriver(EC2NodeDriver):
     """
     Driver class for EC2 in the Western US Region
     """
-    _datacenter = 'us-west-1'
+
+    api_name = 'ec2_us_west'
+    name = 'Amazon EC2 (us-west-1)'
+    friendly_name = 'Amazon US N. California'
+    country = 'US'
+    region_name = 'us-west-1'
+    connectionCls = EC2USWestConnection
+
+
+class EC2USWestOregonConnection(EC2Connection):
+    """
+    Connection class for EC2 in the Western US Region (Oregon).
+    """
+
+    host = REGION_DETAILS['us-west-2']['endpoint']
 
 
 class EC2USWestOregonNodeDriver(EC2NodeDriver):
     """
     Driver class for EC2 in the US West Oregon region.
     """
-    _datacenter = 'us-west-2'
+
+    api_name = 'ec2_us_west_oregon'
+    name = 'Amazon EC2 (us-west-2)'
+    friendly_name = 'Amazon US West - Oregon'
+    country = 'US'
+    region_name = 'us-west-2'
+    connectionCls = EC2USWestOregonConnection
+
+
+class EC2APSEConnection(EC2Connection):
+    """
+    Connection class for EC2 in the Southeast Asia Pacific Region.
+    """
+
+    host = REGION_DETAILS['ap-southeast-1']['endpoint']
+
+
+class EC2APNEConnection(EC2Connection):
+    """
+    Connection class for EC2 in the Northeast Asia Pacific Region.
+    """
+
+    host = REGION_DETAILS['ap-northeast-1']['endpoint']
 
 
 class EC2APSENodeDriver(EC2NodeDriver):
     """
     Driver class for EC2 in the Southeast Asia Pacific Region.
     """
-    _datacenter = 'ap-southeast-1'
+
+    api_name = 'ec2_ap_southeast'
+    name = 'Amazon EC2 (ap-southeast-1)'
+    friendly_name = 'Amazon Asia-Pacific Singapore'
+    country = 'SG'
+    region_name = 'ap-southeast-1'
+    connectionCls = EC2APSEConnection
 
 
 class EC2APNENodeDriver(EC2NodeDriver):
     """
     Driver class for EC2 in the Northeast Asia Pacific Region.
     """
-    _datacenter = 'ap-northeast-1'
+
+    api_name = 'ec2_ap_northeast'
+    name = 'Amazon EC2 (ap-northeast-1)'
+    friendly_name = 'Amazon Asia-Pacific Tokyo'
+    country = 'JP'
+    region_name = 'ap-northeast-1'
+    connectionCls = EC2APNEConnection
+
+
+class EC2SAEastConnection(EC2Connection):
+    """
+    Connection class for EC2 in the South America (Sao Paulo) Region.
+    """
+
+    host = REGION_DETAILS['sa-east-1']['endpoint']
 
 
 class EC2SAEastNodeDriver(EC2NodeDriver):
     """
     Driver class for EC2 in the South America (Sao Paulo) Region.
     """
-    _datacenter = 'sa-east-1'
+
+    api_name = 'ec2_sa_east'
+    name = 'Amazon EC2 (sa-east-1)'
+    friendly_name = 'Amazon South America Sao Paulo'
+    country = 'BR'
+    region_name = 'sa-east-1'
+    connectionCls = EC2SAEastConnection
+
+
+class EC2APSESydneyConnection(EC2Connection):
+    """
+    Connection class for EC2 in the Southeast Asia Pacific (Sydney) Region.
+    """
+
+    host = REGION_DETAILS['ap-southeast-2']['endpoint']
 
 
 class EC2APSESydneyNodeDriver(EC2NodeDriver):
     """
     Driver class for EC2 in the Southeast Asia Pacific (Sydney) Region.
     """
-    _datacenter = 'ap-southeast-2'
+
+    api_name = 'ec2_ap_southeast_2'
+    name = 'Amazon EC2 (ap-southeast-2)'
+    friendly_name = 'Amazon Asia-Pacific Sydney'
+    country = 'AU'
+    region_name = 'ap-southeast-2'
+    connectionCls = EC2APSESydneyConnection
 
 
 class EucConnection(EC2Connection):

Modified: libcloud/branches/0.12.x/libcloud/compute/drivers/rackspace.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/compute/drivers/rackspace.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/compute/drivers/rackspace.py (original)
+++ libcloud/branches/0.12.x/libcloud/compute/drivers/rackspace.py Sun Jan 27 05:57:51 2013
@@ -19,35 +19,22 @@ from libcloud.compute.types import Provi
 from libcloud.compute.base import NodeLocation
 from libcloud.compute.drivers.openstack import OpenStack_1_0_Connection,\
     OpenStack_1_0_NodeDriver, OpenStack_1_0_Response
-from libcloud.compute.drivers.openstack import OpenStack_1_1_Connection,\
-    OpenStack_1_1_NodeDriver
 
 from libcloud.common.rackspace import (
     AUTH_URL_US, AUTH_URL_UK)
 
 
-ENDPOINT_ARGS_MAP = {
-    'dfw': {'service_type': 'compute',
-            'name': 'cloudServersOpenStack',
-            'region': 'DFW'},
-    'ord': {'service_type': 'compute',
-            'name': 'cloudServersOpenStack',
-            'region': 'ORD'},
-    'lon': {'service_type': 'compute',
-            'name': 'cloudServersOpenStack',
-            'region': 'LON'}
-}
-
-
-class RackspaceFirstGenConnection(OpenStack_1_0_Connection):
+class RackspaceConnection(OpenStack_1_0_Connection):
     """
-    Connection class for the Rackspace first-gen driver.
+    Connection class for the Rackspace driver
     """
+
     responseCls = OpenStack_1_0_Response
     auth_url = AUTH_URL_US
     XML_NAMESPACE = 'http://docs.rackspacecloud.com/servers/api/v1.0'
 
     def get_endpoint(self):
+
         ep = {}
         if '2.0' in self._auth_version:
             ep = self.service_catalog.get_endpoint(service_type='compute',
@@ -61,112 +48,37 @@ class RackspaceFirstGenConnection(OpenSt
         raise LibcloudError('Could not find specified endpoint')
 
 
-class RackspaceFirstGenNodeDriver(OpenStack_1_0_NodeDriver):
-    name = 'Rackspace Cloud'
-    website = 'http://www.rackspace.com'
-    connectionCls = RackspaceFirstGenConnection
-    type = Provider.RACKSPACE_FIRST_GEN
+class RackspaceNodeDriver(OpenStack_1_0_NodeDriver):
+    name = 'Rackspace'
+    website = 'http://www.rackspace.com/'
+    connectionCls = RackspaceConnection
+    type = Provider.RACKSPACE
     api_name = 'rackspace'
 
-    def __init__(self, key, secret=None, secure=True, host=None, port=None,
-                 region='us', **kwargs):
-        """
-        @inherits:  L{NodeDriver.__init__}
-
-        @param region: Region ID which should be used
-        @type region: C{str}
-        """
-        if region not in ['us', 'uk']:
-            raise ValueError('Invalid region: %s' % (region))
-
-        if region == 'us':
-            self.connectionCls.auth_url = AUTH_URL_US
-        elif region == 'uk':
-            self.connectionCls.auth_url = AUTH_URL_UK
-
-        self.region = region
-
-        super(RackspaceFirstGenNodeDriver, self).__init__(key=key,
-                                                          secret=secret,
-                                                          secure=secure,
-                                                          host=host,
-                                                          port=port, **kwargs)
-
     def list_locations(self):
-        """
-        Lists available locations
+        """Lists available locations
 
         Locations cannot be set or retrieved via the API, but currently
         there are two locations, DFW and ORD.
 
         @inherits: L{OpenStack_1_0_NodeDriver.list_locations}
         """
-        if self.region == 'us':
-            locations = [NodeLocation(0, "Rackspace DFW1/ORD1", 'US', self)]
-        elif self.region == 'uk':
-            locations = [NodeLocation(0, 'Rackspace UK London', 'UK', self)]
-
-        return locations
+        return [NodeLocation(0, "Rackspace DFW1/ORD1", 'US', self)]
 
 
-class RackspaceConnection(OpenStack_1_1_Connection):
+class RackspaceUKConnection(RackspaceConnection):
     """
-    Connection class for the Rackspace next-gen OpenStack base driver.
+    Connection class for the Rackspace UK driver
     """
-    get_endpoint_args = {}
-
-    def get_endpoint(self):
-        if not self.get_endpoint_args:
-            raise LibcloudError(
-                'RackspaceConnection must have get_endpoint_args set')
-
-        # Only support auth 2.0_*
-        if '2.0' in self._auth_version:
-            ep = self.service_catalog.get_endpoint(**self.get_endpoint_args)
-        else:
-            raise LibcloudError(
-                'Auth version "%s" not supported' % (self._auth_version))
-
-        # It's possible to authenticate but the service catalog not have
-        # the correct endpoint for this driver, so we throw here.
-        if 'publicURL' in ep:
-            return ep['publicURL']
-        else:
-            raise LibcloudError('Could not find specified endpoint')
-
+    auth_url = AUTH_URL_UK
 
-class RackspaceNodeDriver(OpenStack_1_1_NodeDriver):
-    name = 'Rackspace Cloud'
-    website = 'http://www.rackspace.com'
-    connectionCls = RackspaceConnection
-    type = Provider.RACKSPACE
-    api_name = None
-
-    def __init__(self, key, secret=None, secure=True, host=None, port=None,
-                 datacenter='dfw', **kwargs):
-        """
-        @inherits:  L{NodeDriver.__init__}
 
-        @param datacenter: Datacenter ID which should be used
-        @type datacenter: C{str}
-        """
+class RackspaceUKNodeDriver(RackspaceNodeDriver):
+    """Driver for Rackspace in the UK (London)
+    """
 
-        if datacenter not in ['dfw', 'ord', 'lon']:
-            raise ValueError('Invalid datacenter: %s' % (datacenter))
+    name = 'Rackspace (UK)'
+    connectionCls = RackspaceUKConnection
 
-        if datacenter in ['dfw', 'ord']:
-            self.connectionCls.auth_url = AUTH_URL_US
-            self.api_name = 'rackspacenovaus'
-        elif datacenter == 'lon':
-            self.connectionCls.auth_url = AUTH_URL_UK
-            self.api_name = 'rackspacenovalon'
-
-        self.connectionCls._auth_version = '2.0'
-        self.connectionCls.get_endpoint_args = \
-            ENDPOINT_ARGS_MAP[datacenter]
-
-        self.datacenter = datacenter
-
-        super(RackspaceNodeDriver, self).__init__(key=key, secret=secret,
-                                                  secure=secure, host=host,
-                                                  port=port, **kwargs)
+    def list_locations(self):
+        return [NodeLocation(0, 'Rackspace UK London', 'UK', self)]

Added: libcloud/branches/0.12.x/libcloud/compute/drivers/rackspacenova.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/compute/drivers/rackspacenova.py?rev=1439028&view=auto
==============================================================================
--- libcloud/branches/0.12.x/libcloud/compute/drivers/rackspacenova.py (added)
+++ libcloud/branches/0.12.x/libcloud/compute/drivers/rackspacenova.py Sun Jan 27 05:57:51 2013
@@ -0,0 +1,104 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""
+Rackspace driver
+"""
+from libcloud.compute.providers import Provider
+from libcloud.compute.drivers.openstack import OpenStack_1_1_Connection,\
+    OpenStack_1_1_NodeDriver
+from libcloud.common.types import LibcloudError
+
+
+class RackspaceNovaConnection(OpenStack_1_1_Connection):
+    get_endpoint_args = {}
+
+    def get_endpoint(self):
+        if not self.get_endpoint_args:
+            raise LibcloudError(
+                'RackspaceNovaConnection must have get_endpoint_args set')
+
+        # Only support auth 2.0_*
+        if '2.0' in self._auth_version:
+            ep = self.service_catalog.get_endpoint(**self.get_endpoint_args)
+        else:
+            raise LibcloudError(
+                'Auth version "%s" not supported' % (self._auth_version))
+
+        # It's possible to authenticate but the service catalog not have
+        # the correct endpoint for this driver, so we throw here.
+        if 'publicURL' in ep:
+            return ep['publicURL']
+        else:
+            raise LibcloudError('Could not find specified endpoint')
+
+
+class RackspaceNovaBetaConnection(RackspaceNovaConnection):
+
+    get_endpoint_args = {'service_type': 'compute',
+                         'name': 'cloudServersPreprod',
+                         'region': 'DFW'}
+
+
+class RackspaceNovaDfwConnection(RackspaceNovaConnection):
+
+    get_endpoint_args = {'service_type': 'compute',
+                         'name': 'cloudServersOpenStack',
+                         'region': 'DFW'}
+
+
+class RackspaceNovaLonConnection(RackspaceNovaConnection):
+
+    get_endpoint_args = {'service_type': 'compute',
+                         'name': 'cloudServersOpenStack',
+                         'region': 'LON'}
+
+
+class RackspaceNovaDfwNodeDriver(OpenStack_1_1_NodeDriver):
+    name = 'RackspaceNovadfw'
+    website = 'http://www.rackspace.com/'
+    connectionCls = RackspaceNovaDfwConnection
+    type = Provider.RACKSPACE_NOVA_DFW
+    api_name = 'rackspacenovaus'
+
+
+class RackspaceNovaOrdConnection(RackspaceNovaConnection):
+
+    get_endpoint_args = {'service_type': 'compute',
+                         'name': 'cloudServersOpenStack',
+                         'region': 'ORD'}
+
+
+class RackspaceNovaOrdNodeDriver(OpenStack_1_1_NodeDriver):
+    name = 'RackspaceNovaord'
+    website = 'http://www.rackspace.com/'
+    connectionCls = RackspaceNovaOrdConnection
+    type = Provider.RACKSPACE_NOVA_ORD
+    api_name = 'rackspacenovaus'
+
+
+class RackspaceNovaLonNodeDriver(OpenStack_1_1_NodeDriver):
+    name = 'RackspaceNovalon'
+    website = 'http://www.rackspace.com/'
+    connectionCls = RackspaceNovaLonConnection
+    type = Provider.RACKSPACE_NOVA_LON
+    api_name = 'rackspacenovauk'
+
+
+class RackspaceNovaBetaNodeDriver(OpenStack_1_1_NodeDriver):
+    name = 'RackspaceNovaBeta'
+    website = 'http://www.rackspace.com/'
+    connectionCls = RackspaceNovaBetaConnection
+    type = Provider.RACKSPACE_NOVA_BETA
+    api_name = 'rackspacenovabeta'

Modified: libcloud/branches/0.12.x/libcloud/compute/providers.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/compute/providers.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/compute/providers.py (original)
+++ libcloud/branches/0.12.x/libcloud/compute/providers.py Sun Jan 27 05:57:51 2013
@@ -18,8 +18,7 @@ Provider related utilities
 
 from libcloud.utils.misc import get_driver as _get_provider_driver
 from libcloud.utils.misc import set_driver as _set_provider_driver
-from libcloud.compute.types import Provider, DEPRECATED_RACKSPACE_PROVIDERS
-from libcloud.compute.types import OLD_CONSTANT_TO_NEW_MAPPING
+from libcloud.compute.types import Provider
 
 __all__ = [
     "Provider",
@@ -69,8 +68,8 @@ DRIVERS = {
         ('libcloud.compute.drivers.gogrid', 'GoGridNodeDriver'),
     Provider.RACKSPACE:
         ('libcloud.compute.drivers.rackspace', 'RackspaceNodeDriver'),
-    Provider.RACKSPACE_FIRST_GEN:
-        ('libcloud.compute.drivers.rackspace', 'RackspaceFirstGenNodeDriver'),
+    Provider.RACKSPACE_UK:
+        ('libcloud.compute.drivers.rackspace', 'RackspaceUKNodeDriver'),
     Provider.SLICEHOST:
         ('libcloud.compute.drivers.slicehost', 'SlicehostNodeDriver'),
     Provider.VPSNET:
@@ -111,6 +110,14 @@ DRIVERS = {
         ('libcloud.compute.drivers.vcloud', 'TerremarkDriver'),
     Provider.CLOUDSTACK:
         ('libcloud.compute.drivers.cloudstack', 'CloudStackNodeDriver'),
+    Provider.RACKSPACE_NOVA_BETA:
+        ('libcloud.compute.drivers.rackspacenova', 'RackspaceNovaBetaNodeDriver'),
+    Provider.RACKSPACE_NOVA_DFW:
+        ('libcloud.compute.drivers.rackspacenova', 'RackspaceNovaDfwNodeDriver'),
+    Provider.RACKSPACE_NOVA_ORD:
+        ('libcloud.compute.drivers.rackspacenova', 'RackspaceNovaOrdNodeDriver'),
+    Provider.RACKSPACE_NOVA_LON:
+        ('libcloud.compute.drivers.rackspacenova', 'RackspaceNovaLonNodeDriver'),
     Provider.LIBVIRT:
         ('libcloud.compute.drivers.libvirt_driver', 'LibvirtNodeDriver'),
     Provider.JOYENT:
@@ -127,17 +134,6 @@ DRIVERS = {
 
 
 def get_driver(provider):
-    if provider in DEPRECATED_RACKSPACE_PROVIDERS:
-        id_to_name_map = dict([(v, k) for k, v in Provider.__dict__.items()])
-        old_name = id_to_name_map[provider]
-        new_name = id_to_name_map[OLD_CONSTANT_TO_NEW_MAPPING[provider]]
-
-        msg = 'Provider constant %s has been removed. New constant ' \
-              'is now called %s.\n' \
-              'For more information on this change and how to modify your ' \
-              'code to work with it, please visit: TODO' % (old_name, new_name)
-        raise Exception(msg)
-
     return _get_provider_driver(DRIVERS, provider)
 
 def set_driver(provider, module, klass):

Modified: libcloud/branches/0.12.x/libcloud/compute/types.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/compute/types.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/compute/types.py (original)
+++ libcloud/branches/0.12.x/libcloud/compute/types.py Sun Jan 27 05:57:51 2013
@@ -30,8 +30,6 @@ __all__ = [
     "MalformedResponseError",
     "InvalidCredsError",
     "InvalidCredsException",
-    "DEPRECATED_RACKSPACE_PROVIDERS",
-    "OLD_CONSTANT_TO_NEW_MAPPING"
     ]
 
 
@@ -73,7 +71,6 @@ class Provider(object):
     """
     DUMMY = 'dummy'
     EC2 = 'ec2'
-    RACKSPACE = 'rackspace'
     SLICEHOST = 'slicehost'
     GOGRID = 'gogrid'
     VPSNET = 'vpsnet'
@@ -111,11 +108,9 @@ class Provider(object):
     VCL = 'vcl'
     KTUCLOUD = 'ktucloud'
     GRIDSPOT = 'gridspot'
-    RACKSPACE_FIRST_GEN = 'rackspace_first_gen'
     HOSTVIRTUAL = 'hostvirtual'
     ABIQUO = 'abiquo'
 
-    # Deprecated constants which are still supported
     EC2_US_EAST = 'ec2_us_east'
     EC2_EU = 'ec2_eu'  # deprecated name
     EC2_EU_WEST = 'ec2_eu_west'
@@ -126,7 +121,7 @@ class Provider(object):
     EC2_SA_EAST = 'ec2_sa_east'
     EC2_AP_SOUTHEAST2 = 'ec2_ap_southeast_2'
 
-    # Deprecated constants which aren't supported anymore
+    RACKSPACE = 'rackspace'
     RACKSPACE_UK = 'rackspace_uk'
     RACKSPACE_NOVA_BETA = 'rackspace_nova_beta'
     RACKSPACE_NOVA_DFW = 'rackspace_nova_dfw'
@@ -134,22 +129,6 @@ class Provider(object):
     RACKSPACE_NOVA_ORD = 'rackspace_nova_ord'
 
 
-DEPRECATED_RACKSPACE_PROVIDERS = [Provider.RACKSPACE_UK,
-                                  Provider.RACKSPACE_NOVA_BETA,
-                                  Provider.RACKSPACE_NOVA_DFW,
-                                  Provider.RACKSPACE_NOVA_LON,
-                                  Provider.RACKSPACE_NOVA_ORD]
-OLD_CONSTANT_TO_NEW_MAPPING = {
-    Provider.RACKSPACE: Provider.RACKSPACE_FIRST_GEN,
-    Provider.RACKSPACE_UK: Provider.RACKSPACE_FIRST_GEN,
-
-    Provider.RACKSPACE_NOVA_BETA: Provider.RACKSPACE,
-    Provider.RACKSPACE_NOVA_DFW: Provider.RACKSPACE,
-    Provider.RACKSPACE_NOVA_LON: Provider.RACKSPACE,
-    Provider.RACKSPACE_NOVA_ORD: Provider.RACKSPACE
-}
-
-
 class NodeState(object):
     """
     Standard states for a node

Modified: libcloud/branches/0.12.x/libcloud/storage/drivers/cloudfiles.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/storage/drivers/cloudfiles.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/storage/drivers/cloudfiles.py (original)
+++ libcloud/branches/0.12.x/libcloud/storage/drivers/cloudfiles.py Sun Jan 27 05:57:51 2013
@@ -45,6 +45,7 @@ from libcloud.storage.types import Conta
 from libcloud.storage.types import ObjectDoesNotExistError
 from libcloud.storage.types import ObjectHashMismatchError
 from libcloud.storage.types import InvalidContainerNameError
+from libcloud.common.types import LazyList
 from libcloud.common.openstack import OpenStackBaseConnection
 from libcloud.common.openstack import OpenStackDriverMixin
 
@@ -101,14 +102,13 @@ class CloudFilesConnection(OpenStackBase
     Base connection class for the Cloudfiles driver.
     """
 
+    auth_url = AUTH_URL_US
     responseCls = CloudFilesResponse
     rawResponseCls = CloudFilesRawResponse
 
-    def __init__(self, user_id, key, secure=True, auth_url=AUTH_URL_US,
-                 **kwargs):
+    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
@@ -131,15 +131,10 @@ class CloudFilesConnection(OpenStackBase
         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()]
-
         if len(eps) == 0:
-            # TODO: Better error message
             raise LibcloudError('Could not find specified endpoint')
 
         ep = eps[0]
-
         if 'publicURL' in ep:
             return ep['publicURL']
         else:
@@ -165,6 +160,22 @@ class CloudFilesConnection(OpenStackBase
             raw=raw)
 
 
+class CloudFilesUSConnection(CloudFilesConnection):
+    """
+    Connection class for the Cloudfiles US endpoint.
+    """
+
+    auth_url = AUTH_URL_US
+
+
+class CloudFilesUKConnection(CloudFilesConnection):
+    """
+    Connection class for the Cloudfiles UK endpoint.
+    """
+
+    auth_url = AUTH_URL_UK
+
+
 class CloudFilesSwiftConnection(CloudFilesConnection):
     """
     Connection class for the Cloudfiles Swift endpoint.
@@ -192,7 +203,10 @@ class CloudFilesSwiftConnection(CloudFil
 
 class CloudFilesStorageDriver(StorageDriver, OpenStackDriverMixin):
     """
-    CloudFiles driver.
+    Base CloudFiles driver.
+
+    You should never create an instance of this class directly but use US/US
+    class.
     """
     name = 'CloudFiles'
     website = 'http://www.rackspace.com/'
@@ -201,29 +215,11 @@ class CloudFilesStorageDriver(StorageDri
     hash_type = 'md5'
     supports_chunked_encoding = True
 
-    def __init__(self, key, secret=None, secure=True, host=None, port=None,
-                 datacenter='ord', **kwargs):
-        """
-        @inherits:  L{StorageDriver.__init__}
-
-        @param datacenter: Datacenter ID which should be used.
-        @type datacenter: C{str}
-        """
-        if hasattr(self, '_datacenter'):
-            datacenter = self._datacenter
-
-        # This is here for backard compatibility
-        if 'ex_force_service_region' in kwargs:
-            datacenter = kwargs['ex_force_service_region']
-
-        self.datacenter = datacenter
-
-        OpenStackDriverMixin.__init__(self, (), **kwargs)
-        super(CloudFilesStorageDriver, self).__init__(key=key, secret=secret,
-                                            secure=secure, host=host,
-                                            port=port, **kwargs)
+    def __init__(self, *args, **kwargs):
+        OpenStackDriverMixin.__init__(self, *args, **kwargs)
+        super(CloudFilesStorageDriver, self).__init__(*args, **kwargs)
 
-    def iterate_containers(self):
+    def list_containers(self):
         response = self.connection.request('')
 
         if response.status == httplib.NO_CONTENT:
@@ -233,6 +229,10 @@ class CloudFilesStorageDriver(StorageDri
 
         raise LibcloudError('Unexpected status code: %s' % (response.status))
 
+    def list_container_objects(self, container):
+        value_dict = {'container': container}
+        return LazyList(get_more=self._get_more, value_dict=value_dict)
+
     def get_container(self, container_name):
         response = self.connection.request('/%s' % (container_name),
                                            method='HEAD')
@@ -409,26 +409,6 @@ class CloudFilesStorageDriver(StorageDri
 
         raise LibcloudError('Unexpected status code: %s' % (response.status))
 
-    def ex_purge_object_from_cdn(self, obj, email=None):
-        """
-        Purge edge cache for the specified object.
-
-        @param email: Email where a notification will be sent when the job
-        completes. (optional)
-        @type email: C{str}
-        """
-        container_name = self._clean_container_name(obj.container.name)
-        object_name = self._clean_object_name(obj.name)
-        headers = {'X-Purge-Email': email} if email else {}
-
-        response = self.connection.request('/%s/%s' % (container_name,
-                                                       object_name),
-                                           method='DELETE',
-                                           headers=headers,
-                                           cdn_request=True)
-
-        return response.status == httplib.NO_CONTENT
-
     def ex_get_meta_data(self):
         """
         Get meta data
@@ -638,30 +618,30 @@ class CloudFilesStorageDriver(StorageDri
 
         return obj
 
-    def iterate_container_objects(self, container):
+    def _get_more(self, last_key, value_dict):
+        container = value_dict['container']
         params = {}
 
-        while True:
-            response = self.connection.request('/%s' % (container.name),
-                                               params=params)
-
-            if response.status == httplib.NO_CONTENT:
-                # Empty or non-existent container
-                break
-            elif response.status == httplib.OK:
-                objects = self._to_object_list(json.loads(response.body),
-                                               container)
-
-                if len(objects) == 0:
-                    break
-
-                for obj in objects:
-                    yield obj
-                params['marker'] = obj.name
-
-            else:
-                raise LibcloudError('Unexpected status code: %s' %
-                                    (response.status))
+        if last_key:
+            params['marker'] = last_key
+
+        response = self.connection.request('/%s' % (container.name),
+                                           params=params)
+
+        if response.status == httplib.NO_CONTENT:
+            # Empty or inexistent container
+            return [], None, True
+        elif response.status == httplib.OK:
+            objects = self._to_object_list(json.loads(response.body),
+                                           container)
+
+            # TODO: Is this really needed?
+            if len(objects) == 0:
+                return [], None, True
+
+            return objects, objects[-1].name, False
+
+        raise LibcloudError('Unexpected status code: %s' % (response.status))
 
     def _put_object(self, container, object_name, upload_func,
                     upload_func_kwargs, extra=None, file_path=None,
@@ -738,10 +718,15 @@ class CloudFilesStorageDriver(StorageDri
 
     def _to_container_list(self, response):
         # @TODO: Handle more then 10k containers - use "lazy list"?
+        containers = []
+
         for container in response:
             extra = {'object_count': int(container['count']),
                      'size': int(container['bytes'])}
-            yield Container(name=container['name'], extra=extra, driver=self)
+            containers.append(Container(name=container['name'], extra=extra,
+                                        driver=self))
+
+        return containers
 
     def _to_object_list(self, response, container):
         objects = []
@@ -786,15 +771,7 @@ class CloudFilesStorageDriver(StorageDri
         return obj
 
     def _ex_connection_class_kwargs(self):
-        kwargs = {'ex_force_service_region': self.datacenter}
-
-        if self.datacenter in ['dfw', 'ord']:
-            kwargs['auth_url'] = AUTH_URL_US
-        elif self.datacenter == 'lon':
-            kwargs['auth_url'] = AUTH_URL_UK
-
-        kwargs.update(self.openstack_connection_kwargs())
-        return kwargs
+        return self.openstack_connection_kwargs()
 
 
 class CloudFilesUSStorageDriver(CloudFilesStorageDriver):
@@ -804,7 +781,7 @@ class CloudFilesUSStorageDriver(CloudFil
 
     type = Provider.CLOUDFILES_US
     name = 'CloudFiles (US)'
-    _datacenter = 'ord'
+    connectionCls = CloudFilesUSConnection
 
 
 class CloudFilesSwiftStorageDriver(CloudFilesStorageDriver):
@@ -833,7 +810,7 @@ class CloudFilesUKStorageDriver(CloudFil
 
     type = Provider.CLOUDFILES_UK
     name = 'CloudFiles (UK)'
-    _datacenter = 'lon'
+    connectionCls = CloudFilesUKConnection
 
 
 class FileChunkReader(object):
@@ -885,7 +862,7 @@ class ChunkStreamReader(object):
             raise StopIteration
 
         block_size = self.chunk_size
-        if self.bytes_read + block_size > \
+        if self.bytes_read + block_size >\
                 self.end_block - self.start_block:
             block_size = self.end_block - self.start_block - self.bytes_read
             self.stop_iteration = True

Modified: libcloud/branches/0.12.x/libcloud/storage/providers.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/storage/providers.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/storage/providers.py (original)
+++ libcloud/branches/0.12.x/libcloud/storage/providers.py Sun Jan 27 05:57:51 2013
@@ -20,8 +20,6 @@ from libcloud.storage.types import Provi
 DRIVERS = {
     Provider.DUMMY:
         ('libcloud.storage.drivers.dummy', 'DummyStorageDriver'),
-    Provider.CLOUDFILES:
-        ('libcloud.storage.drivers.cloudfiles', 'CloudFilesStorageDriver'),
     Provider.S3:
         ('libcloud.storage.drivers.s3', 'S3StorageDriver'),
     Provider.S3_US_WEST:
@@ -38,19 +36,18 @@ DRIVERS = {
         ('libcloud.storage.drivers.ninefold', 'NinefoldStorageDriver'),
     Provider.GOOGLE_STORAGE:
         ('libcloud.storage.drivers.google_storage', 'GoogleStorageDriver'),
-    Provider.CLOUDFILES_SWIFT:
-        ('libcloud.storage.drivers.cloudfiles',
-         'CloudFilesSwiftStorageDriver'),
     Provider.NIMBUS:
         ('libcloud.storage.drivers.nimbus', 'NimbusStorageDriver'),
     Provider.LOCAL:
         ('libcloud.storage.drivers.local', 'LocalStorageDriver'),
 
-    # Deprecated
     Provider.CLOUDFILES_US:
         ('libcloud.storage.drivers.cloudfiles', 'CloudFilesUSStorageDriver'),
     Provider.CLOUDFILES_UK:
-        ('libcloud.storage.drivers.cloudfiles', 'CloudFilesUKStorageDriver')
+        ('libcloud.storage.drivers.cloudfiles', 'CloudFilesUKStorageDriver'),
+    Provider.CLOUDFILES_SWIFT:
+        ('libcloud.storage.drivers.cloudfiles',
+         'CloudFilesSwiftStorageDriver')
 }
 
 

Modified: libcloud/branches/0.12.x/libcloud/storage/types.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/storage/types.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/storage/types.py (original)
+++ libcloud/branches/0.12.x/libcloud/storage/types.py Sun Jan 27 05:57:51 2013
@@ -53,14 +53,12 @@ class Provider(object):
     NINEFOLD = 'ninefold'
     GOOGLE_STORAGE = 'google_storage'
     S3_US_WEST_OREGON = 's3_us_west_oregon'
-    CLOUDFILES_SWIFT = 'cloudfiles_swift'
     NIMBUS = 'nimbus'
     LOCAL = 'local'
-    CLOUDFILES = 'cloudfiles'
 
-    # Deperecated
     CLOUDFILES_US = 'cloudfiles_us'
     CLOUDFILES_UK = 'cloudfiles_uk'
+    CLOUDFILES_SWIFT = 'cloudfiles_swift'
 
 
 class ContainerError(LibcloudError):

Modified: libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v1_1__auth.json
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v1_1__auth.json?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v1_1__auth.json (original)
+++ libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v1_1__auth.json Sun Jan 27 05:57:51 2013
@@ -10,11 +10,6 @@
                     "region": "ORD",
                     "publicURL": "https://cdn2.clouddrive.com/v1/MossoCloudFS",
                     "v1Default": true
-                },
-                {
-                    "region": "LON",
-                    "publicURL": "https://cdn2.clouddrive.com/v1/MossoCloudFS",
-                    "v1Default": false
                 }
             ],
             "cloudFiles": [
@@ -23,12 +18,6 @@
                     "publicURL": "https://storage101.ord1.clouddrive.com/v1/MossoCloudFS",
                     "v1Default": true,
                     "internalURL": "https://snet-storage101.ord1.clouddrive.com/v1/MossoCloudFS"
-                },
-                {
-                    "region": "LON",
-                    "publicURL": "https://storage101.lon1.clouddrive.com/v1/MossoCloudFS",
-                    "v1Default": false,
-                    "internalURL": "https://snet-storage101.lon1.clouddrive.com/v1/MossoCloudFS"
                 }
             ],
             "cloudServers": [

Modified: libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json (original)
+++ libcloud/branches/0.12.x/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json Sun Jan 27 05:57:51 2013
@@ -28,12 +28,6 @@
                         "tenantId": "MossoCloudFS_11111-111111111-1111111111-1111111",
                         "publicURL": "https://storage101.ord1.clouddrive.com/v1/MossoCloudFS_11111-111111111-1111111111-1111111",
                         "internalURL": "https://snet-storage101.ord1.clouddrive.com/v1/MossoCloudFS_11111-111111111-1111111111-1111111"
-                    },
-                    {
-                        "region": "LON",
-                        "tenantId": "MossoCloudFS_11111-111111111-1111111111-1111111",
-                        "publicURL": "https://storage101.lon1.clouddrive.com/v1/MossoCloudFS_11111-111111111-1111111111-1111111",
-                        "internalURL": "https://snet-storage101.lon1.clouddrive.com/v1/MossoCloudFS_11111-111111111-1111111111-1111111"
                     }
                 ],
                 "name": "cloudFiles",

Modified: libcloud/branches/0.12.x/libcloud/test/compute/test_deployment.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/test/compute/test_deployment.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/test/compute/test_deployment.py (original)
+++ libcloud/branches/0.12.x/libcloud/test/compute/test_deployment.py Sun Jan 27 05:57:51 2013
@@ -28,7 +28,7 @@ from libcloud.compute.deployment import 
 from libcloud.compute.base import Node
 from libcloud.compute.types import NodeState, DeploymentError, LibcloudError
 from libcloud.compute.ssh import BaseSSHClient
-from libcloud.compute.drivers.rackspace import RackspaceFirstGenNodeDriver as Rackspace
+from libcloud.compute.drivers.rackspace import RackspaceNodeDriver as Rackspace
 
 from libcloud.test import MockHttp, XML_HEADERS
 from libcloud.test.file_fixtures import ComputeFileFixtures, OpenStackFixtures

Modified: libcloud/branches/0.12.x/libcloud/test/compute/test_ec2.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/test/compute/test_ec2.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/test/compute/test_ec2.py (original)
+++ libcloud/branches/0.12.x/libcloud/test/compute/test_ec2.py Sun Jan 27 05:57:51 2013
@@ -45,36 +45,15 @@ except AttributeError:
     parse_qsl = cgi.parse_qsl
 
 
-class BaseEC2Tests(LibcloudTestCase):
-    def test_instantiate_driver_valid_datacenters(self):
-        datacenters = REGION_DETAILS.keys()
-        datacenters = [d for d in datacenters if d != 'nimbus']
-
-        for datacenter in datacenters:
-            EC2NodeDriver(*EC2_PARAMS, **{'datacenter': datacenter})
-
-    def test_instantiate_driver_invalid_datacenters(self):
-        for datacenter in ['invalid', 'nimbus']:
-            try:
-                EC2NodeDriver(*EC2_PARAMS, **{'datacenter': datacenter})
-            except ValueError:
-                pass
-            else:
-                self.fail('Invalid region, but exception was not thrown')
-
-
 class EC2Tests(LibcloudTestCase, TestCaseMixin):
     image_name = 'ec2-public-images/fedora-8-i386-base-v1.04.manifest.xml'
-    datacenter = 'us-east-1'
 
     def setUp(self):
         EC2MockHttp.test = self
         EC2NodeDriver.connectionCls.conn_classes = (None, EC2MockHttp)
         EC2MockHttp.use_param = 'Action'
         EC2MockHttp.type = None
-
-        self.driver = EC2NodeDriver(*EC2_PARAMS,
-                                    **{'datacenter': self.datacenter})
+        self.driver = EC2NodeDriver(*EC2_PARAMS)
 
     def test_create_node(self):
         image = NodeImage(id='ami-be3adfd7',
@@ -396,75 +375,6 @@ class EC2Tests(LibcloudTestCase, TestCas
         self.assertTrue(retValue)
 
 
-class EC2USWest1Tests(EC2Tests):
-    datacenter = 'us-west-1'
-
-
-class EC2USWest2Tests(EC2Tests):
-    datacenter = 'us-west-2'
-
-
-class EC2EUWestTests(EC2Tests):
-    datacenter = 'eu-west-1'
-
-
-class EC2APSE1Tests(EC2Tests):
-    datacenter = 'ap-southeast-1'
-
-
-class EC2APNETests(EC2Tests):
-    datacenter = 'ap-northeast-1'
-
-
-class EC2APSE2Tests(EC2Tests):
-    datacenter = 'ap-southeast-2'
-
-
-class EC2SAEastTests(EC2Tests):
-    datacenter = 'sa-east-1'
-
-
-# Tests for the old, deprecated way of instantiating a driver.
-class EC2OldStyleModelTests(EC2Tests):
-    driver_klass = EC2USWestNodeDriver
-
-    def setUp(self):
-        EC2MockHttp.test = self
-        EC2NodeDriver.connectionCls.conn_classes = (None, EC2MockHttp)
-        EC2MockHttp.use_param = 'Action'
-        EC2MockHttp.type = None
-
-        self.driver = self.driver_klass(*EC2_PARAMS)
-
-
-class EC2USWest1OldStyleModelTests(EC2OldStyleModelTests):
-    driver_klass = EC2USWestNodeDriver
-
-
-class EC2USWest2OldStyleModelTests(EC2OldStyleModelTests):
-    driver_klass = EC2USWestOregonNodeDriver
-
-
-class EC2EUWestOldStyleModelTests(EC2OldStyleModelTests):
-    driver_klass = EC2EUNodeDriver
-
-
-class EC2APSE1OldStyleModelTests(EC2OldStyleModelTests):
-    driver_klass = EC2APSENodeDriver
-
-
-class EC2APNEOldStyleModelTests(EC2OldStyleModelTests):
-    driver_klass = EC2APNENodeDriver
-
-
-class EC2APSE2OldStyleModelTests(EC2OldStyleModelTests):
-    driver_klass = EC2APSESydneyNodeDriver
-
-
-class EC2SAEastOldStyleModelTests(EC2OldStyleModelTests):
-    driver_klass = EC2SAEastNodeDriver
-
-
 class EC2MockHttp(MockHttpTestCase):
     fixtures = ComputeFileFixtures('ec2')
 

Modified: libcloud/branches/0.12.x/libcloud/test/compute/test_rackspace.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/test/compute/test_rackspace.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/test/compute/test_rackspace.py (original)
+++ libcloud/branches/0.12.x/libcloud/test/compute/test_rackspace.py Sun Jan 27 05:57:51 2013
@@ -15,182 +15,25 @@
 import sys
 import unittest
 
-from libcloud.utils.py3 import method_type
-from libcloud.utils.py3 import httplib
-from libcloud.compute.providers import DEPRECATED_RACKSPACE_PROVIDERS
-from libcloud.compute.providers import get_driver
-from libcloud.compute.drivers.rackspace import RackspaceFirstGenNodeDriver
 from libcloud.compute.drivers.rackspace import RackspaceNodeDriver
 from libcloud.test.compute.test_openstack import OpenStack_1_0_Tests
-from libcloud.test.compute.test_openstack import OpenStack_1_1_Tests, \
-                                                 OpenStack_1_1_MockHttp
-from libcloud.pricing import clear_pricing_data
 
-from libcloud.test.secrets import RACKSPACE_NOVA_PARAMS
 from libcloud.test.secrets import RACKSPACE_PARAMS
 
 
-class RackspaceusFirstGenUsTests(OpenStack_1_0_Tests):
+class RackspaceTests(OpenStack_1_0_Tests):
     should_list_locations = True
     should_have_pricing = True
 
-    driver_klass = RackspaceFirstGenNodeDriver
-    driver_type = RackspaceFirstGenNodeDriver
-    driver_args = RACKSPACE_PARAMS
-    driver_kwargs = {'region': 'us'}
-
-    def test_error_is_thrown_on_accessing_old_constant(self):
-        for provider in DEPRECATED_RACKSPACE_PROVIDERS:
-            try:
-                get_driver(provider)
-            except Exception:
-                e = sys.exc_info()[1]
-                self.assertTrue(str(e).find('has been removed') != -1)
-            else:
-                self.fail('Exception was not thrown')
-
-    def test_list_sizes_pricing(self):
-        sizes = self.driver.list_sizes()
-
-        for size in sizes:
-            self.assertTrue(size.price > 0)
-
-
-class RackspaceusFirstGenUkTests(OpenStack_1_0_Tests):
-    should_list_locations = True
-    should_have_pricing = True
-
-    driver_klass = RackspaceFirstGenNodeDriver
-    driver_type = RackspaceFirstGenNodeDriver
-    driver_args = RACKSPACE_PARAMS
-    driver_kwargs = {'region': 'uk'}
-
-    def test_list_sizes_pricing(self):
-        sizes = self.driver.list_sizes()
-
-        for size in sizes:
-            self.assertTrue(size.price > 0)
-
-
-class RackspaceNovaMockHttp(OpenStack_1_1_MockHttp):
-    def __init__(self, *args, **kwargs):
-        super(RackspaceNovaMockHttp, self).__init__(*args, **kwargs)
-
-        methods1 = OpenStack_1_1_MockHttp.__dict__
-
-        names1 = [m for m in methods1 if m.find('_v1_1') == 0]
-
-        for name in names1:
-            method = methods1[name]
-            new_name = name.replace('_v1_1_slug_', '_v2_1337_')
-            setattr(self, new_name, method_type(method, self,
-                RackspaceNovaMockHttp))
-
-
-class RackspaceNovaLonMockHttp(RackspaceNovaMockHttp):
-
-    def _v2_0_tokens(self, method, url, body, headers):
-        body = self.auth_fixtures.load('_v2_0__auth_lon.json')
-        return (httplib.OK, body, self.json_content_headers,
-                httplib.responses[httplib.OK])
-
-
-
-class RackspaceNovaDfwTests(OpenStack_1_1_Tests):
-
-    driver_klass = RackspaceNodeDriver
-    driver_type = RackspaceNodeDriver
-    driver_args = RACKSPACE_NOVA_PARAMS
-    driver_kwargs = {'datacenter': 'dfw'}
-
-    @classmethod
-    def create_driver(self):
-        return self.driver_type(*self.driver_args, **self.driver_kwargs)
-
-    def setUp(self):
-        self.driver_klass.connectionCls.conn_classes = (RackspaceNovaMockHttp,
-                                                        RackspaceNovaMockHttp)
-        self.driver_klass.connectionCls.auth_url = \
-                'https://auth.api.example.com/v2.0/'
-        self.driver = self.create_driver()
-        # normally authentication happens lazily, but we force it here
-        self.driver.connection._populate_hosts_and_request_paths()
-        clear_pricing_data()
-        self.node = self.driver.list_nodes()[1]
-
-    def test_service_catalog(self):
-        self.assertEqual(
-                'https://dfw.servers.api.rackspacecloud.com/v2/1337',
-                self.driver.connection.get_endpoint())
-
-
-class RackspaceNovaOrdTests(OpenStack_1_1_Tests):
-
     driver_klass = RackspaceNodeDriver
     driver_type = RackspaceNodeDriver
-    driver_args = RACKSPACE_NOVA_PARAMS
-    driver_kwargs = {'datacenter': 'ord'}
-
-    @classmethod
-    def create_driver(self):
-        return self.driver_type(*self.driver_args, **self.driver_kwargs)
-
-    def setUp(self):
-        self.driver_klass.connectionCls.conn_classes = (RackspaceNovaMockHttp,
-                                                        RackspaceNovaMockHttp)
-        self.driver_klass.connectionCls.auth_url = \
-                'https://auth.api.example.com/v2.0/'
-        self.driver = self.create_driver()
-        # normally authentication happens lazily, but we force it here
-        self.driver.connection._populate_hosts_and_request_paths()
-        clear_pricing_data()
-        self.node = self.driver.list_nodes()[1]
-
-    def test_list_sizes_pricing(self):
-        sizes = self.driver.list_sizes()
-
-        for size in sizes:
-            if size.ram > 256:
-                self.assertTrue(size.price > 0)
-
-    def test_service_catalog(self):
-        self.assertEqual('https://ord.servers.api.rackspacecloud.com/v2/1337',
-                         self.driver.connection.get_endpoint())
-
-
-class RackspaceNovaLonTests(OpenStack_1_1_Tests):
-
-    driver_klass = RackspaceNodeDriver
-    driver_type = RackspaceNodeDriver
-    driver_args = RACKSPACE_NOVA_PARAMS
-    driver_kwargs = {'datacenter': 'lon'}
-
-    @classmethod
-    def create_driver(self):
-        return self.driver_type(*self.driver_args, **self.driver_kwargs)
-
-    def setUp(self):
-        self.driver_klass.connectionCls.conn_classes = \
-                (RackspaceNovaLonMockHttp, RackspaceNovaLonMockHttp)
-        self.driver_klass.connectionCls.auth_url = \
-                'https://lon.auth.api.example.com/v2.0/'
-        self.driver = self.create_driver()
-        # normally authentication happens lazily, but we force it here
-        self.driver.connection._populate_hosts_and_request_paths()
-        clear_pricing_data()
-        self.node = self.driver.list_nodes()[1]
+    driver_args = RACKSPACE_PARAMS
 
     def test_list_sizes_pricing(self):
         sizes = self.driver.list_sizes()
 
         for size in sizes:
-            if size.ram > 256:
-                self.assertTrue(size.price > 0)
-
-    def test_service_catalog(self):
-        self.assertEqual('https://lon.servers.api.rackspacecloud.com/v2/1337',
-                         self.driver.connection.get_endpoint())
-
+            self.assertTrue(size.price > 0)
 
 if __name__ == '__main__':
     sys.exit(unittest.main())

Added: libcloud/branches/0.12.x/libcloud/test/compute/test_rackspacenova.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/test/compute/test_rackspacenova.py?rev=1439028&view=auto
==============================================================================
--- libcloud/branches/0.12.x/libcloud/test/compute/test_rackspacenova.py (added)
+++ libcloud/branches/0.12.x/libcloud/test/compute/test_rackspacenova.py Sun Jan 27 05:57:51 2013
@@ -0,0 +1,149 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import sys
+import unittest
+
+from libcloud.utils.py3 import method_type
+from libcloud.utils.py3 import httplib
+from libcloud.compute.drivers.rackspacenova import RackspaceNovaBetaNodeDriver, \
+                                                   RackspaceNovaDfwNodeDriver, \
+                                                   RackspaceNovaOrdNodeDriver, \
+                                                   RackspaceNovaLonNodeDriver
+from libcloud.test.compute.test_openstack import OpenStack_1_1_Tests, OpenStack_1_1_MockHttp
+from libcloud.pricing import clear_pricing_data
+
+from libcloud.test.secrets import RACKSPACE_NOVA_PARAMS
+
+
+class RackspaceNovaMockHttp(OpenStack_1_1_MockHttp):
+    def __init__(self, *args, **kwargs):
+        super(RackspaceNovaMockHttp, self).__init__(*args, **kwargs)
+
+        methods1 = OpenStack_1_1_MockHttp.__dict__
+
+        names1 = [m for m in methods1 if m.find('_v1_1') == 0]
+
+        for name in names1:
+            method = methods1[name]
+            new_name = name.replace('_v1_1_slug_', '_v2_1337_')
+            setattr(self, new_name, method_type(method, self,
+                RackspaceNovaMockHttp))
+
+
+class RackspaceNovaLonMockHttp(RackspaceNovaMockHttp):
+
+    def _v2_0_tokens(self, method, url, body, headers):
+        body = self.auth_fixtures.load('_v2_0__auth_lon.json')
+        return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
+
+
+class RackspaceNovaBetaTests(OpenStack_1_1_Tests):
+
+    driver_klass = RackspaceNovaBetaNodeDriver
+    driver_type = RackspaceNovaBetaNodeDriver
+    driver_args = RACKSPACE_NOVA_PARAMS + ('1.1',)
+    driver_kwargs = {'ex_force_auth_version': '2.0'}
+
+    @classmethod
+    def create_driver(self):
+        return self.driver_type(*self.driver_args, **self.driver_kwargs)
+
+    def setUp(self):
+        self.driver_klass.connectionCls.conn_classes = (RackspaceNovaMockHttp, RackspaceNovaMockHttp)
+        self.driver_klass.connectionCls.auth_url = "https://auth.api.example.com/v2.0/"
+        self.driver = self.create_driver()
+        # normally authentication happens lazily, but we force it here
+        self.driver.connection._populate_hosts_and_request_paths()
+        clear_pricing_data()
+        self.node = self.driver.list_nodes()[1]
+
+    def test_service_catalog(self):
+        self.assertEqual('https://preprod.dfw.servers.api.rackspacecloud.com/v2/1337', self.driver.connection.get_endpoint())
+
+
+class RackspaceNovaDfwTests(OpenStack_1_1_Tests):
+
+    driver_klass = RackspaceNovaDfwNodeDriver
+    driver_type = RackspaceNovaDfwNodeDriver
+    driver_args = RACKSPACE_NOVA_PARAMS + ('1.1',)
+    driver_kwargs = {'ex_force_auth_version': '2.0'}
+
+    @classmethod
+    def create_driver(self):
+        return self.driver_type(*self.driver_args, **self.driver_kwargs)
+
+    def setUp(self):
+        self.driver_klass.connectionCls.conn_classes = (RackspaceNovaMockHttp, RackspaceNovaMockHttp)
+        self.driver_klass.connectionCls.auth_url = "https://auth.api.example.com/v2.0/"
+        self.driver = self.create_driver()
+        # normally authentication happens lazily, but we force it here
+        self.driver.connection._populate_hosts_and_request_paths()
+        clear_pricing_data()
+        self.node = self.driver.list_nodes()[1]
+
+    def test_service_catalog(self):
+        self.assertEqual('https://dfw.servers.api.rackspacecloud.com/v2/1337', self.driver.connection.get_endpoint())
+
+
+class RackspaceNovaOrdTests(OpenStack_1_1_Tests):
+
+    driver_klass = RackspaceNovaOrdNodeDriver
+    driver_type = RackspaceNovaOrdNodeDriver
+    driver_args = RACKSPACE_NOVA_PARAMS + ('1.1',)
+    driver_kwargs = {'ex_force_auth_version': '2.0'}
+
+    @classmethod
+    def create_driver(self):
+        return self.driver_type(*self.driver_args, **self.driver_kwargs)
+
+    def setUp(self):
+        self.driver_klass.connectionCls.conn_classes = (RackspaceNovaMockHttp, RackspaceNovaMockHttp)
+        self.driver_klass.connectionCls.auth_url = "https://auth.api.example.com/v2.0/"
+        self.driver = self.create_driver()
+        # normally authentication happens lazily, but we force it here
+        self.driver.connection._populate_hosts_and_request_paths()
+        clear_pricing_data()
+        self.node = self.driver.list_nodes()[1]
+
+    def test_service_catalog(self):
+        self.assertEqual('https://ord.servers.api.rackspacecloud.com/v2/1337', self.driver.connection.get_endpoint())
+
+
+class RackspaceNovaLonTests(OpenStack_1_1_Tests):
+
+    driver_klass = RackspaceNovaLonNodeDriver
+    driver_type = RackspaceNovaLonNodeDriver
+    driver_args = RACKSPACE_NOVA_PARAMS + ('1.1',)
+    driver_kwargs = {'ex_force_auth_version': '2.0'}
+
+    @classmethod
+    def create_driver(self):
+        return self.driver_type(*self.driver_args, **self.driver_kwargs)
+
+    def setUp(self):
+        self.driver_klass.connectionCls.conn_classes = (RackspaceNovaLonMockHttp, RackspaceNovaLonMockHttp)
+        self.driver_klass.connectionCls.auth_url = "https://lon.auth.api.example.com/v2.0/"
+        self.driver = self.create_driver()
+        # normally authentication happens lazily, but we force it here
+        self.driver.connection._populate_hosts_and_request_paths()
+        clear_pricing_data()
+        self.node = self.driver.list_nodes()[1]
+
+    def test_service_catalog(self):
+        self.assertEqual('https://lon.servers.api.rackspacecloud.com/v2/1337', self.driver.connection.get_endpoint())
+
+
+if __name__ == '__main__':
+    sys.exit(unittest.main())

Modified: libcloud/branches/0.12.x/libcloud/test/storage/test_cloudfiles.py
URL: http://svn.apache.org/viewvc/libcloud/branches/0.12.x/libcloud/test/storage/test_cloudfiles.py?rev=1439028&r1=1439027&r2=1439028&view=diff
==============================================================================
--- libcloud/branches/0.12.x/libcloud/test/storage/test_cloudfiles.py (original)
+++ libcloud/branches/0.12.x/libcloud/test/storage/test_cloudfiles.py Sun Jan 27 05:57:51 2013
@@ -41,31 +41,24 @@ from libcloud.storage.types import Objec
 from libcloud.storage.types import ObjectHashMismatchError
 from libcloud.storage.types import InvalidContainerNameError
 from libcloud.storage.drivers.cloudfiles import CloudFilesStorageDriver
-from libcloud.storage.drivers.cloudfiles import CloudFilesUSStorageDriver
-from libcloud.storage.drivers.cloudfiles import CloudFilesUKStorageDriver
 from libcloud.storage.drivers.dummy import DummyIterator
 
 from libcloud.test import StorageMockHttp, MockRawResponse # pylint: disable-msg=E0611
-from libcloud.test import MockHttpTestCase # pylint: disable-msg=E0611
 from libcloud.test.file_fixtures import StorageFileFixtures, OpenStackFixtures # pylint: disable-msg=E0611
 
+current_hash = None
+
 
 class CloudFilesTests(unittest.TestCase):
-    driver_klass = CloudFilesStorageDriver
-    driver_args = ('dummy', 'dummy')
-    driver_kwargs = {}
-    datacenter = 'ord'
 
     def setUp(self):
-        self.driver_klass.connectionCls.conn_classes = (
+        CloudFilesStorageDriver.connectionCls.conn_classes = (
             None, CloudFilesMockHttp)
-        self.driver_klass.connectionCls.rawResponseCls = \
+        CloudFilesStorageDriver.connectionCls.rawResponseCls = \
                                               CloudFilesMockRawResponse
         CloudFilesMockHttp.type = None
         CloudFilesMockRawResponse.type = None
-        self.driver = self.driver_klass(*self.driver_args,
-                                        **self.driver_kwargs)
-
+        self.driver = CloudFilesStorageDriver('dummy', 'dummy')
         # normally authentication happens lazily, but we force it here
         self.driver.connection._populate_hosts_and_request_paths()
         self._remove_test_file()
@@ -73,23 +66,6 @@ class CloudFilesTests(unittest.TestCase)
     def tearDown(self):
         self._remove_test_file()
 
-    def test_invalid_ex_force_service_region(self):
-        driver = CloudFilesStorageDriver('driver', 'dummy',
-                ex_force_service_region='invalid')
-
-        try:
-            driver.list_containers()
-        except:
-            e = sys.exc_info()[1]
-            self.assertEquals(e.value, 'Could not find specified endpoint')
-        else:
-            self.fail('Exception was not thrown')
-
-    def test_ex_force_service_region(self):
-        driver = CloudFilesStorageDriver('driver', 'dummy',
-                ex_force_service_region='ORD')
-        driver.list_containers()
-
     def test_force_auth_token_kwargs(self):
         base_url = 'https://cdn2.clouddrive.com/v1/MossoCloudFS'
         kwargs = {
@@ -128,10 +104,8 @@ class CloudFilesTests(unittest.TestCase)
             self.fail('Exception was not thrown')
 
     def test_service_catalog(self):
-        url = 'https://storage101.%s1.clouddrive.com/v1/MossoCloudFS' % \
-              (self.datacenter)
         self.assertEqual(
-             url,
+             'https://storage101.ord1.clouddrive.com/v1/MossoCloudFS',
              self.driver.connection.get_endpoint())
 
         self.driver.connection.cdn_request = True
@@ -292,7 +266,7 @@ class CloudFilesTests(unittest.TestCase)
                                              destination_path=destination_path,
                                              overwrite_existing=False,
                                              delete_on_failure=True)
-        self.assertTrue(result)
+        #self.assertTrue(result)
 
     def test_download_object_invalid_file_size(self):
         CloudFilesMockRawResponse.type = 'INVALID_SIZE'
@@ -523,26 +497,6 @@ class CloudFilesTests(unittest.TestCase)
         self.assertTrue('bytes_used' in meta_data)
         self.assertTrue('temp_url_key' in meta_data)
 
-    def test_ex_purge_object_from_cdn(self):
-        CloudFilesMockHttp.type = 'PURGE_SUCCESS'
-        container = Container(name='foo_bar_container', extra={},
-                              driver=self.driver)
-        obj = Object(name='object', size=1000, hash=None, extra={},
-                     container=container, meta_data=None,
-                     driver=self)
-
-        self.assertTrue(self.driver.ex_purge_object_from_cdn(obj=obj))
-
-    def test_ex_purge_object_from_cdn_with_email(self):
-        CloudFilesMockHttp.type = 'PURGE_SUCCESS_EMAIL'
-        container = Container(name='foo_bar_container', extra={},
-                              driver=self.driver)
-        obj = Object(name='object', size=1000, hash=None, extra={},
-                     container=container, meta_data=None,
-                     driver=self)
-        self.assertTrue(self.driver.ex_purge_object_from_cdn(obj=obj,
-                                                       email='test@test.com'))
-
     @mock.patch('os.path.getsize')
     def test_ex_multipart_upload_object_for_small_files(self, getsize_mock):
         getsize_mock.return_value = 0
@@ -684,9 +638,9 @@ 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.datacenter, sig)
+        temp_url = 'https://storage101.ord1.clouddrive.com/v1/MossoCloudFS/foo_bar_container/foo_bar_object?temp_url_expires=60&temp_url_sig=%s' % (sig)
 
-        self.assertEquals(''.join(sorted(ret)), ''.join(sorted(temp_url)))
+        self.assertEquals(ret, temp_url)
 
     def test_ex_get_object_temp_url_no_key_raises_key_error(self):
         self.driver.ex_get_meta_data = mock.Mock()
@@ -709,17 +663,7 @@ class CloudFilesTests(unittest.TestCase)
             pass
 
 
-class CloudFilesDeprecatedUSTests(CloudFilesTests):
-    driver_klass = CloudFilesUSStorageDriver
-    datacenter = 'ord'
-
-
-class CloudFilesDeprecatedUKTests(CloudFilesTests):
-    driver_klass = CloudFilesUKStorageDriver
-    datacenter = 'lon'
-
-
-class CloudFilesMockHttp(StorageMockHttp, MockHttpTestCase):
+class CloudFilesMockHttp(StorageMockHttp):
 
     fixtures = StorageFileFixtures('cloudfiles')
     auth_fixtures = OpenStackFixtures()
@@ -889,25 +833,6 @@ class CloudFilesMockHttp(StorageMockHttp
             status_code = httplib.ACCEPTED
         return (status_code, body, headers, httplib.responses[httplib.OK])
 
-    def _v1_MossoCloudFS_foo_bar_container_object_PURGE_SUCCESS(
-        self, method, url, body, headers):
-
-        if method == 'DELETE':
-            # test_ex_purge_from_cdn
-            headers = self.base_headers
-            status_code = httplib.NO_CONTENT
-        return (status_code, body, headers, httplib.responses[httplib.OK])
-
-    def _v1_MossoCloudFS_foo_bar_container_object_PURGE_SUCCESS_EMAIL(
-        self, method, url, body, headers):
-
-        if method == 'DELETE':
-            # test_ex_purge_from_cdn_with_email
-            self.assertEqual(headers['X-Purge-Email'], 'test@test.com')
-            headers = self.base_headers
-            status_code = httplib.NO_CONTENT
-        return (status_code, body, headers, httplib.responses[httplib.OK])
-
     def _v1_MossoCloudFS_foo_bar_container_NOT_FOUND(
         self, method, url, body, headers):
 
@@ -992,7 +917,8 @@ class CloudFilesMockRawResponse(MockRawR
         self, method, url, body, headers):
 
         # test_download_object_success
-        body = self._generate_random_data(1000)
+        body = 'test'
+        self._data = self._generate_random_data(1000)
         return (httplib.OK,
                 body,
                 self.base_headers,
@@ -1001,7 +927,8 @@ class CloudFilesMockRawResponse(MockRawR
     def _v1_MossoCloudFS_foo_bar_container_foo_bar_object_INVALID_SIZE(
         self, method, url, body, headers):
         # test_download_object_invalid_file_size
-        body = self._generate_random_data(100)
+        body = 'test'
+        self._data = self._generate_random_data(100)
         return (httplib.OK, body,
                 self.base_headers,
                 httplib.responses[httplib.OK])