@@ -395,6 +395,75 @@ class GroupMemberManager(GetFromListMixin, CreateMixin, UpdateMixin,
395
395
_update_attrs = (('access_level' , ), ('expires_at' , ))
396
396
397
397
398
+ class GroupMergeRequest (RESTObject ):
399
+ pass
400
+
401
+
402
+ class GroupMergeRequestManager (RESTManager ):
403
+ pass
404
+
405
+
406
+ class GroupMilestone (SaveMixin , ObjectDeleteMixin , RESTObject ):
407
+ _short_print_attr = 'title'
408
+
409
+ @cli .register_custom_action ('GroupMilestone' )
410
+ @exc .on_http_error (exc .GitlabListError )
411
+ def issues (self , ** kwargs ):
412
+ """List issues related to this milestone.
413
+
414
+ Args:
415
+ **kwargs: Extra options to send to the server (e.g. sudo)
416
+
417
+ Raises:
418
+ GitlabAuthenticationError: If authentication is not correct
419
+ GitlabListError: If the list could not be retrieved
420
+
421
+ Returns:
422
+ RESTObjectList: The list of issues
423
+ """
424
+
425
+ path = '%s/%s/issues' % (self .manager .path , self .get_id ())
426
+ data_list = self .manager .gitlab .http_list (path , as_list = False ,
427
+ ** kwargs )
428
+ manager = GroupIssueManager (self .manager .gitlab ,
429
+ parent = self .manager ._parent )
430
+ # FIXME(gpocentek): the computed manager path is not correct
431
+ return RESTObjectList (manager , GroupIssue , data_list )
432
+
433
+ @cli .register_custom_action ('GroupMilestone' )
434
+ @exc .on_http_error (exc .GitlabListError )
435
+ def merge_requests (self , ** kwargs ):
436
+ """List the merge requests related to this milestone.
437
+
438
+ Args:
439
+ **kwargs: Extra options to send to the server (e.g. sudo)
440
+
441
+ Raises:
442
+ GitlabAuthenticationError: If authentication is not correct
443
+ GitlabListError: If the list could not be retrieved
444
+
445
+ Returns:
446
+ RESTObjectList: The list of merge requests
447
+ """
448
+ path = '%s/%s/merge_requests' % (self .manager .path , self .get_id ())
449
+ data_list = self .manager .gitlab .http_list (path , as_list = False ,
450
+ ** kwargs )
451
+ manager = GroupIssueManager (self .manager .gitlab ,
452
+ parent = self .manager ._parent )
453
+ # FIXME(gpocentek): the computed manager path is not correct
454
+ return RESTObjectList (manager , GroupMergeRequest , data_list )
455
+
456
+
457
+ class GroupMilestoneManager (CRUDMixin , RESTManager ):
458
+ _path = '/groups/%(group_id)s/milestones'
459
+ _obj_cls = GroupMilestone
460
+ _from_parent_attrs = {'group_id' : 'id' }
461
+ _create_attrs = (('title' , ), ('description' , 'due_date' , 'start_date' ))
462
+ _update_attrs = (tuple (), ('title' , 'description' , 'due_date' ,
463
+ 'start_date' , 'state_event' ))
464
+ _list_filters = ('iids' , 'state' , 'search' )
465
+
466
+
398
467
class GroupNotificationSettings (NotificationSettings ):
399
468
pass
400
469
@@ -434,6 +503,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
434
503
_managers = (
435
504
('accessrequests' , 'GroupAccessRequestManager' ),
436
505
('members' , 'GroupMemberManager' ),
506
+ ('milestones' , 'GroupMilestoneManager' ),
437
507
('notificationsettings' , 'GroupNotificationSettingsManager' ),
438
508
('projects' , 'GroupProjectManager' ),
439
509
('issues' , 'GroupIssueManager' ),
@@ -1293,8 +1363,8 @@ def issues(self, **kwargs):
1293
1363
path = '%s/%s/issues' % (self .manager .path , self .get_id ())
1294
1364
data_list = self .manager .gitlab .http_list (path , as_list = False ,
1295
1365
** kwargs )
1296
- manager = ProjectCommitManager (self .manager .gitlab ,
1297
- parent = self .manager ._parent )
1366
+ manager = ProjectIssueManager (self .manager .gitlab ,
1367
+ parent = self .manager ._parent )
1298
1368
# FIXME(gpocentek): the computed manager path is not correct
1299
1369
return RESTObjectList (manager , ProjectIssue , data_list )
1300
1370
@@ -1316,8 +1386,8 @@ def merge_requests(self, **kwargs):
1316
1386
path = '%s/%s/merge_requests' % (self .manager .path , self .get_id ())
1317
1387
data_list = self .manager .gitlab .http_list (path , as_list = False ,
1318
1388
** kwargs )
1319
- manager = ProjectCommitManager (self .manager .gitlab ,
1320
- parent = self .manager ._parent )
1389
+ manager = ProjectMergeRequestManager (self .manager .gitlab ,
1390
+ parent = self .manager ._parent )
1321
1391
# FIXME(gpocentek): the computed manager path is not correct
1322
1392
return RESTObjectList (manager , ProjectMergeRequest , data_list )
1323
1393
@@ -1330,7 +1400,7 @@ class ProjectMilestoneManager(CRUDMixin, RESTManager):
1330
1400
'state_event' ))
1331
1401
_update_attrs = (tuple (), ('title' , 'description' , 'due_date' ,
1332
1402
'start_date' , 'state_event' ))
1333
- _list_filters = ('iids' , 'state' )
1403
+ _list_filters = ('iids' , 'state' , 'search' )
1334
1404
1335
1405
1336
1406
class ProjectLabel (SubscribableMixin , SaveMixin , ObjectDeleteMixin ,
0 commit comments