/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/plugins/propose/gitlabs.py

  • Committer: Breezy landing bot
  • Author(s): Jelmer Vernooij
  • Date: 2019-10-27 17:51:01 UTC
  • mfrom: (7408.1.3 page-gitlab)
  • Revision ID: breezy.the.bot@gmail.com-20191027175101-h1xopribtuomo11d
Use paging to iterate over github and gitlab pull requests.

Merged from https://code.launchpad.net/~jelmer/brz/page-gitlab/+merge/374761

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
 
47
47
 
48
48
_DEFAULT_FILES = ['/etc/python-gitlab.cfg', '~/.python-gitlab.cfg']
 
49
DEFAULT_PAGE_SIZE = 50
49
50
 
50
51
 
51
52
def mp_status_to_status(status):
316
317
    def _get_logged_in_username(self):
317
318
        return self._current_user['username']
318
319
 
 
320
    def _list_paged(self, path, parameters=None, per_page=None):
 
321
        if parameters is None:
 
322
            parameters = {}
 
323
        else:
 
324
            parameters = dict(parameters.items())
 
325
        if per_page:
 
326
            parameters['per_page'] = str(per_page)
 
327
        page = "1"
 
328
        while page:
 
329
            parameters['page'] = page
 
330
            response = self._api_request(
 
331
                'GET', path + '?' +
 
332
                ';'.join(['%s=%s' % item for item in parameters.items()]))
 
333
            if response.status == 403:
 
334
                raise errors.PermissionDenied(response.text)
 
335
            if response.status != 200:
 
336
                raise errors.InvalidHttpResponse(path, response.text)
 
337
            page = response.getheader("X-Next-Page")
 
338
            for entry in json.loads(response.data):
 
339
                yield entry
 
340
 
319
341
    def _list_merge_requests(self, owner=None, project=None, state=None):
320
342
        if project is not None:
321
343
            path = 'projects/%s/merge_requests' % urlutils.quote(str(project), '')
326
348
            parameters['state'] = state
327
349
        if owner:
328
350
            parameters['owner_id'] = urlutils.quote(owner, '')
329
 
        response = self._api_request(
330
 
            'GET', path + '?' +
331
 
            ';'.join(['%s=%s' % item for item in parameters.items()]))
332
 
        if response.status == 403:
333
 
            raise errors.PermissionDenied(response.text)
334
 
        if response.status == 200:
335
 
            return json.loads(response.data)
336
 
        raise errors.InvalidHttpResponse(path, response.text)
 
351
        return self._list_paged(path, parameters, per_page=DEFAULT_PAGE_SIZE)
337
352
 
338
353
    def _update_merge_request(self, project_id, iid, mr):
339
354
        path = 'projects/%s/merge_requests/%s' % (