Author: tomaz
Date: Sat Oct 8 18:10:13 2011
New Revision: 1180442
URL: http://svn.apache.org/viewvc?rev=1180442&view=rev
Log:
Parse error response bodies and throw custom ZerigoError.
Modified:
libcloud/trunk/libcloud/dns/drivers/zerigo.py
Modified: libcloud/trunk/libcloud/dns/drivers/zerigo.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/dns/drivers/zerigo.py?rev=1180442&r1=1180441&r2=1180442&view=diff
==============================================================================
--- libcloud/trunk/libcloud/dns/drivers/zerigo.py (original)
+++ libcloud/trunk/libcloud/dns/drivers/zerigo.py Sat Oct 8 18:10:13 2011
@@ -58,6 +58,20 @@ RECORD_TYPE_MAP = {
}
+class ZerigoError(LibcloudError):
+ def __init__(self, code, errors):
+ self.code = code
+ self.errors = errors or []
+
+ def __str__(self):
+ return 'Errors: %s' % (', '.join(self.errors))
+
+ def __repr__(self):
+ return ('<ZerigoError response code=%s, errors count=%s>' %
+ (self.code,
+ len(self.errors)))
+
+
class ZerigoDNSResponse(Response):
def parse_body(self):
if not self.body or (self.body and not self.body.strip()):
@@ -82,6 +96,18 @@ class ZerigoDNSResponse(Response):
if context['resource'] == 'zone':
raise ZoneDoesNotExistError(value='', driver=self,
zone_id=context['id'])
+ elif status != 503:
+ try:
+ body = ET.XML(self.body)
+ except:
+ raise MalformedResponseError('Failed to parse XML',
+ body=self.body)
+
+ errors = []
+ for error in findall(element=body, xpath='error'):
+ errors.append(error.text)
+
+ raise ZerigoError(code=status, errors=errors)
return self.body