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

Add a delay to work around rackspace rate limiting.

This commit is contained in:
Terrence Cole
2017-07-20 15:50:57 -07:00
parent bb4d1c82b1
commit 4707b4654e

View File

@@ -8,6 +8,7 @@ from requests import HTTPError, Session, post
from collections import defaultdict from collections import defaultdict
import logging import logging
import string import string
import time
from ..record import Create, Record from ..record import Create, Record
from .base import BaseProvider from .base import BaseProvider
@@ -71,6 +72,8 @@ class RackspaceProvider(BaseProvider):
auth_token, dns_endpoint = self._get_auth_token(username, api_key) auth_token, dns_endpoint = self._get_auth_token(username, api_key)
self.dns_endpoint = dns_endpoint self.dns_endpoint = dns_endpoint
self.ratelimit_delay = kwargs.get('ratelimit_delay', 0)
sess = Session() sess = Session()
sess.headers.update({'X-Auth-Token': auth_token}) sess.headers.update({'X-Auth-Token': auth_token})
self._sess = sess self._sess = sess
@@ -88,6 +91,7 @@ class RackspaceProvider(BaseProvider):
def _get_zone_id_for(self, zone): def _get_zone_id_for(self, zone):
ret = self._request('GET', 'domains', pagination_key='domains') ret = self._request('GET', 'domains', pagination_key='domains')
time.sleep(self.ratelimit_delay)
if ret: if ret:
return [x for x in ret if x['name'] == zone.name[:-1]][0]['id'] return [x for x in ret if x['name'] == zone.name[:-1]][0]['id']
else: else:
@@ -104,6 +108,7 @@ class RackspaceProvider(BaseProvider):
def _request_for_url(self, method, url, data): def _request_for_url(self, method, url, data):
resp = self._sess.request(method, url, json=data, timeout=self.TIMEOUT) resp = self._sess.request(method, url, json=data, timeout=self.TIMEOUT)
time.sleep(self.ratelimit_delay)
self.log.debug('_request: status=%d', resp.status_code) self.log.debug('_request: status=%d', resp.status_code)
resp.raise_for_status() resp.raise_for_status()
return resp return resp
@@ -112,6 +117,7 @@ class RackspaceProvider(BaseProvider):
acc = [] acc = []
resp = self._sess.request(method, url, json=data, timeout=self.TIMEOUT) resp = self._sess.request(method, url, json=data, timeout=self.TIMEOUT)
time.sleep(self.ratelimit_delay)
self.log.debug('_request: status=%d', resp.status_code) self.log.debug('_request: status=%d', resp.status_code)
resp.raise_for_status() resp.raise_for_status()
acc.extend(resp.json()[pagination_key]) acc.extend(resp.json()[pagination_key])