1
0
mirror of https://github.com/github/octodns.git synced 2024-05-11 05:55:00 +00:00

NS1 RateLimitException, just sleep for e.period

This commit is contained in:
Ross McFarland
2017-07-02 10:45:58 -07:00
parent a44b82c2c7
commit d9806e851f
2 changed files with 12 additions and 14 deletions

View File

@@ -28,13 +28,11 @@ class Ns1Provider(BaseProvider):
ZONE_NOT_FOUND_MESSAGE = 'server error: zone not found'
def __init__(self, id, api_key, rate_limit_delay=1, *args, **kwargs):
def __init__(self, id, api_key, *args, **kwargs):
self.log = getLogger('Ns1Provider[{}]'.format(id))
self.log.debug('__init__: id=%s, api_key=***, rate_limit_delay=%d', id,
rate_limit_delay)
self.log.debug('__init__: id=%s, api_key=***', id)
super(Ns1Provider, self).__init__(id, *args, **kwargs)
self._client = NSONE(apiKey=api_key)
self.rate_limit_delay = rate_limit_delay
def _data_for_A(self, _type, record):
return {
@@ -177,10 +175,10 @@ class Ns1Provider(BaseProvider):
meth = getattr(nsone_zone, 'add_{}'.format(_type))
try:
meth(name, **params)
except RateLimitException:
except RateLimitException as e:
self.log.warn('_apply_Create: rate limit encountered, pausing '
'and trying again')
sleep(self.rate_limit_delay)
sleep(e.period)
meth(name, **params)
def _apply_Update(self, nsone_zone, change):
@@ -192,10 +190,10 @@ class Ns1Provider(BaseProvider):
params = getattr(self, '_params_for_{}'.format(_type))(new)
try:
record.update(**params)
except RateLimitException:
except RateLimitException as e:
self.log.warn('_apply_Update: rate limit encountered, pausing '
'and trying again')
sleep(self.rate_limit_delay)
sleep(e.period)
record.update(**params)
def _apply_Delete(self, nsone_zone, change):
@@ -205,10 +203,10 @@ class Ns1Provider(BaseProvider):
record = nsone_zone.loadRecord(name, _type)
try:
record.delete()
except RateLimitException:
except RateLimitException as e:
self.log.warn('_apply_Delete: rate limit encountered, pausing '
'and trying again')
sleep(self.rate_limit_delay)
sleep(e.period)
record.delete()
def _apply(self, plan):

View File

@@ -193,7 +193,7 @@ class TestNs1Provider(TestCase):
@patch('nsone.NSONE.createZone')
@patch('nsone.NSONE.loadZone')
def test_sync(self, load_mock, create_mock):
provider = Ns1Provider('test', 'api-key', rate_limit_delay=0)
provider = Ns1Provider('test', 'api-key')
desired = Zone('unit.tests.', [])
desired.records.update(self.expected)
@@ -231,7 +231,7 @@ class TestNs1Provider(TestCase):
mock_zone = Mock()
mock_zone.add_SRV = Mock()
mock_zone.add_SRV.side_effect = [
RateLimitException('boo'),
RateLimitException('boo', period=0),
None,
]
create_mock.side_effect = [mock_zone]
@@ -259,11 +259,11 @@ class TestNs1Provider(TestCase):
# trigger rate limit handling
mock_record = Mock()
mock_record.update.side_effect = [
RateLimitException('one'),
RateLimitException('one', period=0),
None,
]
mock_record.delete.side_effect = [
RateLimitException('two'),
RateLimitException('two', period=0),
None,
]
nsone_zone.loadRecord.side_effect = [mock_record, mock_record]