Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ venv
/AUTHORS
/ChangeLog
/.eggs
/.vscode
8 changes: 7 additions & 1 deletion airtable/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import warnings

import requests
from requests.packages.urllib3.util.retry import Retry
import six

API_URL = 'https://api.airtable.com/v%s/'
Expand Down Expand Up @@ -91,10 +92,15 @@ def __init__(self, base_id, api_key, dict_class=OrderedDict):
self.headers = {'Authorization': 'Bearer %s' % api_key}
self._dict_class = dict_class



def __request(self, method, url, params=None, payload=None):
if method in ['POST', 'PUT', 'PATCH']:
self.headers.update({'Content-type': 'application/json'})
response = requests.request(
retries = Retry(total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504])
session = requests.Session()
session.mount('https://', requests.adapters.HTTPAdapter(max_retries=retries))
response = session.request(
method,
posixpath.join(self.base_url, url),
params=params,
Expand Down
1 change: 1 addition & 0 deletions requirements-test.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pylint
flake8
requests-mock
httpretty
28 changes: 27 additions & 1 deletion test_airtable.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
import unittest

import requests_mock

import httpretty
import airtable
import re

FAKE_TABLE_NAME = 'TableName'
FAKE_BASE_ID = 'app12345'
Expand Down Expand Up @@ -33,6 +34,31 @@ def test_build_headers(self):
self.assertEqual(self.airtable.headers['Authorization'],
'Bearer fake_api_key')

@httpretty.activate
def test_retries(self):
httpretty.register_uri(
httpretty.GET,
re.compile(r'https://.*'),
responses=[
httpretty.Response(
body='{}',
status=429,
),
httpretty.Response(
body='{}',
status=500,
),
httpretty.Response(
body='{}',
status=200,
),
]
)

self.get()
self.assertEqual(3, len(httpretty.latest_requests()))


@requests_mock.mock()
def test_get_all(self, mock_requests):
mock_requests.get('https://api.airtable.com/v0/app12345/TableName', json={
Expand Down