Browse Source

Add a delay to work around rackspace rate limiting.

pull/165/head
Terrence Cole 9 years ago
parent
commit
4707b4654e
1 changed files with 6 additions and 0 deletions
  1. +6
    -0
      octodns/provider/rackspace.py

+ 6
- 0
octodns/provider/rackspace.py 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])


Loading…
Cancel
Save