diff --git a/.gitignore b/.gitignore index 6d254ba..ff7c604 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,6 @@ pip-log.txt #Mr Developer .mr.developer.cfg -pipedrive/ve/ \ No newline at end of file +pipedrive/ve/ + +__pycache__ diff --git a/pipedrive/__init__.py b/pipedrive/__init__.py index 87ab977..e528ba5 100644 --- a/pipedrive/__init__.py +++ b/pipedrive/__init__.py @@ -35,7 +35,7 @@ def _request(self, endpoint, data, method='POST'): response, data = self.http.request(uri, method=method, headers={'Content-Type': 'application/x-www-form-urlencoded'}) else: uri = PIPEDRIVE_API_URL + endpoint + '?api_token=' + str(self.api_token) - response, data = self.http.request(uri, method=method, body=urlencode(data), headers={'Content-Type': 'application/x-www-form-urlencoded'}) + response, data = self.http.request(uri, method=method, body=json.dumps(data), headers={'Content-Type': 'application/json'}) logger.debug('sending {method} request to {uri}'.format( method=method, @@ -64,8 +64,30 @@ def __init__(self, email, password=None): def __getattr__(self, name): def wrapper(data={}, method='GET'): + response = self._request(name.replace('_', '/'), data, method) - if 'error' in response: - raise PipedriveError(response) - return response + + def _generator(): + if 'error' in response: + raise PipedriveError(response) + + additional_data = response.get('additional_data', {}) + pagination_info = additional_data.get('pagination', {}) + + logger.debug('pagination_info: {}'.format(pagination_info)) + if isinstance(response['data'], dict): + yield response['data'] + else: + yield from response['data'] + + if pagination_info.get('more_items_in_collection', False): + + data.update({ + 'start': pagination_info['next_start'] + }) + + yield from wrapper(data, method) + + return _generator() + return wrapper diff --git a/setup.py b/setup.py index 078c85c..fb2f669 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name='python-pipedrive', - version="0.4.0", + version="0.5.1", license="MIT", install_requires=[