From d9806e851f2ef7a2a8717cda1fa49cd8687e67e7 Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Sun, 2 Jul 2017 10:45:58 -0700 Subject: [PATCH] NS1 RateLimitException, just sleep for e.period --- octodns/provider/ns1.py | 18 ++++++++---------- tests/test_octodns_provider_ns1.py | 8 ++++---- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/octodns/provider/ns1.py b/octodns/provider/ns1.py index 0f3db1f..bca6118 100644 --- a/octodns/provider/ns1.py +++ b/octodns/provider/ns1.py @@ -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): diff --git a/tests/test_octodns_provider_ns1.py b/tests/test_octodns_provider_ns1.py index 5e53cfd..0398459 100644 --- a/tests/test_octodns_provider_ns1.py +++ b/tests/test_octodns_provider_ns1.py @@ -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]