summaryrefslogtreecommitdiff
path: root/gitlab/__init__.py
diff options
context:
space:
mode:
authorJason Antman <jason@jasonantman.com>2015-07-28 11:18:00 -0400
committerJason Antman <jason@jasonantman.com>2015-07-28 11:18:24 -0400
commit33ceed61759e1eb5197154d16cd81030e138921d (patch)
tree93fb41a2d20bc41f61f708a9da74b6a7f11c4473 /gitlab/__init__.py
parent802c144cfd199684506b3404f03c3657c75e307d (diff)
downloadgitlab-33ceed61759e1eb5197154d16cd81030e138921d.tar.gz
python-gitlab Issue #63 - implement pagination for list()
Diffstat (limited to 'gitlab/__init__.py')
-rw-r--r--gitlab/__init__.py15
1 files changed, 13 insertions, 2 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index 52fc7db..7248634 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -26,6 +26,9 @@ import warnings
import requests
import six
+import logging
+logger = logging.getLogger(__name__)
+
__title__ = 'python-gitlab'
__version__ = '0.9.1'
__author__ = 'Gauvain Pocentek'
@@ -189,6 +192,8 @@ class Gitlab(object):
self._url = '%s/api/v3' % url
def _construct_url(self, id_, obj, parameters):
+ if 'next_url' in parameters:
+ return parameters['next_url']
args = _sanitize_dict(parameters)
url = obj._url % args
if id_ is not None:
@@ -342,8 +347,14 @@ class Gitlab(object):
if key in cls_kwargs:
del cls_kwargs[key]
- return [cls(self, item, **cls_kwargs) for item in r.json()
- if item is not None]
+ results = [cls(self, item, **cls_kwargs) for item in r.json()
+ if item is not None]
+ if 'next' in r.links and 'url' in r.links['next']:
+ args = kwargs.copy()
+ args['next_url'] = r.links['next']['url']
+ logger.debug("Iterating results 'next' link: %s", args['next_url'])
+ results.extend(self.list(obj_class, **args))
+ return results
else:
_raise_error_from_response(r, GitlabListError)