diff options
| author | Jason Antman <jason@jasonantman.com> | 2015-07-28 11:18:00 -0400 |
|---|---|---|
| committer | Jason Antman <jason@jasonantman.com> | 2015-07-28 11:18:24 -0400 |
| commit | 33ceed61759e1eb5197154d16cd81030e138921d (patch) | |
| tree | 93fb41a2d20bc41f61f708a9da74b6a7f11c4473 /gitlab/__init__.py | |
| parent | 802c144cfd199684506b3404f03c3657c75e307d (diff) | |
| download | gitlab-33ceed61759e1eb5197154d16cd81030e138921d.tar.gz | |
python-gitlab Issue #63 - implement pagination for list()
Diffstat (limited to 'gitlab/__init__.py')
| -rw-r--r-- | gitlab/__init__.py | 15 |
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) |
