/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/github.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:
55
55
GITHUB_HOST = 'github.com'
56
56
WEB_GITHUB_URL = 'https://github.com'
57
57
API_GITHUB_URL = 'https://api.github.com'
 
58
DEFAULT_PER_PAGE = 50
58
59
 
59
60
 
60
61
def store_github_token(scheme, host, token):
303
304
            raise InvalidHttpResponse(path, response.text)
304
305
        return json.loads(response.text)
305
306
 
 
307
    def _list_paged(self, path, parameters=None, per_page=None):
 
308
        if parameters is None:
 
309
            parameters = {}
 
310
        else:
 
311
            parameters = dict(parameters.items())
 
312
        if per_page:
 
313
            parameters['per_page'] = str(per_page)
 
314
        page = 1
 
315
        i = 0
 
316
        while path:
 
317
            parameters['page'] = str(page)
 
318
            response = self._api_request(
 
319
                'GET', path + '?' +
 
320
                ';'.join(['%s=%s' % (k, urlutils.quote(v))
 
321
                          for (k, v) in parameters.items()]))
 
322
            if response.status != 200:
 
323
                raise InvalidHttpResponse(path, response.text)
 
324
            data = json.loads(response.text)
 
325
            for entry in data['items']:
 
326
                i += 1
 
327
                yield entry
 
328
            if i >= data['total_count']:
 
329
                break
 
330
            page += 1
 
331
 
306
332
    def _search_issues(self, query):
307
333
        path = 'search/issues'
308
 
        response = self._api_request(
309
 
            'GET', path + '?q=' + urlutils.quote(query))
310
 
        if response.status != 200:
311
 
            raise InvalidHttpResponse(path, response.text)
312
 
        return json.loads(response.text)
 
334
        return self._list_paged(path, {'q': query}, per_page=DEFAULT_PER_PAGE)
313
335
 
314
336
    def _create_fork(self, repo, owner=None):
315
337
        (orig_owner, orig_repo) = repo.split('/')
450
472
        elif status == 'merged':
451
473
            query.append('is:merged')
452
474
        query.append('author:%s' % self._current_user['login'])
453
 
        for issue in self._search_issues(query=' '.join(query))['items']:
 
475
        for issue in self._search_issues(query=' '.join(query)):
454
476
            url = issue['pull_request']['url']
455
477
            response = self._api_request('GET', url)
456
478
            if response.status != 200: