@@ -395,6 +395,75 @@ class GroupMemberManager(GetFromListMixin, CreateMixin, UpdateMixin,
395395 _update_attrs = (('access_level' , ), ('expires_at' , ))
396396
397397
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+
398467class GroupNotificationSettings (NotificationSettings ):
399468 pass
400469
@@ -434,6 +503,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
434503 _managers = (
435504 ('accessrequests' , 'GroupAccessRequestManager' ),
436505 ('members' , 'GroupMemberManager' ),
506+ ('milestones' , 'GroupMilestoneManager' ),
437507 ('notificationsettings' , 'GroupNotificationSettingsManager' ),
438508 ('projects' , 'GroupProjectManager' ),
439509 ('issues' , 'GroupIssueManager' ),
@@ -1293,8 +1363,8 @@ def issues(self, **kwargs):
12931363 path = '%s/%s/issues' % (self .manager .path , self .get_id ())
12941364 data_list = self .manager .gitlab .http_list (path , as_list = False ,
12951365 ** kwargs )
1296- manager = ProjectCommitManager (self .manager .gitlab ,
1297- parent = self .manager ._parent )
1366+ manager = ProjectIssueManager (self .manager .gitlab ,
1367+ parent = self .manager ._parent )
12981368 # FIXME(gpocentek): the computed manager path is not correct
12991369 return RESTObjectList (manager , ProjectIssue , data_list )
13001370
@@ -1316,8 +1386,8 @@ def merge_requests(self, **kwargs):
13161386 path = '%s/%s/merge_requests' % (self .manager .path , self .get_id ())
13171387 data_list = self .manager .gitlab .http_list (path , as_list = False ,
13181388 ** kwargs )
1319- manager = ProjectCommitManager (self .manager .gitlab ,
1320- parent = self .manager ._parent )
1389+ manager = ProjectMergeRequestManager (self .manager .gitlab ,
1390+ parent = self .manager ._parent )
13211391 # FIXME(gpocentek): the computed manager path is not correct
13221392 return RESTObjectList (manager , ProjectMergeRequest , data_list )
13231393
@@ -1330,7 +1400,7 @@ class ProjectMilestoneManager(CRUDMixin, RESTManager):
13301400 'state_event' ))
13311401 _update_attrs = (tuple (), ('title' , 'description' , 'due_date' ,
13321402 'start_date' , 'state_event' ))
1333- _list_filters = ('iids' , 'state' )
1403+ _list_filters = ('iids' , 'state' , 'search' )
13341404
13351405
13361406class ProjectLabel (SubscribableMixin , SaveMixin , ObjectDeleteMixin ,
0 commit comments