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()