Author: tomaz
Date: Sun Dec 25 02:36:50 2011
New Revision: 1223041

URL: http://svn.apache.org/viewvc?rev=1223041&view=rev
Log:
Add created and updated attribute to the LoadBalancer extra dictionary in
the Rackspace driver. This patch has been contributed by Mark Everett and is
part of GH-49.

Modified:
    libcloud/trunk/CHANGES
    libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py
    libcloud/trunk/test/loadbalancer/test_rackspace.py

Modified: libcloud/trunk/CHANGES
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/CHANGES?rev=1223041&r1=1223040&r2=1223041&view=diff
==============================================================================
--- libcloud/trunk/CHANGES (original)
+++ libcloud/trunk/CHANGES Sun Dec 25 02:36:50 2011
@@ -76,6 +76,10 @@ Changes with Apache Libcloud in developm
     - Add update_balancer method to the Rackspace driver.
       [Mark Everett]
 
+    - Add created and updated attribute to the LoadBalancer extra dictionary in
+      the Rackspace driver.
+      [Mark Everett]
+
 Changes with Apache Libcloud 0.7.1:
 
   *) General:

Modified: libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py?rev=1223041&r1=1223040&r2=1223041&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py Sun Dec 25 
02:36:50 2011
@@ -15,6 +15,7 @@
 
 import os
 import binascii
+from datetime import datetime
 
 try:
     import simplejson as json
@@ -197,6 +198,7 @@ class RackspaceConnection(OpenStackBaseC
 
         return state == 'ACTIVE'
 
+
 class RackspaceUKConnection(RackspaceConnection):
     auth_url = AUTH_URL_UK
 
@@ -407,6 +409,12 @@ class RackspaceLBDriver(Driver):
         if 'nodes' in el:
             extra['members'] = self._to_members(el)
 
+        if 'created' in el:
+            extra['created'] = self._iso_to_datetime(el['created']['time'])
+
+        if 'updated' in el:
+            extra['updated'] = self._iso_to_datetime(el['updated']['time'])
+
         return LoadBalancer(id=el["id"],
                 name=el["name"],
                 state=self.LB_STATE_MAP.get(
@@ -518,6 +526,21 @@ class RackspaceLBDriver(Driver):
         elif type == "DENY":
             return RackspaceAccessRuleType.DENY
 
+    def _iso_to_datetime(self, isodate):
+        date_formats = ('%Y-%m-%dT%H:%M:%SZ', '%Y-%m-%dT%H:%M:%S%z')
+        date = None
+
+        for date_format in date_formats:
+            try:
+                date = datetime.strptime(isodate, date_format)
+            except ValueError:
+                pass
+
+            if date:
+                break
+
+        return date
+
 
 class RackspaceUKLBDriver(RackspaceLBDriver):
     connectionCls = RackspaceUKConnection

Modified: libcloud/trunk/test/loadbalancer/test_rackspace.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/loadbalancer/test_rackspace.py?rev=1223041&r1=1223040&r2=1223041&view=diff
==============================================================================
--- libcloud/trunk/test/loadbalancer/test_rackspace.py (original)
+++ libcloud/trunk/test/loadbalancer/test_rackspace.py Sun Dec 25 02:36:50 2011
@@ -14,6 +14,7 @@
 # limitations under the License.
 
 import sys
+import datetime
 import unittest
 
 try:
@@ -148,6 +149,18 @@ class RackspaceLBTests(unittest.TestCase
         self.assertEquals('10.1.0.10', members[1].ip)
         self.assertEquals('10.1.0.9', members[2].ip)
 
+    def test_get_balancer_extra_created(self):
+        balancer = self.driver.get_balancer(balancer_id='8290')
+
+        created_8290 = datetime.datetime(2011, 4, 7, 16, 27, 50)
+        self.assertEquals(created_8290, balancer.extra['created'])
+
+    def test_get_balancer_extra_updated(self):
+        balancer = self.driver.get_balancer(balancer_id='8290')
+
+        updated_8290 = datetime.datetime(2011, 4, 7, 16, 28, 12)
+        self.assertEquals(updated_8290, balancer.extra['updated'])
+
     def test_get_balancer_algorithm(self):
         balancer = self.driver.get_balancer(balancer_id='8290')
         self.assertEquals(balancer.extra["algorithm"], Algorithm.RANDOM)


Reply via email to