You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by pq...@apache.org on 2010/08/13 02:09:33 UTC
svn commit: r985047 - in /incubator/libcloud/trunk/libcloud/drivers:
linode.py rackspace.py
Author: pquerna
Date: Fri Aug 13 00:09:33 2010
New Revision: 985047
URL: http://svn.apache.org/viewvc?rev=985047&view=rev
Log:
For linode and rackspace, if the JSON or XML parser barfs, throw a MalformedResponseException
Modified:
incubator/libcloud/trunk/libcloud/drivers/linode.py
incubator/libcloud/trunk/libcloud/drivers/rackspace.py
Modified: incubator/libcloud/trunk/libcloud/drivers/linode.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/drivers/linode.py?rev=985047&r1=985046&r2=985047&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/drivers/linode.py (original)
+++ incubator/libcloud/trunk/libcloud/drivers/linode.py Fri Aug 13 00:09:33 2010
@@ -27,7 +27,7 @@ Linode(R) is a registered trademark of L
Maintainer: Jed Smith <je...@linode.com>"""
-from libcloud.types import Provider, NodeState, InvalidCredsException
+from libcloud.types import Provider, NodeState, InvalidCredsException, MalformedResponseException
from libcloud.base import ConnectionKey, Response
from libcloud.base import NodeDriver, NodeSize, Node, NodeLocation
from libcloud.base import NodeAuthPassword, NodeAuthSSHKey
@@ -113,6 +113,10 @@ class LinodeResponse(Response):
@return: triple of action (C{str}), data, and errors (C{list})"""
try:
js = json.loads(self.body)
+ except:
+ raise MalformedResponseException("Failed to parse JSON", body=self.body, driver=LinodeNodeDriver)
+
+ try:
if ("DATA" not in js
or "ERRORARRAY" not in js
or "ACTION" not in js):
@@ -129,6 +133,10 @@ class LinodeResponse(Response):
@return: C{list} of errors, possibly empty"""
try:
js = json.loads(self.body)
+ except:
+ raise MalformedResponseException("Failed to parse JSON", body=self.body, driver=LinodeNodeDriver)
+
+ try:
if "ERRORARRAY" not in js:
return [self.invalid]
return [self._make_excp(e) for e in js["ERRORARRAY"]]
Modified: incubator/libcloud/trunk/libcloud/drivers/rackspace.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/drivers/rackspace.py?rev=985047&r1=985046&r2=985047&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/drivers/rackspace.py (original)
+++ incubator/libcloud/trunk/libcloud/drivers/rackspace.py Fri Aug 13 00:09:33 2010
@@ -15,7 +15,7 @@
"""
Rackspace driver
"""
-from libcloud.types import NodeState, InvalidCredsException, Provider
+from libcloud.types import NodeState, InvalidCredsException, Provider, MalformedResponseException
from libcloud.base import ConnectionUserAndKey, Response, NodeDriver, Node
from libcloud.base import NodeSize, NodeImage, NodeLocation
import os
@@ -52,12 +52,18 @@ class RackspaceResponse(Response):
def parse_body(self):
if not self.body:
return None
- return ET.XML(self.body)
-
+ try:
+ body = ET.XML(self.body)
+ except:
+ raise MalformedResponseException("Failed to parse XML", body=self.body, driver=RackspaceNodeDriver)
+ return body
def parse_error(self):
# TODO: fixup, Rackspace only uses response codes really!
try:
- object = ET.XML(self.body)
+ body = ET.XML(self.body)
+ except:
+ raise MalformedResponseException("Failed to parse XML", body=self.body, driver=RackspaceNodeDriver)
+ try:
text = "; ".join([ err.text or ''
for err in
object.getiterator()