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 2011/03/15 20:08:48 UTC
svn commit: r1081909 [1/2] - in /incubator/libcloud/trunk: ./ libcloud/
libcloud/common/ libcloud/compute/ libcloud/compute/drivers/
libcloud/storage/ libcloud/storage/drivers/ test/ test/compute/ test/storage/
Author: tomaz
Date: Tue Mar 15 19:08:47 2011
New Revision: 1081909
URL: http://svn.apache.org/viewvc?rev=1081909&view=rev
Log:
Apply Tavis Rodd's patch (style fixes, cloudfiles test fixes, cloudfiles bug
fix)
Modified:
incubator/libcloud/trunk/.gitignore
incubator/libcloud/trunk/libcloud/__init__.py
incubator/libcloud/trunk/libcloud/base.py
incubator/libcloud/trunk/libcloud/common/rackspace.py
incubator/libcloud/trunk/libcloud/common/types.py
incubator/libcloud/trunk/libcloud/compute/base.py
incubator/libcloud/trunk/libcloud/compute/drivers/dreamhost.py
incubator/libcloud/trunk/libcloud/compute/drivers/rackspace.py
incubator/libcloud/trunk/libcloud/compute/drivers/slicehost.py
incubator/libcloud/trunk/libcloud/compute/providers.py
incubator/libcloud/trunk/libcloud/compute/types.py
incubator/libcloud/trunk/libcloud/deployment.py
incubator/libcloud/trunk/libcloud/pricing.py
incubator/libcloud/trunk/libcloud/providers.py
incubator/libcloud/trunk/libcloud/security.py
incubator/libcloud/trunk/libcloud/ssh.py
incubator/libcloud/trunk/libcloud/storage/base.py
incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py
incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py
incubator/libcloud/trunk/libcloud/storage/types.py
incubator/libcloud/trunk/libcloud/types.py
incubator/libcloud/trunk/libcloud/utils.py
incubator/libcloud/trunk/setup.py
incubator/libcloud/trunk/test/__init__.py
incubator/libcloud/trunk/test/compute/__init__.py
incubator/libcloud/trunk/test/compute/test_base.py
incubator/libcloud/trunk/test/compute/test_cloudsigma.py
incubator/libcloud/trunk/test/compute/test_gogrid.py
incubator/libcloud/trunk/test/compute/test_softlayer.py
incubator/libcloud/trunk/test/storage/test_cloudfiles.py
Modified: incubator/libcloud/trunk/.gitignore
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/.gitignore?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/.gitignore (original)
+++ incubator/libcloud/trunk/.gitignore Tue Mar 15 19:08:47 2011
@@ -6,3 +6,6 @@ demos/secrets.py
_trial_temp
build
MANIFEST
+/.ropeproject/config.py
+/.coverage
+coverage_html_report/
Modified: incubator/libcloud/trunk/libcloud/__init__.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/__init__.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/__init__.py (original)
+++ incubator/libcloud/trunk/libcloud/__init__.py Tue Mar 15 19:08:47 2011
@@ -30,7 +30,9 @@ def enable_debug(fo):
@param fo: Where to append debugging information
@type fo: File like object, only write operations are used.
"""
- from libcloud.base import ConnectionKey, LoggingHTTPConnection, LoggingHTTPSConnection
+ from libcloud.base import (ConnectionKey,
+ LoggingHTTPConnection,
+ LoggingHTTPSConnection)
LoggingHTTPSConnection.log = fo
LoggingHTTPConnection.log = fo
ConnectionKey.conn_classes = (LoggingHTTPConnection, LoggingHTTPSConnection)
Modified: incubator/libcloud/trunk/libcloud/base.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/base.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/base.py (original)
+++ incubator/libcloud/trunk/libcloud/base.py Tue Mar 15 19:08:47 2011
@@ -20,6 +20,22 @@ from libcloud.compute.base import Node,
from libcloud.compute.base import NodeLocation, NodeAuthSSHKey, NodeAuthPassword
from libcloud.compute.base import NodeDriver, is_private_subnet
+__all__ = ['RawResponse',
+ 'Response',
+ 'LoggingConnection',
+ 'LoggingHTTPSConnection',
+ 'LoggingHTTPConnection',
+ 'ConnectionKey',
+ 'ConnectionUserAndKey',
+ 'Node',
+ 'NodeSize',
+ 'NodeImage',
+ 'NodeLocation',
+ 'NodeAuthSSHKey',
+ 'NodeAuthPassword',
+ 'NodeDriver',
+ 'is_private_subnet']
+
from libcloud.utils import deprecated_warning
deprecated_warning(__name__)
Modified: incubator/libcloud/trunk/libcloud/common/rackspace.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/common/rackspace.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/common/rackspace.py (original)
+++ incubator/libcloud/trunk/libcloud/common/rackspace.py Tue Mar 15 19:08:47 2011
@@ -25,6 +25,11 @@ AUTH_HOST_US='auth.api.rackspacecloud.co
AUTH_HOST_UK='lon.auth.api.rackspacecloud.com'
AUTH_API_VERSION = 'v1.0'
+__all__ = [
+ "RackspaceBaseConnection",
+ "AUTH_HOST_US",
+ "AUTH_HOST_UK"
+ ]
class RackspaceBaseConnection(ConnectionUserAndKey):
def __init__(self, user_id, key, secure):
self.cdn_management_url = None
@@ -32,7 +37,8 @@ class RackspaceBaseConnection(Connection
self.auth_token = None
self.request_path = None
self.__host = None
- super(RackspaceBaseConnection, self).__init__(user_id, key, secure=secure)
+ super(RackspaceBaseConnection, self).__init__(
+ user_id, key, secure=secure)
def add_default_headers(self, headers):
headers['X-Auth-Token'] = self.auth_token
@@ -48,7 +54,8 @@ class RackspaceBaseConnection(Connection
"""
if not self.__host:
# Initial connection used for authentication
- conn = self.conn_classes[self.secure](self.auth_host, self.port[self.secure])
+ conn = self.conn_classes[self.secure](
+ self.auth_host, self.port[self.secure])
conn.request(
method='GET',
url='/%s' % (AUTH_API_VERSION),
@@ -74,8 +81,7 @@ class RackspaceBaseConnection(Connection
raise InvalidCredsError()
scheme, server, self.request_path, param, query, fragment = (
- urlparse.urlparse(getattr(self, self._url_key))
- )
+ urlparse.urlparse(getattr(self, self._url_key)))
if scheme is "https" and self.secure is not True:
raise InvalidCredsError()
Modified: incubator/libcloud/trunk/libcloud/common/types.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/common/types.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/common/types.py (original)
+++ incubator/libcloud/trunk/libcloud/common/types.py Tue Mar 15 19:08:47 2011
@@ -13,33 +13,53 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+__all__ = [
+ "LibcloudError",
+ "MalformedResponseError",
+ "InvalidCredsError",
+ "InvalidCredsException"
+ ]
+
class LibcloudError(Exception):
"""The base class for other libcloud exceptions"""
+
def __init__(self, value, driver=None):
self.value = value
self.driver = driver
def __str__(self):
- return "<LibcloudError in "+ repr(self.driver) +" "+ repr(self.value) + ">"
+ return ("<LibcloudError in "
+ + repr(self.driver)
+ +" "
+ + repr(self.value) + ">")
class MalformedResponseError(LibcloudError):
"""Exception for the cases when a provider returns a malformed
- response, e.g. you request JSON and provider returns
+ response, e.g. you request JSON and provider returns
'<h3>something</h3>' due to some error on their side."""
+
def __init__(self, value, body=None, driver=None):
- self.value = value
- self.driver = driver
- self.body = body
+ self.value = value
+ self.driver = driver
+ self.body = body
+
def __str__(self):
- return "<MalformedResponseException in "+ repr(self.driver) +" "+ repr(self.value) +">: "+ repr(self.body)
+ return ("<MalformedResponseException in "
+ + repr(self.driver)
+ + " "
+ + repr(self.value)
+ + ">: "
+ + repr(self.body))
class InvalidCredsError(LibcloudError):
"""Exception used when invalid credentials are used on a provider."""
- def __init__(self, value='Invalid credentials with the provider', driver=None):
+
+ def __init__(self, value='Invalid credentials with the provider',
+ driver=None):
self.value = value
self.driver = driver
def __str__(self):
return repr(self.value)
-"""Deprecated alias of L{InvalidCredsError}"""
+# Deprecated alias of L{InvalidCredsError}
InvalidCredsException = InvalidCredsError
Modified: incubator/libcloud/trunk/libcloud/compute/base.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/compute/base.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/compute/base.py (original)
+++ incubator/libcloud/trunk/libcloud/compute/base.py Tue Mar 15 19:08:47 2011
@@ -22,14 +22,32 @@ import os
import socket
import struct
-from httplib import HTTPConnection as LibcloudHTTPConnection
-
from libcloud.pricing import get_size_price
-
-from libcloud.common.base import ConnectionKey, ConnectionUserAndKey
from libcloud.compute.types import NodeState, DeploymentError
from libcloud.compute.ssh import SSHClient
+
+# @@TR: are the imports below part of the public api for this
+# module? They aren't used in here ...
+from libcloud.common.base import ConnectionKey, ConnectionUserAndKey
from libcloud.httplib_ssl import LibcloudHTTPSConnection
+from libcloud.common.base import LibcloudHTTPConnection
+
+__all__ = [
+ "Node",
+ "NodeState",
+ "NodeSize",
+ "NodeImage",
+ "NodeLocation",
+ "NodeAuthSSHKey",
+ "NodeAuthPassword",
+ "NodeDriver",
+
+ # @@TR: do the following need exporting?
+ "ConnectionKey",
+ "ConnectionUserAndKey",
+ "LibcloudHTTPSConnection",
+ "LibcloudHTTPConnection"
+ ]
class Node(object):
"""
@@ -196,6 +214,7 @@ class NodeSize(object):
self.bandwidth = bandwidth
self.price = price
self.driver = driver
+
def __repr__(self):
return (('<NodeSize: id=%s, name=%s, ram=%s disk=%s bandwidth=%s '
'price=%s driver=%s ...>')
@@ -473,6 +492,7 @@ class NodeDriver(object):
existing implementation should be able to handle most such.
"""
# TODO: support ssh keys
+ # FIX: this method is too long and complicated
WAIT_PERIOD=3
password = None
@@ -487,60 +507,68 @@ class NodeDriver(object):
password = kwargs['auth'].password
node = self.create_node(**kwargs)
try:
- if 'generates_password' in self.features["create_node"]:
- password = node.extra.get('password')
- start = time.time()
- end = start + (60 * 15)
- while time.time() < end:
- # need to wait until we get a public IP address.
- # TODO: there must be a better way of doing this
- time.sleep(WAIT_PERIOD)
- nodes = self.list_nodes()
- nodes = filter(lambda n: n.uuid == node.uuid, nodes)
- if len(nodes) == 0:
- raise DeploymentError(node, "Booted node[%s] is missing form list_nodes." % node)
- if len(nodes) > 1:
- raise DeploymentError(node, "Booted single node[%s], but multiple nodes have same UUID"% node)
-
- node = nodes[0]
-
- if node.public_ip is not None and node.public_ip != "" and node.state == NodeState.RUNNING:
- break
-
- ssh_username = kwargs.get('ssh_username', 'root')
- ssh_port = kwargs.get('ssh_port', 22)
-
- client = SSHClient(hostname=node.public_ip[0],
- port=ssh_port, username=ssh_username,
- password=password)
- laste = None
- while time.time() < end:
- laste = None
- try:
- client.connect()
- break
- except (IOError, socket.gaierror, socket.error), e:
- laste = e
- time.sleep(WAIT_PERIOD)
- if laste is not None:
- raise e
-
- tries = 3
- while tries >= 0:
- try:
- n = kwargs["deploy"].run(node, client)
- client.close()
- break
- except Exception, e:
- tries -= 1
- if tries == 0:
- raise
- client.connect()
+ if 'generates_password' in self.features["create_node"]:
+ password = node.extra.get('password')
+ start = time.time()
+ end = start + (60 * 15)# FIX: this should be soft-coded
+ while time.time() < end:
+ # need to wait until we get a public IP address.
+ # TODO: there must be a better way of doing this
+ time.sleep(WAIT_PERIOD)
+ nodes = self.list_nodes()
+ nodes = filter(lambda n: n.uuid == node.uuid, nodes)
+ if len(nodes) == 0:
+ raise DeploymentError(
+ node,
+ ("Booted node[%s] " % node
+ + "is missing from list_nodes."))
+ if len(nodes) > 1:
+ raise DeploymentError(
+ node,
+ ("Booted single node[%s], " % node
+ + "but multiple nodes have same UUID"))
+
+ node = nodes[0]
+
+ if (node.public_ip is not None
+ and node.public_ip != ""
+ and node.state == NodeState.RUNNING):
+ break
+
+ ssh_username = kwargs.get('ssh_username', 'root')
+ ssh_port = kwargs.get('ssh_port', 22)
+
+ client = SSHClient(hostname=node.public_ip[0],
+ port=ssh_port, username=ssh_username,
+ password=password)
+ laste = None
+ while time.time() < end:
+ laste = None
+ try:
+ client.connect()
+ break
+ except (IOError, socket.gaierror, socket.error), e:
+ laste = e
+ time.sleep(WAIT_PERIOD)
+ if laste is not None:
+ raise e
+
+ tries = 3
+ while tries >= 0:
+ try:
+ n = kwargs["deploy"].run(node, client)
+ client.close()
+ break
+ except Exception, e:
+ tries -= 1
+ if tries == 0:
+ raise
+ client.connect()
- except DeploymentError, e:
- raise
+ except DeploymentError:
+ raise
except Exception, e:
- raise DeploymentError(node, e)
+ raise DeploymentError(node, e)
return n
def _get_size_price(self, size_id):
Modified: incubator/libcloud/trunk/libcloud/compute/drivers/dreamhost.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/compute/drivers/dreamhost.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/compute/drivers/dreamhost.py (original)
+++ incubator/libcloud/trunk/libcloud/compute/drivers/dreamhost.py Tue Mar 15 19:08:47 2011
@@ -26,15 +26,14 @@ import copy
from libcloud.pricing import get_pricing
from libcloud.common.base import ConnectionKey, Response
from libcloud.common.types import InvalidCredsError
-from libcloud.compute.base import Node, NodeDriver, NodeLocation, NodeSize
+from libcloud.compute.base import Node, NodeDriver, NodeSize
from libcloud.compute.base import NodeImage
from libcloud.compute.types import Provider, NodeState
-"""
-DreamHost Private Servers can be resized on the fly, but Libcloud doesn't
-currently support extensions to its interface, so we'll put some basic sizes
-in for node creation.
-"""
+# DreamHost Private Servers can be resized on the fly, but Libcloud doesn't
+# currently support extensions to its interface, so we'll put some basic sizes
+# in for node creation.
+
DH_PS_SIZES = {
'minimum': {
'id' : 'minimum',
@@ -100,7 +99,8 @@ class DreamhostResponse(Response):
def _api_parse_error(self, response):
if 'data' in response:
if response['data'] == 'invalid_api_key':
- raise InvalidCredsError("Oops! You've entered an invalid API key")
+ raise InvalidCredsError(
+ "Oops! You've entered an invalid API key")
else:
raise DreamhostAPIException(response['data'])
else:
@@ -186,11 +186,13 @@ class DreamhostNodeDriver(NodeDriver):
return False
def list_nodes(self, **kwargs):
- data = self.connection.request('/', {'cmd': 'dreamhost_ps-list_ps'}).object
+ data = self.connection.request(
+ '/', {'cmd': 'dreamhost_ps-list_ps'}).object
return [self._to_node(n) for n in data]
def list_images(self, **kwargs):
- data = self.connection.request('/', {'cmd': 'dreamhost_ps-list_images'}).object
+ data = self.connection.request(
+ '/', {'cmd': 'dreamhost_ps-list_images'}).object
images = []
for img in data:
images.append(NodeImage(
@@ -210,7 +212,9 @@ class DreamhostNodeDriver(NodeDriver):
return sizes
def list_locations(self, **kwargs):
- raise NotImplementedError('You cannot select a location for DreamHost Private Servers at this time.')
+ raise NotImplementedError(
+ 'You cannot select a location for '
+ 'DreamHost Private Servers at this time.')
############################################
# Private Methods (helpers and extensions) #
@@ -243,6 +247,4 @@ class DreamhostNodeDriver(NodeDriver):
extra = {
'current_size' : data['memory_mb'],
'account_id' : data['account_id'],
- 'type' : data['type']
- }
- )
+ 'type' : data['type']})
Modified: incubator/libcloud/trunk/libcloud/compute/drivers/rackspace.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/compute/drivers/rackspace.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/compute/drivers/rackspace.py (original)
+++ incubator/libcloud/trunk/libcloud/compute/drivers/rackspace.py Tue Mar 15 19:08:47 2011
@@ -18,20 +18,19 @@ Rackspace driver
import os
import base64
-import urlparse
from xml.etree import ElementTree as ET
from xml.parsers.expat import ExpatError
from libcloud.pricing import get_pricing
-
-from libcloud.common.base import ConnectionUserAndKey, Response
-from libcloud.common.types import InvalidCredsError, MalformedResponseError
+from libcloud.common.base import Response
+from libcloud.common.types import MalformedResponseError
from libcloud.compute.types import NodeState, Provider
from libcloud.compute.base import NodeDriver, Node
from libcloud.compute.base import NodeSize, NodeImage, NodeLocation
-from libcloud.common.rackspace import AUTH_HOST_US, AUTH_HOST_UK, RackspaceBaseConnection
+from libcloud.common.rackspace import (
+ AUTH_HOST_US, AUTH_HOST_UK, RackspaceBaseConnection)
NAMESPACE='http://docs.rackspacecloud.com/servers/api/v1.0'
@@ -48,14 +47,19 @@ class RackspaceResponse(Response):
try:
body = ET.XML(self.body)
except:
- raise MalformedResponseError("Failed to parse XML", body=self.body, driver=RackspaceNodeDriver)
+ raise MalformedResponseError(
+ "Failed to parse XML",
+ body=self.body,
+ driver=RackspaceNodeDriver)
return body
def parse_error(self):
# TODO: fixup, Rackspace only uses response codes really!
try:
body = ET.XML(self.body)
except:
- raise MalformedResponseError("Failed to parse XML", body=self.body, driver=RackspaceNodeDriver)
+ raise MalformedResponseError(
+ "Failed to parse XML",
+ body=self.body, driver=RackspaceNodeDriver)
try:
text = "; ".join([ err.text or ''
for err in
@@ -188,7 +192,8 @@ class RackspaceNodeDriver(NodeDriver):
server_elm = ET.Element('server', body)
- resp = self.connection.request(uri, method='PUT', data=ET.tostring(server_elm))
+ resp = self.connection.request(
+ uri, method='PUT', data=ET.tostring(server_elm))
if resp.status == 204 and password != None:
node.extra['password'] = password
@@ -243,7 +248,8 @@ class RackspaceNodeDriver(NodeDriver):
if files_elm:
server_elm.append(files_elm)
- shared_ip_elm = self._shared_ip_group_to_xml(kwargs.get("ex_shared_ip_group", None))
+ shared_ip_elm = self._shared_ip_group_to_xml(
+ kwargs.get("ex_shared_ip_group", None))
if shared_ip_elm:
server_elm.append(shared_ip_elm)
@@ -414,7 +420,8 @@ class RackspaceNodeDriver(NodeDriver):
n = Node(id=el.get('id'),
name=el.get('name'),
- state=self.NODE_STATE_MAP.get(el.get('status'), NodeState.UNKNOWN),
+ state=self.NODE_STATE_MAP.get(
+ el.get('status'), NodeState.UNKNOWN),
public_ip=public_ip,
private_ip=private_ip,
driver=self.connection.driver,
@@ -423,7 +430,9 @@ class RackspaceNodeDriver(NodeDriver):
'hostId': el.get('hostId'),
'imageId': el.get('imageId'),
'flavorId': el.get('flavorId'),
- 'uri': "https://%s%s/servers/%s" % (self.connection.host, self.connection.request_path, el.get('id')),
+ 'uri': "https://%s%s/servers/%s" % (
+ self.connection.host,
+ self.connection.request_path, el.get('id')),
'metadata': metadata,
})
return n
@@ -461,7 +470,7 @@ class RackspaceNodeDriver(NodeDriver):
rates (for example amount of POST requests per day)
and absolute limits like total amount of available
RAM to be used by servers.
-
+
@return: C{dict} with keys 'rate' and 'absolute'
"""
@@ -506,7 +515,8 @@ class RackspaceNodeDriver(NodeDriver):
def _to_shared_ip_group(self, el):
servers_el = self._findall(el, 'servers')
if servers_el:
- servers = [s.get('id') for s in self._findall(servers_el[0], 'server')]
+ servers = [s.get('id')
+ for s in self._findall(servers_el[0], 'server')]
else:
servers = None
return RackspaceSharedIpGroup(id=el.get('id'),
@@ -515,8 +525,10 @@ class RackspaceNodeDriver(NodeDriver):
def _to_ip_addresses(self, el):
return RackspaceNodeIpAddresses(
- [ip.get('addr') for ip in self._findall(self._findall(el, 'public')[0], 'ip')],
- [ip.get('addr') for ip in self._findall(self._findall(el, 'private')[0], 'ip')]
+ [ip.get('addr') for ip in
+ self._findall(self._findall(el, 'public')[0], 'ip')],
+ [ip.get('addr') for ip in
+ self._findall(self._findall(el, 'private')[0], 'ip')]
)
def _shared_ip_group_to_xml(self, shared_ip_group):
Modified: incubator/libcloud/trunk/libcloud/compute/drivers/slicehost.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/compute/drivers/slicehost.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/compute/drivers/slicehost.py (original)
+++ incubator/libcloud/trunk/libcloud/compute/drivers/slicehost.py Tue Mar 15 19:08:47 2011
@@ -21,22 +21,27 @@ import socket
from xml.etree import ElementTree as ET
from xml.parsers.expat import ExpatError
-from libcloud.common.base import ConnectionUserAndKey, ConnectionKey, Response
-from libcloud.compute.types import NodeState, Provider, InvalidCredsError, MalformedResponseError
+from libcloud.common.base import ConnectionKey, Response
+from libcloud.compute.types import (
+ NodeState, Provider, InvalidCredsError, MalformedResponseError)
from libcloud.compute.base import NodeSize, NodeDriver, NodeImage, NodeLocation
from libcloud.compute.base import Node, is_private_subnet
class SlicehostResponse(Response):
def parse_body(self):
- # length of 1 can't be valid XML, but on destroy node, slicehost returns
- # a 1 byte response with a "Content-Type: application/xml" header. booya.
+ # length of 1 can't be valid XML, but on destroy node,
+ # slicehost returns a 1 byte response with a "Content-Type:
+ # application/xml" header. booya.
if not self.body or len(self.body) <= 1:
return None
try:
body = ET.XML(self.body)
except:
- raise MalformedResponseError("Failed to parse XML", body=self.body, driver=SlicehostNodeDriver)
+ raise MalformedResponseError(
+ "Failed to parse XML",
+ body=self.body,
+ driver=SlicehostNodeDriver)
return body
def parse_error(self):
@@ -46,7 +51,10 @@ class SlicehostResponse(Response):
try:
body = ET.XML(self.body)
except:
- raise MalformedResponseError("Failed to parse XML", body=self.body, driver=SlicehostNodeDriver)
+ raise MalformedResponseError(
+ "Failed to parse XML",
+ body=self.body,
+ driver=SlicehostNodeDriver)
try:
return "; ".join([ err.text
for err in
Modified: incubator/libcloud/trunk/libcloud/compute/providers.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/compute/providers.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/compute/providers.py (original)
+++ incubator/libcloud/trunk/libcloud/compute/providers.py Tue Mar 15 19:08:47 2011
@@ -16,9 +16,12 @@
Provider related utilities
"""
-from libcloud.utils import get_driver as get_provider_driver
+from libcloud.utils import get_driver as _get_provider_driver
from libcloud.compute.types import Provider
-
+__all__ = [
+ "Provider",
+ "DRIVERS",
+ "get_driver"]
DRIVERS = {
Provider.DUMMY:
('libcloud.compute.drivers.dummy', 'DummyNodeDriver'),
@@ -73,4 +76,4 @@ DRIVERS = {
}
def get_driver(provider):
- return get_provider_driver(DRIVERS, provider)
+ return _get_provider_driver(DRIVERS, provider)
Modified: incubator/libcloud/trunk/libcloud/compute/types.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/compute/types.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/compute/types.py (original)
+++ incubator/libcloud/trunk/libcloud/compute/types.py Tue Mar 15 19:08:47 2011
@@ -18,7 +18,18 @@ Base types used by other parts of libclo
from libcloud.common.types import LibcloudError, MalformedResponseError
from libcloud.common.types import InvalidCredsError, InvalidCredsException
-
+__all__ = [
+ "Provider",
+ "NodeState",
+ "DeploymentError",
+ "DeploymentException",
+
+ # @@TR: should the unused imports below be exported?
+ "LibcloudError",
+ "MalformedResponseError",
+ "InvalidCredsError",
+ "InvalidCredsException"
+ ]
class Provider(object):
"""
Defines for each of the supported providers
Modified: incubator/libcloud/trunk/libcloud/deployment.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/deployment.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/deployment.py (original)
+++ incubator/libcloud/trunk/libcloud/deployment.py Tue Mar 15 19:08:47 2011
@@ -14,6 +14,18 @@
# limitations under the License.
from libcloud.utils import deprecated_warning
-from libcloud.compute.deployment import *
+from libcloud.compute.deployment import ( # pylint: disable-msg=W0611
+ Deployment,
+ SSHKeyDeployment,
+ ScriptDeployment,
+ MultiStepDeployment
+ )
+
+__all__ = [
+ "Deployment",
+ "SSHKeyDeployment",
+ "ScriptDeployment",
+ "MultiStepDeployment"
+ ]
deprecated_warning(__name__)
Modified: incubator/libcloud/trunk/libcloud/pricing.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/pricing.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/pricing.py (original)
+++ incubator/libcloud/trunk/libcloud/pricing.py Tue Mar 15 19:08:47 2011
@@ -12,6 +12,7 @@
# 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.
+from __future__ import with_statement
"""
A class which handles loading the pricing files.
"""
Modified: incubator/libcloud/trunk/libcloud/providers.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/providers.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/providers.py (original)
+++ incubator/libcloud/trunk/libcloud/providers.py Tue Mar 15 19:08:47 2011
@@ -14,6 +14,18 @@
# limitations under the License.
from libcloud.utils import deprecated_warning
-from libcloud.compute.providers import *
-
+from libcloud.compute.providers import (
+ DRIVERS,
+ Provider,
+ providers,
+ get_driver,
+ get_provider_driver # @@TR: can this be removed from here?
+ )
+__all__ = [
+ "DRIVERS",
+ "Provider",
+ "providers",
+ "get_driver",
+ "get_provider_driver"
+ ]
deprecated_warning(__name__)
Modified: incubator/libcloud/trunk/libcloud/security.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/security.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/security.py (original)
+++ incubator/libcloud/trunk/libcloud/security.py Tue Mar 15 19:08:47 2011
@@ -42,8 +42,8 @@ CA_CERTS_PATH = [
]
CA_CERTS_UNAVAILABLE_MSG = (
- 'Warning: No CA Certificates were found in CA_CERTS_PATH. '
- 'Toggling VERIFY_SSL_CERT to False.'
+ 'Warning: No CA Certificates were found in CA_CERTS_PATH. '
+ 'Toggling VERIFY_SSL_CERT to False.'
)
VERIFY_SSL_DISABLED_MSG = (
Modified: incubator/libcloud/trunk/libcloud/ssh.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/ssh.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/ssh.py (original)
+++ incubator/libcloud/trunk/libcloud/ssh.py Tue Mar 15 19:08:47 2011
@@ -14,6 +14,17 @@
# limitations under the License.
from libcloud.utils import deprecated_warning
-from libcloud.compute.ssh import *
+from libcloud.compute.ssh import (
+ BaseSSHClient,
+ ParamikoSSHClient,
+ ShellOutSSHClient,
+ SSHClient,
+ have_paramiko)
+__all__ = [
+ "BaseSSHClient",
+ "ParamikoSSHClient",
+ "ShellOutSSHClient",
+ "SSHClient",
+ "have_paramiko"]
deprecated_warning(__name__)
Modified: incubator/libcloud/trunk/libcloud/storage/base.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/storage/base.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/storage/base.py (original)
+++ incubator/libcloud/trunk/libcloud/storage/base.py Tue Mar 15 19:08:47 2011
@@ -17,7 +17,7 @@
from __future__ import with_statement
import os
-import os.path
+import os.path # pylint: disable-msg=W0404
import hashlib
from os.path import join as pjoin
@@ -78,8 +78,8 @@ class Object(object):
return self.driver.delete_object(self)
def __repr__(self):
- return '<Object: name=%s, size=%s, hash=%s, provider=%s ...>' % \
- (self.name, self.size, self.hash, self.driver.name)
+ return ('<Object: name=%s, size=%s, hash=%s, provider=%s ...>' %
+ (self.name, self.size, self.hash, self.driver.name))
class Container(object):
"""
@@ -110,10 +110,12 @@ class Container(object):
object_name=object_name)
def upload_object(self, file_path, object_name, extra=None, file_hash=None):
- return self.driver.upload_object(file_path, self, object_name, extra, file_hash)
+ return self.driver.upload_object(
+ file_path, self, object_name, extra, file_hash)
def upload_object_via_stream(self, iterator, object_name, extra=None):
- return self.driver.upload_object_via_stream(iterator, self, object_name, extra)
+ return self.driver.upload_object_via_stream(
+ iterator, self, object_name, extra)
def download_object(self, obj, destination_path, overwrite_existing=False,
delete_on_failure=True):
@@ -129,7 +131,8 @@ class Container(object):
return self.driver.delete_container(self)
def __repr__(self):
- return '<Container: name=%s, provider=%s>' % (self.name, self.driver.name)
+ return ('<Container: name=%s, provider=%s>'
+ % (self.name, self.driver.name))
class StorageDriver(object):
"""
@@ -169,12 +172,12 @@ class StorageDriver(object):
@return A C{dict} with account meta data.
"""
- raise NotImplementedError, \
- 'get_account_meta_data not implemented for this driver'
+ raise NotImplementedError(
+ 'get_account_meta_data not implemented for this driver')
def list_containters(self):
- raise NotImplementedError, \
- 'list_containers not implemented for this driver'
+ raise NotImplementedError(
+ 'list_containers not implemented for this driver')
def list_container_objects(self, container):
"""
@@ -185,8 +188,8 @@ class StorageDriver(object):
@return A list of Object instances.
"""
- raise NotImplementedError, \
- 'list_objects not implemented for this driver'
+ raise NotImplementedError(
+ 'list_objects not implemented for this driver')
def get_container(self, container_name):
"""
@@ -197,8 +200,8 @@ class StorageDriver(object):
@return: C{Container} instance.
"""
- raise NotImplementedError, \
- 'get_object not implemented for this driver'
+ raise NotImplementedError(
+ 'get_object not implemented for this driver')
def get_object(self, container_name, object_name):
"""
@@ -212,8 +215,8 @@ class StorageDriver(object):
@return: C{Object} instance.
"""
- raise NotImplementedError, \
- 'get_object not implemented for this driver'
+ raise NotImplementedError(
+ 'get_object not implemented for this driver')
def download_object(self, obj, destination_path, delete_on_failure=True):
"""
@@ -236,8 +239,8 @@ class StorageDriver(object):
@return C{bool} True if an object has been successfully downloaded, False
otherwise.
"""
- raise NotImplementedError, \
- 'download_object not implemented for this driver'
+ raise NotImplementedError(
+ 'download_object not implemented for this driver')
def download_object_as_stream(self, obj, chunk_size=None):
"""
@@ -249,8 +252,8 @@ class StorageDriver(object):
@type chunk_size: C{int}
@param chunk_size: Optional chunk size (in bytes).
"""
- raise NotImplementedError, \
- 'download_object_as_stream not implemented for this driver'
+ raise NotImplementedError(
+ 'download_object_as_stream not implemented for this driver')
def upload_object(self, file_path, container, object_name, extra=None,
file_hash=None):
@@ -274,10 +277,12 @@ class StorageDriver(object):
on upload and if it doesn't match the one provided an
exception is thrown.
"""
- raise NotImplementedError, \
- 'upload_object not implemented for this driver'
+ raise NotImplementedError(
+ 'upload_object not implemented for this driver')
- def upload_object_via_stream(self, iterator, container, object_name, extra=None):
+ def upload_object_via_stream(self, iterator, container,
+ object_name,
+ extra=None):
"""
@type iterator: C{object}
@param iterator: An object which implements the iterator interface.
@@ -291,8 +296,8 @@ class StorageDriver(object):
@type extra: C{dict}
@param extra: (optional) Extra attributes (driver specific).
"""
- raise NotImplementedError, \
- 'upload_object_via_stream not implemented for this driver'
+ raise NotImplementedError(
+ 'upload_object_via_stream not implemented for this driver')
def delete_object(self, obj):
"""
@@ -303,8 +308,8 @@ class StorageDriver(object):
@return: C{bool} True on success.
"""
- raise NotImplementedError, \
- 'delete_object not implemented for this driver'
+ raise NotImplementedError(
+ 'delete_object not implemented for this driver')
def create_container(self, container_name):
"""
@@ -315,8 +320,8 @@ class StorageDriver(object):
@return C{Container} instance on success.
"""
- raise NotImplementedError, \
- 'create_container not implemented for this driver'
+ raise NotImplementedError(
+ 'create_container not implemented for this driver')
def delete_container(self, container):
"""
@@ -327,8 +332,8 @@ class StorageDriver(object):
@return C{bool} True on success, False otherwise.
"""
- raise NotImplementedError, \
- 'delete_container not implemented for this driver'
+ raise NotImplementedError(
+ 'delete_container not implemented for this driver')
def _save_object(self, response, obj, destination_path,
overwrite_existing=False, delete_on_failure=True,
@@ -363,8 +368,9 @@ class StorageDriver(object):
base_name = os.path.basename(destination_path)
if not base_name and not os.path.exists(destination_path):
- raise LibcloudError(value='Path %s does not exist' % (destination_path),
- driver=self)
+ raise LibcloudError(
+ value='Path %s does not exist' % (destination_path),
+ driver=self)
if not base_name:
file_path = pjoin(destination_path, obj.name)
@@ -372,9 +378,10 @@ class StorageDriver(object):
file_path = destination_path
if os.path.exists(file_path) and not overwrite_existing:
- raise LibcloudError(value='File %s already exists, but ' % (file_path) +
- 'overwrite_existing=False',
- driver=self)
+ raise LibcloudError(
+ value='File %s already exists, but ' % (file_path) +
+ 'overwrite_existing=False',
+ driver=self)
stream = utils.read_in_chunks(response, chunk_size)
@@ -452,7 +459,11 @@ class StorageDriver(object):
response.connection.connection.send('\r\n')
else:
response.connection.connection.send(chunk)
- except Exception, e:
+ except Exception:
+ # @@TR: this wildcard try/except block looks like it
+ # could mask unexpected errors. It should be narrowed
+ # down to expected exceptions.
+
# Timeout, etc.
return False, None, bytes_transferred
@@ -493,10 +504,11 @@ class StorageDriver(object):
is the number of transferred bytes.
"""
with open (file_path, 'rb') as file_handle:
- success, data_hash, bytes_transferred = \
- self._stream_data(response=response,
- iterator=iter(file_handle),
- chunked=chunked,
- calculate_hash=calculate_hash)
+ success, data_hash, bytes_transferred = (
+ self._stream_data(
+ response=response,
+ iterator=iter(file_handle),
+ chunked=chunked,
+ calculate_hash=calculate_hash))
return success, data_hash, bytes_transferred
Modified: incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py (original)
+++ incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py Tue Mar 15 19:08:47 2011
@@ -14,7 +14,6 @@
# limitations under the License.
import httplib
-import urlparse
import os.path
import urllib
@@ -25,8 +24,7 @@ except:
from libcloud import utils
from libcloud.common.types import MalformedResponseError, LibcloudError
-from libcloud.common.types import InvalidCredsError
-from libcloud.common.base import ConnectionUserAndKey, Response
+from libcloud.common.base import Response
from libcloud.storage.providers import Provider
from libcloud.storage.base import Object, Container, StorageDriver
@@ -37,7 +35,8 @@ from libcloud.storage.types import Objec
from libcloud.storage.types import ObjectHashMismatchError
from libcloud.storage.types import InvalidContainerNameError
-from libcloud.common.rackspace import AUTH_HOST_US, AUTH_HOST_UK, RackspaceBaseConnection
+from libcloud.common.rackspace import (
+ AUTH_HOST_US, AUTH_HOST_UK, RackspaceBaseConnection)
API_VERSION = 'v1.0'
@@ -145,9 +144,12 @@ class CloudFilesStorageDriver(StorageDri
response = self.connection.request('', method='HEAD')
if response.status == httplib.NO_CONTENT:
- container_count = response.headers.get('x-account-container-count', 'unknown')
- object_count = response.headers.get('x-account-object-count', 'unknown')
- bytes_used = response.headers.get('x-account-bytes-used', 'unknown')
+ container_count = response.headers.get(
+ 'x-account-container-count', 'unknown')
+ object_count = response.headers.get(
+ 'x-account-object-count', 'unknown')
+ bytes_used = response.headers.get(
+ 'x-account-bytes-used', 'unknown')
return { 'container_count': int(container_count),
'object_count': int(object_count),
@@ -181,7 +183,8 @@ class CloudFilesStorageDriver(StorageDri
method='HEAD')
if response.status == httplib.NO_CONTENT:
- container = self._headers_to_container(container_name, response.headers)
+ container = self._headers_to_container(
+ container_name, response.headers)
return container
elif response.status == httplib.NOT_FOUND:
raise ContainerDoesNotExistError(None, self, container_name)
@@ -195,7 +198,8 @@ class CloudFilesStorageDriver(StorageDri
method='HEAD')
if response.status in [ httplib.OK, httplib.NO_CONTENT ]:
- obj = self._headers_to_object(object_name, container, response.headers)
+ obj = self._headers_to_object(
+ object_name, container, response.headers)
return obj
elif response.status == httplib.NOT_FOUND:
raise ObjectDoesNotExistError(None, self, object_name)
@@ -204,7 +208,8 @@ class CloudFilesStorageDriver(StorageDri
def create_container(self, container_name):
container_name = self._clean_container_name(container_name)
- response = self.connection.request('/%s' % (container_name), method='PUT')
+ response = self.connection.request(
+ '/%s' % (container_name), method='PUT')
if response.status == httplib.CREATED:
# Accepted mean that container is not yet created but it will be
@@ -262,7 +267,8 @@ class CloudFilesStorageDriver(StorageDri
upload_func=upload_func,
upload_func_args=upload_func_args)
- def upload_object_via_stream(self, iterator, container, object_name, extra=None):
+ def upload_object_via_stream(self, iterator,
+ container, object_name, extra=None):
if isinstance(iterator, file):
iterator = iter(iterator)
@@ -278,8 +284,8 @@ class CloudFilesStorageDriver(StorageDri
container_name = self._clean_container_name(obj.container.name)
object_name = self._clean_object_name(obj.name)
- response = self.connection.request('/%s/%s' % (container_name,
- object_name), method='DELETE')
+ response = self.connection.request(
+ '/%s/%s' % (container_name, object_name), method='DELETE')
if response.status == httplib.NO_CONTENT:
return True
@@ -302,7 +308,10 @@ class CloudFilesStorageDriver(StorageDri
if response.status == httplib.OK:
return callback(**callback_args)
elif response.status == httplib.NOT_FOUND:
- raise ObjectDoesNotExistError(name=object_name)
+ raise ObjectDoesNotExistError(
+ object_name=object_name,
+ driver=self,
+ value='')
raise LibcloudError('Unexpected status code: %s' % (response.status))
@@ -323,8 +332,9 @@ class CloudFilesStorageDriver(StorageDri
content_type, _ = utils.guess_file_mime_type(name)
if not content_type:
- raise AttributeError('File content-type could not be guessed and' +
- ' no content_type value provided')
+ raise AttributeError(
+ 'File content-type could not be guessed and' +
+ ' no content_type value provided')
headers = {}
if iterator:
@@ -361,12 +371,14 @@ class CloudFilesStorageDriver(StorageDri
if response.status == httplib.EXPECTATION_FAILED:
raise LibcloudError('Missing content-type header')
elif response.status == httplib.UNPROCESSABLE_ENTITY:
- raise ObjectHashMismatchError(value='MD5 hash checksum does not match',
- object_name=object_name, driver=self)
+ raise ObjectHashMismatchError(
+ value='MD5 hash checksum does not match',
+ object_name=object_name, driver=self)
elif response.status == httplib.CREATED:
- obj = Object(name=object_name, size=bytes_transferred, hash=file_hash,
- extra=None, meta_data=meta_data, container=container,
- driver=self)
+ obj = Object(
+ name=object_name, size=bytes_transferred, hash=file_hash,
+ extra=None, meta_data=meta_data, container=container,
+ driver=self)
return obj
@@ -416,8 +428,9 @@ class CloudFilesStorageDriver(StorageDri
hash = obj['hash']
extra = { 'content_type': obj['content_type'],
'last_modified': obj['last_modified'] }
- objects.append(Object(name=name, size=size, hash=hash, extra=extra,
- meta_data=None, container=container, driver=self))
+ objects.append(Object(
+ name=name, size=size, hash=hash, extra=extra,
+ meta_data=None, container=container, driver=self))
return objects
Modified: incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py (original)
+++ incubator/libcloud/trunk/libcloud/storage/drivers/dummy.py Tue Mar 15 19:08:47 2011
@@ -47,18 +47,19 @@ class DummyFileObject(file):
return self._yield_count * self._chunk_len
class DummyIterator(object):
- def __init__(self, data=None):
- self._data = data or []
- self._current_item = 0
-
- def next(self):
- if self._current_item == len(self._data):
- raise StopIteration
-
- value = self._data[self._current_item]
- self._current_item += 1
- return value
+ def __init__(self, data=None):
+ self._data = data or []
+ self._current_item = 0
+
+ def next(self):
+ if self._current_item == len(self._data):
+ raise StopIteration
+
+ value = self._data[self._current_item]
+ self._current_item += 1
+ return value
+# @@FIX: the doctests below are not run by the main test suite
class DummyStorageDriver(StorageDriver):
"""
Dummy Storage driver.
@@ -86,7 +87,8 @@ class DummyStorageDriver(StorageDriver):
{'object_count': 0, 'container_count': 0, 'bytes_used': 0}
>>> container = driver.create_container(container_name='test container 1')
>>> container = driver.create_container(container_name='test container 2')
- >>> obj = container.upload_object_via_stream(object_name='test object', iterator=DummyFileObject(5, 10), extra={})
+ >>> obj = container.upload_object_via_stream(
+ ... object_name='test object', iterator=DummyFileObject(5, 10), extra={})
>>> driver.get_meta_data()
{'object_count': 1, 'container_count': 2, 'bytes_used': 50}
"""
@@ -118,7 +120,8 @@ class DummyStorageDriver(StorageDriver):
>>> container = driver.create_container(container_name='test container 2')
>>> container
<Container: name=test container 2, provider=Dummy Storage Provider>
- >>> container = driver.create_container(container_name='test container 2') #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> container = driver.create_container(
+ ... container_name='test container 2') #doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
ContainerAlreadyExistsError:
>>> container_list=driver.list_containers()
@@ -150,29 +153,31 @@ class DummyStorageDriver(StorageDriver):
"""
if container_name not in self._containers:
- raise ContainerDoesNotExistError(driver=self, value=None,
- container_name=container_name)
+ raise ContainerDoesNotExistError(driver=self, value=None,
+ container_name=container_name)
return self._containers[container_name]['container']
def get_object(self, container_name, object_name):
"""
- >>> driver = DummyStorageDriver('key', 'secret')
- >>> driver.get_object('unknown', 'unknown') #doctest: +IGNORE_EXCEPTION_DETAIL
- Traceback (most recent call last):
- ContainerDoesNotExistError:
- >>> container = driver.create_container(container_name='test container 1')
- >>> container
- <Container: name=test container 1, provider=Dummy Storage Provider>
- >>> driver.get_object('test container 1', 'unknown') #doctest: +IGNORE_EXCEPTION_DETAIL
- Traceback (most recent call last):
- ObjectDoesNotExistError:
- >>> obj = container.upload_object_via_stream(object_name='test object', iterator=DummyFileObject(5, 10), extra={})
- >>> obj
- <Object: name=test object, size=50, hash=None, provider=Dummy Storage Provider ...>
+ >>> driver = DummyStorageDriver('key', 'secret')
+ >>> driver.get_object('unknown', 'unknown') #doctest: +IGNORE_EXCEPTION_DETAIL
+ Traceback (most recent call last):
+ ContainerDoesNotExistError:
+ >>> container = driver.create_container(container_name='test container 1')
+ >>> container
+ <Container: name=test container 1, provider=Dummy Storage Provider>
+ >>> driver.get_object(
+ ... 'test container 1', 'unknown') #doctest: +IGNORE_EXCEPTION_DETAIL
+ Traceback (most recent call last):
+ ObjectDoesNotExistError:
+ >>> obj = container.upload_object_via_stream(object_name='test object',
+ ... iterator=DummyFileObject(5, 10), extra={})
+ >>> obj
+ <Object: name=test object, size=50, hash=None, provider=Dummy Storage Provider ...>
"""
- container = self.get_container(container_name)
+ self.get_container(container_name)
container_objects = self._containers[container_name]['objects']
if object_name not in container_objects:
@@ -187,7 +192,8 @@ class DummyStorageDriver(StorageDriver):
>>> container = driver.create_container(container_name='test container 1')
>>> container
<Container: name=test container 1, provider=Dummy Storage Provider>
- >>> container = driver.create_container(container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> container = driver.create_container(
+ ... container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
ContainerAlreadyExistsError:
"""
@@ -207,52 +213,58 @@ class DummyStorageDriver(StorageDriver):
def delete_container(self, container):
"""
>>> driver = DummyStorageDriver('key', 'secret')
- >>> container = Container(name = 'test container', extra={'object_count': 0}, driver=driver)
- >>> driver.delete_container(container=container) #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> container = Container(name = 'test container',
+ ... extra={'object_count': 0}, driver=driver)
+ >>> driver.delete_container(container=container)#doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
ContainerDoesNotExistError:
- >>> container = driver.create_container(container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> container = driver.create_container(
+ ... container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
>>> len(driver._containers)
1
>>> driver.delete_container(container=container)
True
>>> len(driver._containers)
0
- >>> container = driver.create_container(container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
- >>> obj = container.upload_object_via_stream(object_name='test object', iterator=DummyFileObject(5, 10), extra={})
- >>> driver.delete_container(container=container) #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> container = driver.create_container(
+ ... container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> obj = container.upload_object_via_stream(
+ ... object_name='test object', iterator=DummyFileObject(5, 10), extra={})
+ >>> driver.delete_container(container=container)#doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
ContainerIsNotEmptyError:
"""
container_name = container.name
if container_name not in self._containers:
- raise ContainerDoesNotExistError(container_name=container_name,
- value=None, driver=self)
+ raise ContainerDoesNotExistError(container_name=container_name,
+ value=None, driver=self)
container = self._containers[container_name]
if len(container['objects']) > 0:
- raise ContainerIsNotEmptyError(container_name=container_name,
- value=None, driver=self)
+ raise ContainerIsNotEmptyError(container_name=container_name,
+ value=None, driver=self)
del self._containers[container_name]
return True
def download_object(self, obj, destination_path, overwrite_existing=False,
delete_on_failure=True):
- kwargs_dict = {'obj': obj,
- 'response': DummyFileObject(),
- 'destination_path': destination_path,
- 'overwrite_existing': overwrite_existing,
- 'delete_on_failure': delete_on_failure}
+ kwargs_dict = {'obj': obj,
+ 'response': DummyFileObject(),
+ 'destination_path': destination_path,
+ 'overwrite_existing': overwrite_existing,
+ 'delete_on_failure': delete_on_failure}
- return self._save_object(**kwargs_dict)
+ return self._save_object(**kwargs_dict)
def download_object_as_stream(self, obj, chunk_size=None):
"""
>>> driver = DummyStorageDriver('key', 'secret')
- >>> container = driver.create_container(container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
- >>> obj = container.upload_object_via_stream(object_name='test object', iterator=DummyFileObject(5, 10), extra={})
+ >>> container = driver.create_container(
+ ... container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> obj = container.upload_object_via_stream(object_name='test object',
+ ... iterator=DummyFileObject(5, 10), extra={})
>>> stream = container.download_object_as_stream(obj)
>>> stream #doctest: +ELLIPSIS
<closed file '<uninitialized file>', mode '<uninitialized file>' at 0x...>
@@ -265,7 +277,8 @@ class DummyStorageDriver(StorageDriver):
"""
>>> driver = DummyStorageDriver('key', 'secret')
>>> container = driver.create_container(container_name='test container 1')
- >>> container.upload_object(file_path='/tmp/inexistent.file', object_name='test') #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> container.upload_object(file_path='/tmp/inexistent.file',
+ ... object_name='test') #doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
LibcloudError:
>>> file_path = path = os.path.abspath(__file__)
@@ -285,11 +298,14 @@ class DummyStorageDriver(StorageDriver):
return self._add_object(container=container, object_name=object_name,
size=size, extra=extra)
- def upload_object_via_stream(self, iterator, container, object_name, extra=None):
+ def upload_object_via_stream(self, iterator, container,
+ object_name, extra=None):
"""
>>> driver = DummyStorageDriver('key', 'secret')
- >>> container = driver.create_container(container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
- >>> obj = container.upload_object_via_stream(object_name='test object', iterator=DummyFileObject(5, 10), extra={})
+ >>> container = driver.create_container(
+ ... container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> obj = container.upload_object_via_stream(
+ ... object_name='test object', iterator=DummyFileObject(5, 10), extra={})
>>> obj #doctest: +ELLIPSIS
<Object: name=test object, size=50, ...>
"""
@@ -301,13 +317,17 @@ class DummyStorageDriver(StorageDriver):
def delete_object(self, obj):
"""
>>> driver = DummyStorageDriver('key', 'secret')
- >>> container = driver.create_container(container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
- >>> obj = container.upload_object_via_stream(object_name='test object', iterator=DummyFileObject(5, 10), extra={})
+ >>> container = driver.create_container(
+ ... container_name='test container 1') #doctest: +IGNORE_EXCEPTION_DETAIL
+ >>> obj = container.upload_object_via_stream(object_name='test object',
+ ... iterator=DummyFileObject(5, 10), extra={})
>>> obj #doctest: +ELLIPSIS
<Object: name=test object, size=50, ...>
>>> container.delete_object(obj=obj)
True
- >>> obj = Object(name='test object 2', size=1000, hash=None, extra=None, meta_data=None, container=container,driver=None)
+ >>> obj = Object(name='test object 2',
+ ... size=1000, hash=None, extra=None,
+ ... meta_data=None, container=container,driver=None)
>>> container.delete_object(obj=obj) #doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
ObjectDoesNotExistError:
Modified: incubator/libcloud/trunk/libcloud/storage/types.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/storage/types.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/storage/types.py (original)
+++ incubator/libcloud/trunk/libcloud/storage/types.py Tue Mar 15 19:08:47 2011
@@ -15,6 +15,16 @@
from libcloud.common.types import LibcloudError
+__all__ = ['Provider',
+ 'ContainerError',
+ 'ObjectError',
+ 'ContainerAlreadyExistsError',
+ 'ContainerDoesNotExistError',
+ 'ContainerIsNotEmptyError',
+ 'ObjectDoesNotExistError',
+ 'ObjectHashMismatchError',
+ 'InvalidContainerNameError']
+
class Provider(object):
"""
Defines for each of the supported providers
@@ -35,8 +45,9 @@ class ContainerError(LibcloudError):
super(ContainerError, self).__init__(value=value, driver=driver)
def __str__(self):
- return '<%s in %s, container = %s>' % (self.error_type, repr(self.driver),
- self.container_name)
+ return ('<%s in %s, container = %s>' %
+ (self.error_type, repr(self.driver),
+ self.container_name))
class ObjectError(LibcloudError):
error_type = 'ContainerError'
Modified: incubator/libcloud/trunk/libcloud/types.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/types.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/types.py (original)
+++ incubator/libcloud/trunk/libcloud/types.py Tue Mar 15 19:08:47 2011
@@ -20,4 +20,9 @@ from libcloud.compute.types import Deplo
from libcloud.utils import deprecated_warning
+__all__ = ["LibcloudError", "MalformedResponseError",
+ "InvalidCredsError", "InvalidCredsException",
+ "Provider", "NodeState", "DeploymentError",
+ "DeploymentException"
+ ]
deprecated_warning(__name__)
Modified: incubator/libcloud/trunk/libcloud/utils.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/utils.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/utils.py (original)
+++ incubator/libcloud/trunk/libcloud/utils.py Tue Mar 15 19:08:47 2011
@@ -56,10 +56,10 @@ def guess_file_mime_type(file_path):
def deprecated_warning(module):
if SHOW_DEPRECATION_WARNING:
warnings.warn('This path has been deprecated and the module'
- ' is now available at "libcloud.compute.%s".'
- ' This path will be fully removed in libcloud %s.' % \
- (module, OLD_API_REMOVE_VERSION),
- category=DeprecationWarning)
+ ' is now available at "libcloud.compute.%s".'
+ ' This path will be fully removed in libcloud %s.' %
+ (module, OLD_API_REMOVE_VERSION),
+ category=DeprecationWarning)
def str2dicts(data):
"""
Modified: incubator/libcloud/trunk/setup.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/setup.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/setup.py (original)
+++ incubator/libcloud/trunk/setup.py Tue Mar 15 19:08:47 2011
@@ -34,7 +34,7 @@ class TestCommand(Command):
THIS_DIR = os.path.abspath(os.path.split(__file__)[0])
sys.path.insert(0, THIS_DIR)
for test_path in TEST_PATHS:
- sys.path.insert(0, pjoin(THIS_DIR, test_path))
+ sys.path.insert(0, pjoin(THIS_DIR, test_path))
self._dir = os.getcwd()
def finalize_options(self):
@@ -59,11 +59,13 @@ class TestCommand(Command):
# test for dependencies
try:
import simplejson
+ simplejson # silence pyflakes
except ImportError:
missing.append("simplejson")
try:
import ssl
+ ssl # silence pyflakes
except ImportError:
missing.append("ssl")
@@ -73,10 +75,9 @@ class TestCommand(Command):
testfiles = []
for test_path in TEST_PATHS:
- for t in glob(pjoin(self._dir, test_path, 'test_*.py')):
- testfiles.append('.'.join(
- [test_path.replace('/', '.'), splitext(basename(t))[0]])
- )
+ for t in glob(pjoin(self._dir, test_path, 'test_*.py')):
+ testfiles.append('.'.join(
+ [test_path.replace('/', '.'), splitext(basename(t))[0]]))
tests = TestLoader().loadTestsFromNames(testfiles)
t = TextTestRunner(verbosity = 2)
Modified: incubator/libcloud/trunk/test/__init__.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/test/__init__.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/test/__init__.py (original)
+++ incubator/libcloud/trunk/test/__init__.py Tue Mar 15 19:08:47 2011
@@ -18,8 +18,6 @@ from cStringIO import StringIO
from urllib2 import urlparse
from cgi import parse_qs
-from libcloud.common.base import RawResponse
-
class multipleresponse(object):
"""
A decorator that allows MockHttp objects to return multi responses
Modified: incubator/libcloud/trunk/test/compute/__init__.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/test/compute/__init__.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/test/compute/__init__.py (original)
+++ incubator/libcloud/trunk/test/compute/__init__.py Tue Mar 15 19:08:47 2011
@@ -13,11 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import httplib
-from cStringIO import StringIO
-from urllib2 import urlparse
-from cgi import parse_qs
-
from libcloud.compute.base import Node, NodeImage, NodeLocation
class TestCaseMixin(object):
Modified: incubator/libcloud/trunk/test/compute/test_base.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/test/compute/test_base.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/test/compute/test_base.py (original)
+++ incubator/libcloud/trunk/test/compute/test_base.py Tue Mar 15 19:08:47 2011
@@ -19,7 +19,7 @@ from libcloud.common.base import Respons
from libcloud.common.base import ConnectionKey, ConnectionUserAndKey
from libcloud.compute.base import Node, NodeSize, NodeImage, NodeDriver
-from test import MockResponse
+from test import MockResponse # pylint: disable-msg=E0611
class FakeDriver(object):
type = 0
@@ -27,57 +27,27 @@ class FakeDriver(object):
class BaseTests(unittest.TestCase):
def test_base_node(self):
- node = Node(id=0, name=0, state=0, public_ip=0, private_ip=0,
- driver=FakeDriver())
+ Node(id=0, name=0, state=0, public_ip=0, private_ip=0,
+ driver=FakeDriver())
def test_base_node_size(self):
- node_size = NodeSize(id=0, name=0, ram=0, disk=0, bandwidth=0, price=0,
- driver=FakeDriver())
+ NodeSize(id=0, name=0, ram=0, disk=0, bandwidth=0, price=0,
+ driver=FakeDriver())
def test_base_node_image(self):
- node_image = NodeImage(id=0, name=0, driver=FakeDriver())
+ NodeImage(id=0, name=0, driver=FakeDriver())
def test_base_response(self):
- resp = Response(MockResponse(status=200, body='foo'))
+ Response(MockResponse(status=200, body='foo'))
def test_base_node_driver(self):
- node_driver = NodeDriver('foo')
+ NodeDriver('foo')
def test_base_connection_key(self):
- conn = ConnectionKey('foo')
+ ConnectionKey('foo')
def test_base_connection_userkey(self):
- conn = ConnectionUserAndKey('foo', 'bar')
-
-# def test_drivers_interface(self):
-# failures = []
-# for driver in DRIVERS:
-# creds = ProviderCreds(driver, 'foo', 'bar')
-# try:
-# verifyObject(INodeDriver, get_driver(driver)(creds))
-# except BrokenImplementation:
-# failures.append(DRIVERS[driver][1])
-#
-# if failures:
-# self.fail('the following drivers do not support the \
-# INodeDriver interface: %s' % (', '.join(failures)))
-
-# def test_invalid_creds(self):
-# failures = []
-# for driver in DRIVERS:
-# if driver == Provider.DUMMY:
-# continue
-# conn = connect(driver, 'bad', 'keys')
-# try:
-# conn.list_nodes()
-# except InvalidCredsException:
-# pass
-# else:
-# failures.append(DRIVERS[driver][1])
-#
-# if failures:
-# self.fail('the following drivers did not throw an \
-# InvalidCredsException: %s' % (', '.join(failures)))
+ ConnectionUserAndKey('foo', 'bar')
if __name__ == '__main__':
sys.exit(unittest.main())
Modified: incubator/libcloud/trunk/test/compute/test_cloudsigma.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/test/compute/test_cloudsigma.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/test/compute/test_cloudsigma.py (original)
+++ incubator/libcloud/trunk/test/compute/test_cloudsigma.py Tue Mar 15 19:08:47 2011
@@ -21,9 +21,9 @@ from libcloud.compute.base import Node
from libcloud.compute.drivers.cloudsigma import CloudSigmaZrhNodeDriver
from libcloud.utils import str2dicts, str2list, dict2str
-from test import MockHttp
-from test.compute import TestCaseMixin
-from test.file_fixtures import ComputeFileFixtures
+from test import MockHttp # pylint: disable-msg=E0611
+from test.compute import TestCaseMixin # pylint: disable-msg=E0611
+from test.file_fixtures import ComputeFileFixtures # pylint: disable-msg=E0611
class CloudSigmaTestCase(unittest.TestCase, TestCaseMixin):
@@ -72,12 +72,13 @@ class CloudSigmaTestCase(unittest.TestCa
def test_destroy_node(self):
node = self.driver.list_nodes()[0]
self.assertTrue(self.driver.destroy_node(node))
- nodes = self.driver.list_nodes()
+ self.driver.list_nodes()
def test_create_node(self):
size = self.driver.list_sizes()[0]
image = self.driver.list_images()[0]
- node = self.driver.create_node(name = "cloudsigma node", image = image, size = size)
+ node = self.driver.create_node(
+ name="cloudsigma node", image=image, size = size)
self.assertTrue(isinstance(node, Node))
def test_ex_static_ip_list(self):
@@ -99,7 +100,9 @@ class CloudSigmaTestCase(unittest.TestCa
self.assertEqual(len(result), 2)
def test_ex_drive_destroy(self):
- result = self.driver.ex_drive_destroy('d18119ce_7afa_474a_9242_e0384b160220')
+ result = self.driver.ex_drive_destroy(
+ # @@TR: this should be soft-coded:
+ 'd18119ce_7afa_474a_9242_e0384b160220')
self.assertTrue(result)
def test_ex_set_node_configuration(self):
@@ -135,20 +138,31 @@ class CloudSigmaHttp(MockHttp):
body = self.fixtures.load('drives_standard_info.txt')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
- def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_start(self, method, url, body, headers):
+ def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_start(
+ self, method, url, body, headers):
+
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
- def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_stop(self, method, url, body, headers):
+ def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_stop(
+ self, method, url, body, headers):
+
return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.OK])
- def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_destroy(self, method, url, body, headers):
- return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT])
+ def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_destroy(
+ self, method, url, body, headers):
+
+ return (httplib.NO_CONTENT,
+ body, {}, httplib.responses[httplib.NO_CONTENT])
+
+ def _drives_d18119ce_7afa_474a_9242_e0384b160220_clone(
+ self, method, url, body, headers):
- def _drives_d18119ce_7afa_474a_9242_e0384b160220_clone(self, method, url, body, headers):
body = self.fixtures.load('drives_clone.txt')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
- def _drives_a814def5_1789_49a0_bf88_7abe7bb1682a_info(self, method, url, body, headers):
+ def _drives_a814def5_1789_49a0_bf88_7abe7bb1682a_info(
+ self, method, url, body, headers):
+
body = self.fixtures.load('drives_single_info.txt')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
@@ -175,10 +189,14 @@ class CloudSigmaHttp(MockHttp):
def _resources_ip_1_2_3_4_destroy(self, method, url, body, headers):
return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.OK])
- def _drives_d18119ce_7afa_474a_9242_e0384b160220_destroy(self, method, url, body, headers):
+ def _drives_d18119ce_7afa_474a_9242_e0384b160220_destroy(
+ self, method, url, body, headers):
+
return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.OK])
- def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_set(self, method, url, body, headers):
+ def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_set(
+ self, method, url, body, headers):
+
body = self.fixtures.load('servers_set.txt')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
Modified: incubator/libcloud/trunk/test/compute/test_gogrid.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/test/compute/test_gogrid.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/test/compute/test_gogrid.py (original)
+++ incubator/libcloud/trunk/test/compute/test_gogrid.py Tue Mar 15 19:08:47 2011
@@ -17,18 +17,13 @@ import sys
import unittest
import urlparse
-try:
- import json
-except ImportError:
- import simplejson as json
-
from libcloud.common.types import LibcloudError, InvalidCredsError
from libcloud.compute.drivers.gogrid import GoGridNodeDriver, GoGridIpAddress
from libcloud.compute.base import Node, NodeImage, NodeSize, NodeLocation
-from test import MockHttp
-from test.compute import TestCaseMixin
-from test.file_fixtures import ComputeFileFixtures
+from test import MockHttp # pylint: disable-msg=E0611
+from test.compute import TestCaseMixin # pylint: disable-msg=E0611
+from test.file_fixtures import ComputeFileFixtures # pylint: disable-msg=E0611
class GoGridTests(unittest.TestCase, TestCaseMixin):
@@ -37,11 +32,21 @@ class GoGridTests(unittest.TestCase, Tes
GoGridMockHttp.type = None
self.driver = GoGridNodeDriver("foo", "bar")
+ def _get_test_512Mb_node_size(self):
+ return NodeSize(id='512Mb',
+ name=None,
+ ram=None,
+ disk=None,
+ bandwidth=None,
+ price=None,
+ driver=self.driver)
+
def test_create_node(self):
image = NodeImage(1531, None, self.driver)
- size = NodeSize('512Mb', None, None, None, None, None, driver=self.driver)
-
- node = self.driver.create_node(name='test1', image=image, size=size)
+ node = self.driver.create_node(
+ name='test1',
+ image=image,
+ size=self._get_test_512Mb_node_size())
self.assertEqual(node.name, 'test1')
self.assertTrue(node.id is not None)
self.assertEqual(node.extra['password'], 'bebebe')
@@ -73,7 +78,7 @@ class GoGridTests(unittest.TestCase, Tes
def test_malformed_reply(self):
GoGridMockHttp.type = 'FAIL'
try:
- images = self.driver.list_images()
+ self.driver.list_images()
except LibcloudError, e:
self.assertTrue(isinstance(e, LibcloudError))
else:
@@ -82,7 +87,7 @@ class GoGridTests(unittest.TestCase, Tes
def test_invalid_creds(self):
GoGridMockHttp.type = 'FAIL'
try:
- nodes = self.driver.list_nodes()
+ self.driver.list_nodes()
except InvalidCredsError, e:
self.assertTrue(e.driver is not None)
self.assertEqual(e.driver.name, self.driver.name)
@@ -93,9 +98,10 @@ class GoGridTests(unittest.TestCase, Tes
GoGridMockHttp.type = 'NOPUBIPS'
try:
image = NodeImage(1531, None, self.driver)
- size = NodeSize('512Mb', None, None, None, None, None, driver=self.driver)
-
- node = self.driver.create_node(name='test1', image=image, size=size)
+ self.driver.create_node(
+ name='test1',
+ image=image,
+ size=self._get_test_512Mb_node_size())
except LibcloudError, e:
self.assertTrue(isinstance(e, LibcloudError))
self.assertTrue(e.driver is not None)
@@ -126,9 +132,10 @@ class GoGridTests(unittest.TestCase, Tes
self.assertTrue(isinstance(ret, NodeImage))
def test_ex_edit_node(self):
- node = Node(90967, None, None, None, None, self.driver)
- size = NodeSize('512Mb', None, None, None, None, None, driver=self.driver)
- ret = self.driver.ex_edit_node(node=node, size=size)
+ node = Node(id=90967, name=None, state=None,
+ public_ip=None, private_ip=None, driver=self.driver)
+ ret = self.driver.ex_edit_node(node=node,
+ size=self._get_test_512Mb_node_size())
self.assertTrue(isinstance(ret, Node))
@@ -177,7 +184,8 @@ class GoGridMockHttp(MockHttp):
_api_grid_server_list_NOPUBIPS = _api_grid_server_list
def _api_grid_server_list_FAIL(self, method, url, body, headers):
- return (httplib.FORBIDDEN, "123", {}, httplib.responses[httplib.FORBIDDEN])
+ return (httplib.FORBIDDEN,
+ "123", {}, httplib.responses[httplib.FORBIDDEN])
def _api_grid_ip_list(self, method, url, body, headers):
body = self.fixtures.load('ip_list.json')
Modified: incubator/libcloud/trunk/test/compute/test_softlayer.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/test/compute/test_softlayer.py?rev=1081909&r1=1081908&r2=1081909&view=diff
==============================================================================
--- incubator/libcloud/trunk/test/compute/test_softlayer.py (original)
+++ incubator/libcloud/trunk/test/compute/test_softlayer.py Tue Mar 15 19:08:47 2011
@@ -23,11 +23,10 @@ import xmlrpclib
from libcloud.compute.drivers.softlayer import SoftLayerNodeDriver as SoftLayer
from libcloud.compute.types import NodeState
-from test import MockHttp
-from test.compute import TestCaseMixin
-from test.file_fixtures import ComputeFileFixtures
-
-from test.secrets import SOFTLAYER_USER, SOFTLAYER_APIKEY
+from test import MockHttp # pylint: disable-msg=E0611
+from test.file_fixtures import ComputeFileFixtures # pylint: disable-msg=E0611
+from test.secrets import ( # pylint: disable-msg=E0611
+ SOFTLAYER_USER, SOFTLAYER_APIKEY)
class MockSoftLayerTransport(xmlrpclib.Transport):
@@ -43,7 +42,8 @@ class MockSoftLayerTransport(xmlrpclib.T
class SoftLayerTests(unittest.TestCase):
def setUp(self):
- SoftLayer.connectionCls.proxyCls.transportCls = [MockSoftLayerTransport, MockSoftLayerTransport]
+ SoftLayer.connectionCls.proxyCls.transportCls = [
+ MockSoftLayerTransport, MockSoftLayerTransport]
self.driver = SoftLayer(SOFTLAYER_USER, SOFTLAYER_APIKEY)
def test_list_nodes(self):
@@ -71,12 +71,17 @@ class SoftLayerTests(unittest.TestCase):
class SoftLayerMockHttp(MockHttp):
fixtures = ComputeFileFixtures('softlayer')
- def _xmlrpc_v3_SoftLayer_Account_getVirtualGuests(self, method, url, body, headers):
+ def _xmlrpc_v3_SoftLayer_Account_getVirtualGuests(
+ self, method, url, body, headers):
+
body = self.fixtures.load('v3_SoftLayer_Account_getVirtualGuests.xml')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
- def _xmlrpc_v3_SoftLayer_Location_Datacenter_getDatacenters(self, method, url, body, headers):
- body = self.fixtures.load('v3_SoftLayer_Location_Datacenter_getDatacenters.xml')
+ def _xmlrpc_v3_SoftLayer_Location_Datacenter_getDatacenters(
+ self, method, url, body, headers):
+
+ body = self.fixtures.load(
+ 'v3_SoftLayer_Location_Datacenter_getDatacenters.xml')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
if __name__ == '__main__':