230
230
def base_url(self):
231
231
return self.transport.base
233
def _api_request(self, method, path):
233
def _api_request(self, method, path, data=None):
234
234
return self.transport.request(
235
235
method, urlutils.join(self.base_url, 'api', 'v4', path),
236
headers=self.headers)
236
headers=self.headers, body=data)
238
238
def __init__(self, transport, private_token):
239
239
self.transport = transport
247
247
raise NoSuchProject(project_name)
248
248
if response.status == 200:
249
249
return json.loads(response.data)
250
raise InvalidHttpResponse(path, response.text)
250
raise errors.InvalidHttpResponse(path, response.text)
252
252
def _fork_project(self, project_name):
253
253
path = 'projects/%s/fork' % urlutils.quote(str(project_name), '')
254
254
response = self._api_request('POST', path)
255
255
if response != 201:
256
raise InvalidHttpResponse(path, response.text)
256
raise errors.InvalidHttpResponse(path, response.text)
257
257
return json.loads(response.data)
259
259
def _get_logged_in_username(self):
262
262
def _list_merge_requests(self, owner=None, project=None, state=None):
263
263
if project is not None:
264
path = 'projects/%s/merge_requests' % urlutils.quote(str(project_name), '')
264
path = 'projects/%s/merge_requests' % urlutils.quote(str(project), '')
266
266
path = 'merge_requests'
276
276
raise errors.PermissionDenied(response.text)
277
277
if response.status == 200:
278
278
return json.loads(response.data)
279
raise InvalidHttpResponse(path, response.text)
279
raise errors.InvalidHttpResponse(path, response.text)
281
281
def _create_mergerequest(
282
282
self, title, source_project_id, target_project_id,
283
283
source_branch_name, target_branch_name, description,
285
285
path = 'projects/%s/merge_requests' % source_project_id
288
'source_branch': source_branch_name,
289
'target_branch': target_branch_name,
290
'target_project_id': target_project_id,
291
'description': description,
294
fields['labels'] = labels
286
295
response = self._api_request(
287
'POST', path, fields={
289
'source_branch': source_branch_name,
290
'target_branch': target_branch_name,
291
'target_project_id': target_project_id,
292
'description': description,
296
'POST', path, data=json.dumps(fields).encode('utf-8'))
294
297
if response.status == 403:
295
298
raise errors.PermissionDenied(response.text)
296
299
if response.status == 409:
297
300
raise MergeProposalExists(self.source_branch.user_url)
298
if response.status == 200:
299
raise InvalidHttpResponse(path, response.text)
301
if response.status != 201:
302
raise errors.InvalidHttpResponse(path, response.text)
300
303
return json.loads(response.data)
302
305
def get_push_url(self, branch):
437
440
class GitlabMergeProposalBuilder(MergeProposalBuilder):
439
def __init__(self, l, source_branch, target_branch):
442
def __init__(self, gl, source_branch, target_branch):
441
444
self.source_branch = source_branch
442
445
(self.source_host, self.source_project_name, self.source_branch_name) = (
482
485
'source_project_id': source_project['id'],
483
486
'target_project_id': target_project['id'],
484
'source_branch': self.source_branch_name,
485
'target_branch': self.target_branch_name,
487
'source_branch_name': self.source_branch_name,
488
'target_branch_name': self.target_branch_name,
486
489
'description': description}
488
491
kwargs['labels'] = ','.join(labels)