/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-12-23 11:52:04 UTC
  • mfrom: (7426.1.1 github-attributes)
  • Revision ID: breezy.the.bot@gmail.com-20191223115204-fu25ro451x2k3vr3
Fix setting of attributes on GitHub pull requests.

Merged from https://code.launchpad.net/~jelmer/brz/github-attributes/+merge/374394

Show diffs side-by-side

added added

removed removed

Lines of Context:
227
227
 
228
228
    def _api_request(self, method, path, body=None):
229
229
        headers = {
 
230
            'Content-Type': 'application/json',
230
231
            'Accept': 'application/vnd.github.v3+json'}
231
232
        if self._token:
232
233
            headers['Authorization'] = 'token %s' % self._token
262
263
            return json.loads(response.text)
263
264
        raise InvalidHttpResponse(path, response.text)
264
265
 
265
 
    def _create_pull(self, path, title, head, base, body=None):
 
266
    def _create_pull(self, path, title, head, base, body=None, labels=None, assignee=None):
266
267
        data = {
267
268
            'title': title,
268
269
            'head': head,
269
270
            'base': base,
270
271
        }
 
272
        if labels is not None:
 
273
            data['labels'] = labels
 
274
        if assignee is not None:
 
275
            data['assignee'] = assignee
271
276
        if body:
272
277
            data['body'] = body
273
278
 
274
279
        response = self._api_request(
275
280
            'POST', path, body=json.dumps(data).encode('utf-8'))
276
281
        if response.status != 201:
277
 
            raise InvalidHttpResponse(path, response.text)
 
282
            raise InvalidHttpResponse(path, 'req is invalid %d %r: %r' % (response.status, data, response.text))
278
283
        return json.loads(response.text)
279
284
 
280
285
    def _get_user_by_email(self, email):
291
296
 
292
297
    def _get_user(self, username=None):
293
298
        if username:
294
 
            path = 'users/:%s' % username
 
299
            path = 'users/%s' % username
295
300
        else:
296
301
            path = 'user'
297
302
        response = self._api_request('GET', path)
300
305
        return json.loads(response.text)
301
306
 
302
307
    def _get_organization(self, name):
303
 
        path = 'orgs/:%s' % name
 
308
        path = 'orgs/%s' % name
304
309
        response = self._api_request('GET', path)
305
310
        if response.status != 200:
306
311
            raise InvalidHttpResponse(path, response.text)
522
527
        # TODO(jelmer): Set maintainers_can_modify?
523
528
        target_repo = self.gh._get_repo(
524
529
            self.target_owner, self.target_repo_name)
525
 
        try:
526
 
            pull_request = self.gh._create_pull(
527
 
                strip_optional(target_repo['pulls_url']),
528
 
                title=title, body=description,
529
 
                head="%s:%s" % (self.source_owner, self.source_branch_name),
530
 
                base=self.target_branch_name)
531
 
        except ValidationFailed:
532
 
            raise MergeProposalExists(self.source_branch.user_url)
533
530
        assignees = []
534
531
        if reviewers:
 
532
            assignees = []
535
533
            for reviewer in reviewers:
536
534
                if '@' in reviewer:
537
535
                    user = self.gh._get_user_by_email(reviewer)
538
536
                else:
539
537
                    user = self.gh._get_user(reviewer)
540
538
                assignees.append(user['login'])
541
 
        if labels or assignees:
542
 
            data = {}
543
 
            if labels:
544
 
                data['labels'] = labels
545
 
            if assignees:
546
 
                data['assignees'] = assignees
547
 
            response = self.gh._api_request(
548
 
                'PATCH', pull_request['issue_url'], body=json.dumps(data).encode('utf-8'))
549
 
            if response.status == 422:
550
 
                raise ValidationFailed(json.loads(response.text))
551
 
            if response.status != 200:
552
 
                raise InvalidHttpResponse(pull_request['issue_url'], response.text)
 
539
        else:
 
540
            assignees = None
 
541
        try:
 
542
            pull_request = self.gh._create_pull(
 
543
                strip_optional(target_repo['pulls_url']),
 
544
                title=title, body=description,
 
545
                head="%s:%s" % (self.source_owner, self.source_branch_name),
 
546
                base=self.target_branch_name,
 
547
                labels=labels, assignee=assignees)
 
548
        except ValidationFailed:
 
549
            raise MergeProposalExists(self.source_branch.user_url)
553
550
        return GitHubMergeProposal(self.gh, pull_request)