/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: 2020-01-10 02:20:50 UTC
  • mfrom: (7414.5.2 project-management)
  • Revision ID: breezy.the.bot@gmail.com-20200110022050-de0fq4l1fsgvawfv
Add functions for managing projects.

Merged from https://code.launchpad.net/~jelmer/brz/project-management/+merge/376820

Show diffs side-by-side

added added

removed removed

Lines of Context:
211
211
        return self._branch_url_from_project(
212
212
            self._mr['target_project_id'], self._mr['target_branch'])
213
213
 
 
214
    def _get_project_name(self, project_id):
 
215
        source_project = self.gl._get_project(project_id)
 
216
        return source_project['path_with_namespace']
 
217
 
 
218
    def get_source_project(self):
 
219
        return self._get_project_name(self._mr['source_project_id'])
 
220
 
 
221
    def get_target_project(self):
 
222
        return self._get_project_name(self._mr['target_project_id'])
 
223
 
214
224
    def is_merged(self):
215
225
        return (self._mr['state'] == 'merged')
216
226
 
268
278
    def base_url(self):
269
279
        return self.transport.base
270
280
 
271
 
    def _api_request(self, method, path, fields=None):
 
281
    def _api_request(self, method, path, fields=None, body=None):
272
282
        return self.transport.request(
273
283
            method, urlutils.join(self.base_url, 'api', 'v4', path),
274
 
            headers=self.headers, fields=fields)
 
284
            headers=self.headers, fields=fields, body=body)
275
285
 
276
286
    def __init__(self, transport, private_token):
277
287
        self.transport = transport
279
289
        self.check()
280
290
 
281
291
    def _get_user(self, username):
282
 
        path = 'users/%s' % urlutils.quote(str(project_name), '')
 
292
        path = 'users/%s' % urlutils.quote(str(username), '')
283
293
        response = self._api_request('GET', path)
284
294
        if response.status == 404:
285
295
            raise KeyError('no such user %s' % username)
287
297
            return json.loads(response.data)
288
298
        raise errors.InvalidHttpResponse(path, response.text)
289
299
 
290
 
    def _get_user_by_email(self, username):
291
 
        path = 'users?search=%s' % urlutils.quote(str(project_name), '')
 
300
    def _get_user_by_email(self, email):
 
301
        path = 'users?search=%s' % urlutils.quote(str(email), '')
292
302
        response = self._api_request('GET', path)
293
303
        if response.status == 404:
294
 
            raise KeyError('no such user %s' % username)
 
304
            raise KeyError('no such user %s' % email)
295
305
        if response.status == 200:
296
306
            ret = json.loads(response.data)
297
307
            if len(ret) != 1:
362
372
            parameters['owner_id'] = urlutils.quote(owner, '')
363
373
        return self._list_paged(path, parameters, per_page=DEFAULT_PAGE_SIZE)
364
374
 
 
375
    def _list_projects(self, owner):
 
376
        path = 'users/%s/projects' % urlutils.quote(str(owner), '')
 
377
        parameters = {}
 
378
        return self._list_paged(path, parameters, per_page=DEFAULT_PAGE_SIZE)
 
379
 
365
380
    def _update_merge_request(self, project_id, iid, mr):
366
381
        path = 'projects/%s/merge_requests/%s' % (
367
382
            urlutils.quote(str(project_id), ''), iid)
509
524
                owner=self._get_logged_in_username(), state=state):
510
525
            yield GitLabMergeProposal(self, mp)
511
526
 
 
527
    def iter_my_forks(self):
 
528
        for project in self._list_projects(owner=self._get_logged_in_username()):
 
529
            base_project = project.get('forked_from_project')
 
530
            if not base_project:
 
531
                continue
 
532
            yield project['path_with_namespace']
 
533
 
512
534
    def get_proposal_by_url(self, url):
513
535
        try:
514
536
            (host, project, merge_id) = parse_gitlab_merge_request_url(url)
525
547
        mr = project.mergerequests.get(merge_id)
526
548
        return GitLabMergeProposal(mr)
527
549
 
 
550
    def delete_project(self, project):
 
551
        path = 'projects/%s' % urlutils.quote(str(project_name), '')
 
552
        response = self._api_request('DELETE', path)
 
553
        if response.status == 404:
 
554
            raise NoSuchProject(project_name)
 
555
        if response.status != 200:
 
556
            raise errors.InvalidHttpResponse(path, response.text)
 
557
 
528
558
 
529
559
class GitlabMergeProposalBuilder(MergeProposalBuilder):
530
560