Author: tomaz
Date: Sun Sep 25 22:27:43 2011
New Revision: 1175604

URL: http://svn.apache.org/viewvc?rev=1175604&view=rev
Log:
Modify update_record method to only send arguments which are specified in the
request (on update, most of the arguments are optional). Also modify it to use
get_new_ob. Update affected tests.

Modified:
    libcloud/trunk/libcloud/dns/drivers/linode.py
    libcloud/trunk/test/dns/test_linode.py

Modified: libcloud/trunk/libcloud/dns/drivers/linode.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/dns/drivers/linode.py?rev=1175604&r1=1175603&r2=1175604&view=diff
==============================================================================
--- libcloud/trunk/libcloud/dns/drivers/linode.py (original)
+++ libcloud/trunk/libcloud/dns/drivers/linode.py Sun Sep 25 22:27:43 2011
@@ -179,23 +179,35 @@ class LinodeDNSDriver(DNSDriver):
                         data=data, extra=merged, zone=zone, driver=self)
         return record
 
-    def update_record(self, record, name, type, data, extra=None):
+    def update_record(self, record, name=None, type=None, data=None,
+                      extra=None):
         """
         Update an existing record.
 
         API docs: http://www.linode.com/api/dns/domain.resource.update
         """
         params = {'api_action': 'domain.resource.update',
-                  'ResourceID': record.id, 'DomainID': record.zone.id,
-                  'Name': name, 'Target': data, 'Type': RECORD_TYPE_MAP[type]}
+                  'ResourceID': record.id, 'DomainID': record.zone.id}
+
+        if name:
+            params['Name'] = name
+
+        if data:
+            params['Target'] = data
+
+        if type:
+            params['Type'] = RECORD_TYPE_MAP[type]
+
         merged = merge_valid_keys(params=params,
                                   valid_keys=VALID_RECORD_EXTRA_PARAMS,
                                   extra=extra)
 
         result = self.connection.request(API_ROOT, params=params).objects[0]
-        record = Record(id=result['ResourceID'], name=name, type=type,
-                        data=data, extra=merged, zone=record.zone, driver=self)
-        return record
+        updated_record = get_new_obj(obj=record, klass=Record,
+                                     attributes={'name': name, 'data': data,
+                                                 'type': type,
+                                                 'extra': merged})
+        return updated_record
 
     def delete_zone(self, zone):
         params = {'api_action': 'domain.delete', 'DomainID': zone.id}

Modified: libcloud/trunk/test/dns/test_linode.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/dns/test_linode.py?rev=1175604&r1=1175603&r2=1175604&view=diff
==============================================================================
--- libcloud/trunk/test/dns/test_linode.py (original)
+++ libcloud/trunk/test/dns/test_linode.py Sun Sep 25 22:27:43 2011
@@ -174,14 +174,17 @@ class LinodeTests(unittest.TestCase):
     def test_update_record_success(self):
         zone = self.driver.list_zones()[0]
         record = self.driver.list_records(zone=zone)[0]
-        record2 = self.driver.update_record(record=record, name='www',
-                                            type=RecordType.AAAA, data='::1')
-
-        self.assertEqual(record2.id, '28537')
-        self.assertEqual(record2.name, 'www')
-        self.assertEqual(record2.zone, record.zone)
-        self.assertEqual(record2.type, RecordType.AAAA)
-        self.assertEqual(record2.data, '::1')
+        updated_record = self.driver.update_record(record=record, name='www',
+                                                   type=RecordType.AAAA,
+                                                   data='::1')
+
+        self.assertEqual(record.data, '75.127.96.245')
+
+        self.assertEqual(updated_record.id, record.id)
+        self.assertEqual(updated_record.name, 'www')
+        self.assertEqual(updated_record.zone, record.zone)
+        self.assertEqual(updated_record.type, RecordType.AAAA)
+        self.assertEqual(updated_record.data, '::1')
 
     def test_delete_zone_success(self):
         zone = self.driver.list_zones()[0]


Reply via email to