Skip to content

Commit

Permalink
Merge pull request #537 from robpickerill/retry-mode
Browse files Browse the repository at this point in the history
use retry mode: standard
  • Loading branch information
jantman authored Jul 9, 2021
2 parents c63dfaf + 2461439 commit 032e2b9
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 33 deletions.
13 changes: 11 additions & 2 deletions awslimitchecker/connectable.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,13 @@ def connect(self):
"""
if self.conn is not None:
return

default_config = Config(retries={'mode': 'adaptive'})
kwargs = dict(self._boto3_connection_kwargs)
kwargs['config'] = default_config

if self._max_retries_config is not None:
kwargs['config'] = self._max_retries_config
kwargs['config'] = default_config.merge(self._max_retries_config)
self.conn = boto3.client(self.api_name, **kwargs)
logger.info("Connected to %s in region %s",
self.api_name, self.conn._client_config.region_name)
Expand All @@ -132,9 +136,14 @@ def connect_resource(self):
"""
if self.resource_conn is not None:
return

default_config = Config(retries={'mode': 'adaptive'})
kwargs = dict(self._boto3_connection_kwargs)
kwargs['config'] = default_config

if self._max_retries_config is not None:
kwargs['config'] = self._max_retries_config
kwargs['config'] = default_config.merge(self._max_retries_config)

self.resource_conn = boto3.resource(self.api_name, **kwargs)
logger.info("Connected to %s (resource) in region %s", self.api_name,
self.resource_conn.meta.client._client_config.region_name)
80 changes: 49 additions & 31 deletions awslimitchecker/tests/test_connectable.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@ class Test_Connectable(object):
def test_connect(self):
mock_conn = Mock()
mock_cc = Mock()
mock_botoconfig = Mock()

type(mock_cc).region_name = 'myregion'
type(mock_conn)._client_config = mock_cc

Expand All @@ -141,12 +143,13 @@ def test_connect(self):
mock_kwargs.return_value = kwargs
with patch('%s.logger' % pbm) as mock_logger:
with patch('%s.boto3.client' % pbm) as mock_client:
with patch(
'%s._max_retries_config' % pb, new_callable=PropertyMock
) as m_mrc:
m_mrc.return_value = None
mock_client.return_value = mock_conn
cls.connect()
with patch('%s.Config' % pbm) as m_conf:
with patch(
'%s._max_retries_config' % pb, new_callable=PropertyMock # noqa - ignore line length
) as m_mrc:
m_conf.return_value.merge.return_value = mock_botoconfig # noqa - ignore line length
mock_client.return_value = mock_conn
cls.connect()
assert mock_kwargs.mock_calls == [call()]
assert mock_logger.mock_calls == [
call.info("Connected to %s in region %s",
Expand All @@ -157,15 +160,19 @@ def test_connect(self):
call(
'myapi',
foo='fooval',
bar='barval'
bar='barval',
config=mock_botoconfig,
)
]
assert m_mrc.mock_calls == [call()]
assert m_mrc.mock_calls == [call(), call()]
assert cls.conn == mock_client.return_value

def test_connect_with_retries(self):
mock_conn = Mock()
mock_cc = Mock()
mock_conf = Mock()
mock_botoconfig = Mock()

type(mock_cc).region_name = 'myregion'
type(mock_conn)._client_config = mock_cc

Expand All @@ -179,12 +186,14 @@ def test_connect_with_retries(self):
mock_kwargs.return_value = kwargs
with patch('%s.logger' % pbm) as mock_logger:
with patch('%s.boto3.client' % pbm) as mock_client:
with patch(
'%s._max_retries_config' % pb, new_callable=PropertyMock
) as m_mrc:
m_mrc.return_value = mock_conf
mock_client.return_value = mock_conn
cls.connect()
with patch('%s.Config' % pbm) as m_conf:
with patch(
'%s._max_retries_config' % pb, new_callable=PropertyMock # noqa - ignore line length
) as m_mrc:
m_conf.return_value.merge.return_value = mock_botoconfig # noqa - ignore line length
m_mrc.return_value = mock_conf
mock_client.return_value = mock_conn
cls.connect()
assert mock_kwargs.mock_calls == [call()]
assert mock_logger.mock_calls == [
call.info("Connected to %s in region %s",
Expand All @@ -196,7 +205,7 @@ def test_connect_with_retries(self):
'myapi',
foo='fooval',
bar='barval',
config=mock_conf
config=mock_botoconfig
)
]
assert m_mrc.mock_calls == [call(), call()]
Expand Down Expand Up @@ -236,6 +245,8 @@ def test_connect_resource(self):
mock_meta = Mock()
mock_client = Mock()
mock_cc = Mock()
mock_botoconfig = Mock()

type(mock_cc).region_name = 'myregion'
type(mock_client)._client_config = mock_cc
type(mock_meta).client = mock_client
Expand All @@ -250,13 +261,15 @@ def test_connect_resource(self):
mock_kwargs.return_value = kwargs
with patch('%s.logger' % pbm) as mock_logger:
with patch('%s.boto3.resource' % pbm) as mock_resource:
with patch(
'%s._max_retries_config' % pb,
new_callable=PropertyMock
) as m_mrc:
m_mrc.return_value = None
mock_resource.return_value = mock_conn
cls.connect_resource()
with patch('%s.Config' % pbm) as m_conf:
with patch(
'%s._max_retries_config' % pb,
new_callable=PropertyMock
) as m_mrc:
m_conf.return_value = mock_botoconfig
m_mrc.return_value = None
mock_resource.return_value = mock_conn
cls.connect_resource()
assert mock_kwargs.mock_calls == [call()]
assert mock_logger.mock_calls == [
call.info("Connected to %s (resource) in region %s",
Expand All @@ -267,7 +280,8 @@ def test_connect_resource(self):
call(
'myapi',
foo='fooval',
bar='barval'
bar='barval',
config=mock_botoconfig,
)
]
assert m_mrc.mock_calls == [call()]
Expand All @@ -278,6 +292,8 @@ def test_connect_resource_with_max_retries(self):
mock_meta = Mock()
mock_client = Mock()
mock_cc = Mock()
mock_botoconfig = Mock()

type(mock_cc).region_name = 'myregion'
type(mock_client)._client_config = mock_cc
type(mock_meta).client = mock_client
Expand All @@ -293,13 +309,15 @@ def test_connect_resource_with_max_retries(self):
mock_kwargs.return_value = kwargs
with patch('%s.logger' % pbm) as mock_logger:
with patch('%s.boto3.resource' % pbm) as mock_resource:
with patch(
'%s._max_retries_config' % pb,
new_callable=PropertyMock
) as m_mrc:
m_mrc.return_value = mock_conf
mock_resource.return_value = mock_conn
cls.connect_resource()
with patch('%s.Config' % pbm) as m_conf:
with patch(
'%s._max_retries_config' % pb,
new_callable=PropertyMock
) as m_mrc:
m_conf.return_value.merge.return_value = mock_botoconfig # noqa - ignore line length
m_mrc.return_value = mock_conf
mock_resource.return_value = mock_conn
cls.connect_resource()
assert mock_kwargs.mock_calls == [call()]
assert mock_logger.mock_calls == [
call.info("Connected to %s (resource) in region %s",
Expand All @@ -311,7 +329,7 @@ def test_connect_resource_with_max_retries(self):
'myapi',
foo='fooval',
bar='barval',
config=mock_conf
config=mock_botoconfig
)
]
assert m_mrc.mock_calls == [call(), call()]
Expand Down

0 comments on commit 032e2b9

Please sign in to comment.