Skip to content

Commit 8bfc1b0

Browse files
committed
Merge pull request #3 from strayduy/preserve-order-of-fields
Preserve order of fields in records returned by API
2 parents 90a2ca7 + caec4bf commit 8bfc1b0

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

airtable/airtable.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from collections import OrderedDict
12
import json
23
import os
34
import requests
@@ -51,7 +52,7 @@ def __request(self, method, url, params=None, payload=None):
5152
data=payload,
5253
headers=self.headers)
5354
if r.status_code == requests.codes.ok:
54-
return r.json()
55+
return r.json(object_pairs_hook=OrderedDict)
5556
else:
5657
try:
5758
message = None

airtable/airtable_test.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,59 @@ def test_get_all(self, mock_request):
5050
self.assertEqual(len(r['records']), 2)
5151
self.assertEqual(r['offset'], 'reccg3Kke0QvTDW0H')
5252

53+
@mock.patch.object(requests, 'request')
54+
def test_order_of_fields_is_preserved(self, mock_request):
55+
mock_response = requests.Response()
56+
mock_response.status_code = 200
57+
58+
# Set the text content of the response to a JSON string so we can test
59+
# how it gets deserialized
60+
mock_response._content = '''{
61+
"records": [
62+
{
63+
"id": "reccA6yaHKzw5Zlp0",
64+
"fields": {
65+
"a": 1,
66+
"b": 2,
67+
"c": 3,
68+
"d": 4,
69+
"e": 5,
70+
"f": 6,
71+
"g": 7,
72+
"h": 8,
73+
"i": 9,
74+
"j": 10,
75+
"k": 11,
76+
"l": 12,
77+
"m": 13
78+
}
79+
},
80+
{
81+
"id": "reccg3Kke0QvTDW0H",
82+
"fields": {
83+
"n": 14,
84+
"o": 15,
85+
"p": 16,
86+
"q": 17,
87+
"r": 18,
88+
"s": 19,
89+
"t": 20,
90+
"u": 21,
91+
"v": 22,
92+
"w": 23,
93+
"x": 24,
94+
"y": 25,
95+
"z": 26
96+
}
97+
}
98+
]
99+
}'''
100+
101+
mock_request.return_value = mock_response
102+
r = self.airtable.get(FAKE_TABLE_NAME)
103+
self.assertEqual(r['records'][0]['fields'].keys(), list(u'abcdefghijklm'))
104+
self.assertEqual(r['records'][1]['fields'].keys(), list(u'nopqrstuvwxyz'))
105+
53106
@mock.patch.object(requests, 'request')
54107
def test_get_by_id(self, mock_request):
55108
fake_id = 'reccA6yaHKzw5Zlp0'

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from setuptools import setup
22
setup(
33
name='airtable',
4-
version='1.0.0',
4+
version='0.2.0',
55
packages=['airtable'],
66
install_requires=['requests>=2.5.3'],
77
)

0 commit comments

Comments
 (0)