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__':