[pkg-eucalyptus-commits] [SCM] managing cloud instances for Eucalyptus branch, master, updated. 3.0.0-alpha3-257-g1da8e3a
Garrett Holmstrom
gholms at fedoraproject.org
Sun Jun 16 02:30:05 UTC 2013
The following commit has been merged in the master branch:
commit ce778cc004262903b0e9d07c7dd474266b20319b
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date: Wed Feb 13 15:12:51 2013 -0800
Change ServerError -> AWSError
diff --git a/euca2ools/commands/euare/__init__.py b/euca2ools/commands/euare/__init__.py
index 9ec120e..f601ed7 100644
--- a/euca2ools/commands/euare/__init__.py
+++ b/euca2ools/commands/euare/__init__.py
@@ -28,6 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+from euca2ools.exceptions import AWSError
from requestbuilder import Arg, SERVICE
import requestbuilder.auth
import requestbuilder.service
@@ -40,6 +41,10 @@ class Euare(requestbuilder.service.BaseService):
AUTH_CLASS = requestbuilder.auth.QuerySigV2Auth
URL_ENVVAR = 'EUARE_URL'
+ def handle_http_error(self, response):
+ raise AWSError(response)
+
+
class EuareRequest(Euca2oolsQueryRequest):
SERVICE_CLASS = Euare
ARGS = [Arg('-U', '--url', dest='url', metavar='URL', route_to=SERVICE,
diff --git a/euca2ools/commands/euca/__init__.py b/euca2ools/commands/euca/__init__.py
index 7d808ff..9e39910 100644
--- a/euca2ools/commands/euca/__init__.py
+++ b/euca2ools/commands/euca/__init__.py
@@ -29,6 +29,7 @@
# POSSIBILITY OF SUCH DAMAGE.
import argparse
+from euca2ools.exceptions import AWSError
from operator import itemgetter
import os.path
from requestbuilder import Arg, MutuallyExclusiveArgList, AUTH, SERVICE
@@ -105,6 +106,7 @@ class EC2CompatibleQuerySigV2Auth(QuerySigV2Auth):
if not self.args.get('secret_key'):
raise AuthError('missing secret key')
+
class Eucalyptus(requestbuilder.service.BaseService):
NAME = 'ec2'
DESCRIPTION = 'Eucalyptus compute cloud service'
@@ -156,6 +158,9 @@ class Eucalyptus(requestbuilder.service.BaseService):
self.auth.args['shell_configfile'] = self.args['shell_configfile']
self.auth.configure()
+ def handle_http_error(self, response):
+ raise AWSError(response)
+
class EucalyptusRequest(Euca2oolsQueryRequest, TabifyingCommand):
SERVICE_CLASS = Eucalyptus
diff --git a/euca2ools/commands/walrus/__init__.py b/euca2ools/commands/walrus/__init__.py
index 7cf9025..f1c66c4 100644
--- a/euca2ools/commands/walrus/__init__.py
+++ b/euca2ools/commands/walrus/__init__.py
@@ -28,6 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+from euca2ools.exceptions import AWSError
from requestbuilder import Arg, SERVICE
import requestbuilder.auth
import requestbuilder.request
@@ -41,6 +42,9 @@ class Walrus(requestbuilder.service.BaseService):
AUTH_CLASS = requestbuilder.auth.S3RestAuth
URL_ENVVAR = 'S3_URL'
+ def handle_http_error(self, response):
+ raise AWSError(response)
+
class WalrusRequest(Euca2oolsRequest):
SERVICE_CLASS = Walrus
diff --git a/euca2ools/exceptions.py b/euca2ools/exceptions.py
index 9e30702..a3c8ddd 100644
--- a/euca2ools/exceptions.py
+++ b/euca2ools/exceptions.py
@@ -130,3 +130,35 @@ class ParseError(EucaError):
def __init__(self, msg):
self._message = msg
+######## NEW CODE STARTS HERE ########
+
+import io
+import requestbuilder.exceptions
+from requestbuilder.xmlparse import parse_aws_xml
+import six
+
+class AWSError(requestbuilder.exceptions.ServerError):
+ def __init__(self, response, *args):
+ requestbuilder.exceptions.ServerError.__init__(self, response, *args)
+ self.code = None # API error code
+ self.message = None # Error message
+ self.elements = {} # Elements in the error response's body
+
+ if self.body:
+ try:
+ parsed = parse_aws_xml(io.StringIO(six.text_type(self.body)))
+ parsed = parsed[parsed.keys()[0]] # Strip off the root element
+ self.code = parsed.get('Code')
+ self.message = parsed.get('Message')
+ self.elements = parsed
+ except ValueError:
+ # Dump the unparseable message body so we don't include
+ # unusable garbage in the exception. Since Eucalyptus
+ # frequently returns plain text and/or broken XML, store it
+ # in case we need it later.
+ self.message = self.body
+ self.body = None
+
+ def __str__(self):
+ return '({code}) {msg}'.format(code=(self.code or self.status_code),
+ msg=(self.message or ''))
--
managing cloud instances for Eucalyptus
More information about the pkg-eucalyptus-commits
mailing list