You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2016/04/15 21:12:12 UTC

[2/2] libcloud git commit: Fix a bug with timeout BaseDriver argument provided via "_ex_connection_class_kwargs" getting accidentaly overriden with None.

Fix a bug with timeout BaseDriver argument provided via
"_ex_connection_class_kwargs" getting accidentaly overriden with
None.

Also add additional test cases.

This issue was originally reported by Jay Rolette on the mailing list.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/fd0a22fe
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/fd0a22fe
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/fd0a22fe

Branch: refs/heads/ex_connection_class_kwargs_regression_fix
Commit: fd0a22feab0e473591103020487fbbde33e973af
Parents: 3ccd2e7
Author: Tomaz Muraus <to...@tomaz.me>
Authored: Fri Apr 15 21:09:15 2016 +0200
Committer: Tomaz Muraus <to...@tomaz.me>
Committed: Fri Apr 15 21:10:02 2016 +0200

----------------------------------------------------------------------
 libcloud/common/base.py                  | 17 +++++++++++++----
 libcloud/test/common/test_base_driver.py | 15 +++++++++++++--
 2 files changed, 26 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/fd0a22fe/libcloud/common/base.py
----------------------------------------------------------------------
diff --git a/libcloud/common/base.py b/libcloud/common/base.py
index 0cdb257..5d4c3e9 100644
--- a/libcloud/common/base.py
+++ b/libcloud/common/base.py
@@ -1153,10 +1153,19 @@ class BaseDriver(object):
         self.region = region
 
         conn_kwargs = self._ex_connection_class_kwargs()
-        conn_kwargs.update({'timeout': kwargs.pop('timeout', None),
-                            'retry_delay': kwargs.pop('retry_delay', None),
-                            'backoff': kwargs.pop('backoff', None),
-                            'proxy_url': kwargs.pop('proxy_url', None)})
+
+        # Note: We do that to make sure those additional arguments which are
+        # provided via "_ex_connection_class_kwargs" are not overriden with
+        # None
+        additional_kwargs = ['timeout', 'retry_delay', 'backoff', 'proxy_url']
+        for kwarg_name in additional_kwargs:
+            value = kwargs.pop(kwarg_name, None)
+
+            # Constructor argument has precedence over
+            # _ex_connection_class_kwargs kwarg
+            if value is not None or kwarg_name not in conn_kwargs:
+                conn_kwargs[kwarg_name] = value
+
         self.connection = self.connectionCls(*args, **conn_kwargs)
 
         self.connection.driver = self

http://git-wip-us.apache.org/repos/asf/libcloud/blob/fd0a22fe/libcloud/test/common/test_base_driver.py
----------------------------------------------------------------------
diff --git a/libcloud/test/common/test_base_driver.py b/libcloud/test/common/test_base_driver.py
index 37f15a1..6e04874 100644
--- a/libcloud/test/common/test_base_driver.py
+++ b/libcloud/test/common/test_base_driver.py
@@ -32,6 +32,7 @@ class BaseDriverTestCase(unittest.TestCase):
         DummyDriver1(key='foo')
         call_kwargs = DummyDriver1.connectionCls.call_args[1]
         self.assertEqual(call_kwargs['timeout'], None)
+        self.assertEqual(call_kwargs['retry_delay'], None)
 
         # 2. Timeout provided as constructor argument
         class DummyDriver1(BaseDriver):
@@ -41,6 +42,7 @@ class BaseDriverTestCase(unittest.TestCase):
         DummyDriver1(key='foo', timeout=12)
         call_kwargs = DummyDriver1.connectionCls.call_args[1]
         self.assertEqual(call_kwargs['timeout'], 12)
+        self.assertEqual(call_kwargs['retry_delay'], None)
 
         # 3. timeout provided via "_ex_connection_class_kwargs" method
         class DummyDriver2(BaseDriver):
@@ -50,9 +52,18 @@ class BaseDriverTestCase(unittest.TestCase):
                 return result
 
         DummyDriver2.connectionCls = Mock()
-        DummyDriver1(key='foo')
-        call_kwargs = DummyDriver1.connectionCls.call_args[1]
+        DummyDriver2(key='foo')
+        call_kwargs = DummyDriver2.connectionCls.call_args[1]
         self.assertEqual(call_kwargs['timeout'], 13)
+        self.assertEqual(call_kwargs['retry_delay'], None)
+
+        # 4. Value provided via "_ex_connection_class_kwargs" and constructor,
+        # constructor should win
+        DummyDriver2.connectionCls = Mock()
+        DummyDriver2(key='foo', timeout=14, retry_delay=10)
+        call_kwargs = DummyDriver2.connectionCls.call_args[1]
+        self.assertEqual(call_kwargs['timeout'], 14)
+        self.assertEqual(call_kwargs['retry_delay'], 10)
 
 
 if __name__ == '__main__':