Author: tomaz
Date: Sat Sep 24 09:19:26 2011
New Revision: 1175134
URL: http://svn.apache.org/viewvc?rev=1175134&view=rev
Log:
Update Linode DNS driver and handle all the "ObjectDoesNotExist" error inside
the _make_excp class in LinodeDNSResponse.
Modified:
libcloud/trunk/libcloud/dns/drivers/linode.py
Modified: libcloud/trunk/libcloud/dns/drivers/linode.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/dns/drivers/linode.py?rev=1175134&r1=1175133&r2=1175134&view=diff
==============================================================================
--- libcloud/trunk/libcloud/dns/drivers/linode.py (original)
+++ libcloud/trunk/libcloud/dns/drivers/linode.py Sat Sep 24 09:19:26 2011
@@ -46,14 +46,30 @@ class LinodeDNSResponse(LinodeResponse):
def _make_excp(self, error):
result = super(LinodeDNSResponse, self)._make_excp(error)
if isinstance(result, LinodeException) and result.code == 5:
- # TODO
- pass
+ context = self.connection.context
+
+ if context['resource'] == 'zone':
+ result = ZoneDoesNotExistError(value='',
+ driver=self.connection.driver,
+ zone_id=context['id'])
+
+ elif context['resource'] == 'record':
+ result = RecordDoesNotExistError(value='',
+ driver=self.connection.driver,
+ record_id=context['id'])
return result
class LinodeDNSConnection(LinodeConnection):
responseCls = LinodeDNSResponse
+ def __init__(self, *args, **kwargs):
+ super(LinodeDNSConnection, self).__init__(*args, **kwargs)
+ self.context = {}
+
+ def set_context(self, context):
+ self.context = context
+
class LinodeDNSDriver(DNSDriver):
type = Provider.LINODE
@@ -69,13 +85,9 @@ class LinodeDNSDriver(DNSDriver):
def list_records(self, zone):
params = {'api_action': 'domain.resource.list', 'DOMAINID': zone.id}
- try:
- data = self.connection.request(API_ROOT, params=params).objects[0]
- except LinodeException, e:
- if e.code == 5:
- raise ZoneDoesNotExistError(value='', driver=self,
- zone_id=zone.id)
-
+ self.connection.set_context(context={'resource': 'zone',
+ 'id': zone.id})
+ data = self.connection.request(API_ROOT, params=params).objects[0]
records = self._to_records(items=data, zone=zone)
return records
@@ -160,12 +172,9 @@ class LinodeDNSDriver(DNSDriver):
def delete_zone(self, zone):
params = {'api_action': 'domain.delete', 'DomainID': zone.id}
- try:
- data = self.connection.request(API_ROOT, params=params).objects[0]
- except LinodeException, e:
- if e.code == 5:
- raise ZoneDoesNotExistError(value='', driver=self,
- zone_id=zone.id)
+ self.connection.set_context(context={'resource': 'zone',
+ 'id': zone.id})
+ data = self.connection.request(API_ROOT, params=params).objects[0]
return 'DomainID' in data
@@ -173,13 +182,9 @@ class LinodeDNSDriver(DNSDriver):
params = {'api_action': 'domain.resource.delete',
'DomainID': record.zone.id, 'ResourceID': record.id}
- try:
- data = self.connection.request(API_ROOT, params=params).objects[0]
- except LinodeException, e:
- # TODO: Refactor LinodeException, args[0] should be error_id
- if e.code == 5:
- raise RecordDoesNotExistError(value='', driver=self,
- record_id=record.id)
+ self.connection.set_context(context={'resource': 'record',
+ 'id': record.id})
+ data = self.connection.request(API_ROOT, params=params).objects[0]
return 'ResourceID' in data