From 9452a940456a2b2419aed4948b120022329ac8e2 Mon Sep 17 00:00:00 2001 From: Chris Ward Date: Wed, 7 Jun 2017 11:28:00 +0200 Subject: [PATCH 1/6] ignore vim swap files and pip install pkgs --- .gitignore | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.gitignore b/.gitignore index 63b1104..37089b0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,27 @@ *.ipynb .idea venv + +# vim swap files +*.sw* + +*.py[cod] + +# C extensions +*.c +*.so + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +var +sdist +develop-eggs +.installed.cfg +lib +lib64 + From 3aeebb395e5129b7a8014d9d1c5bc4c10e0c4b0b Mon Sep 17 00:00:00 2001 From: Chris Ward Date: Wed, 7 Jun 2017 11:34:57 +0200 Subject: [PATCH 2/6] remove end-line space --- airtable/airtable.py | 1 + 1 file changed, 1 insertion(+) diff --git a/airtable/airtable.py b/airtable/airtable.py index 665e710..77e6d47 100644 --- a/airtable/airtable.py +++ b/airtable/airtable.py @@ -1,4 +1,5 @@ import json +import posixpath import posixpath import requests from collections import OrderedDict From 21943dddd140bacd0313fbdae0d817a6d597b019 Mon Sep 17 00:00:00 2001 From: Chris Ward Date: Wed, 7 Jun 2017 11:36:32 +0200 Subject: [PATCH 3/6] Fix py3 exception handling issue --- airtable/airtable.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/airtable/airtable.py b/airtable/airtable.py index 77e6d47..acaf843 100644 --- a/airtable/airtable.py +++ b/airtable/airtable.py @@ -59,7 +59,10 @@ def __request(self, method, url, params=None, payload=None): message = None r.raise_for_status() except requests.exceptions.HTTPError as e: - message = e.message + try: + message = e.message + except AttributeError: + pass return { 'error': dict(code=r.status_code, message=message) } From 7c3b7606af0a93283820ab58dae9c788b08c384f Mon Sep 17 00:00:00 2001 From: Chris Ward Date: Wed, 7 Jun 2017 11:37:19 +0200 Subject: [PATCH 4/6] Exception handling when Airtable API returns error code --- airtable/airtable.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/airtable/airtable.py b/airtable/airtable.py index acaf843..4b84ef8 100644 --- a/airtable/airtable.py +++ b/airtable/airtable.py @@ -111,7 +111,12 @@ def iterate( while True: response = self.get( table_name, limit=batch_size, offset=offset, - filter_by_formula=filter_by_formula, view=view) + filter_by_formula=filter_by_formula, view=view, + fields=fields) + if response.get('error'): + raise RuntimeError('API returned code: ({}) {}'.format( + response['error']['code'], + response['error']['message'] or "UNKNOWN")) for record in response.pop('records'): yield record if 'offset' in response: From 71440faa049bafecbdda7008a05f09bfd1004d34 Mon Sep 17 00:00:00 2001 From: Chris Ward Date: Wed, 7 Jun 2017 11:39:02 +0200 Subject: [PATCH 5/6] API support for passing list of field names to filter-by --- airtable/airtable.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/airtable/airtable.py b/airtable/airtable.py index 4b84ef8..d27a421 100644 --- a/airtable/airtable.py +++ b/airtable/airtable.py @@ -1,6 +1,5 @@ import json import posixpath -import posixpath import requests from collections import OrderedDict @@ -69,7 +68,7 @@ def __request(self, method, url, params=None, payload=None): def get( self, table_name, record_id=None, limit=0, offset=None, - filter_by_formula=None, view=None): + filter_by_formula=None, view=None, fields=None): params = {} if check_string(record_id): url = posixpath.join(table_name, record_id) @@ -83,10 +82,13 @@ def get( params.update({'filterByFormula': filter_by_formula}) if view is not None: params.update({'view': view}) + if fields is not None: + params.update({'fields': fields}) return self.__request('GET', url, params) def iterate( - self, table_name, batch_size=0, filter_by_formula=None, view=None): + self, table_name, batch_size=0, filter_by_formula=None, view=None, + fields=None): """Iterate over all records of a table. Args: From 0f12f578aef5eca9f223265248b18718ca4344c2 Mon Sep 17 00:00:00 2001 From: Chris Ward Date: Mon, 17 Jul 2017 12:52:01 +0200 Subject: [PATCH 6/6] removed broken fields param; py3 error catch handling --- airtable/airtable.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/airtable/airtable.py b/airtable/airtable.py index d27a421..3314a6f 100644 --- a/airtable/airtable.py +++ b/airtable/airtable.py @@ -61,14 +61,14 @@ def __request(self, method, url, params=None, payload=None): try: message = e.message except AttributeError: - pass + message = e return { 'error': dict(code=r.status_code, message=message) } def get( self, table_name, record_id=None, limit=0, offset=None, - filter_by_formula=None, view=None, fields=None): + filter_by_formula=None, view=None): params = {} if check_string(record_id): url = posixpath.join(table_name, record_id) @@ -82,8 +82,6 @@ def get( params.update({'filterByFormula': filter_by_formula}) if view is not None: params.update({'view': view}) - if fields is not None: - params.update({'fields': fields}) return self.__request('GET', url, params) def iterate(