feat(api)!: Make RESTObjectList typing generic · python-gitlab/python-gitlab@befba35

@@ -4,6 +4,7 @@

44

from gitlab import exceptions as exc

55

from gitlab import types

66

from gitlab.base import RESTObject, RESTObjectList

7+

from gitlab.client import GitlabList

78

from gitlab.mixins import (

89

CRUDMixin,

910

ObjectDeleteMixin,

@@ -16,6 +17,7 @@

1617

from .issues import GroupIssue, GroupIssueManager, ProjectIssue, ProjectIssueManager

1718

from .merge_requests import (

1819

GroupMergeRequest,

20+

GroupMergeRequestManager,

1921

ProjectMergeRequest,

2022

ProjectMergeRequestManager,

2123

)

@@ -33,7 +35,7 @@ class GroupMilestone(SaveMixin, ObjectDeleteMixin, RESTObject):

33353436

@cli.register_custom_action(cls_names="GroupMilestone")

3537

@exc.on_http_error(exc.GitlabListError)

36-

def issues(self, **kwargs: Any) -> RESTObjectList:

38+

def issues(self, **kwargs: Any) -> RESTObjectList[GroupIssue]:

3739

"""List issues related to this milestone.

38403941

Args:

@@ -53,14 +55,14 @@ def issues(self, **kwargs: Any) -> RESTObjectList:

5355

path = f"{self.manager.path}/{self.encoded_id}/issues"

5456

data_list = self.manager.gitlab.http_list(path, iterator=True, **kwargs)

5557

if TYPE_CHECKING:

56-

assert isinstance(data_list, RESTObjectList)

58+

assert isinstance(data_list, GitlabList)

5759

manager = GroupIssueManager(self.manager.gitlab, parent=self.manager._parent)

5860

# FIXME(gpocentek): the computed manager path is not correct

5961

return RESTObjectList(manager, GroupIssue, data_list)

60626163

@cli.register_custom_action(cls_names="GroupMilestone")

6264

@exc.on_http_error(exc.GitlabListError)

63-

def merge_requests(self, **kwargs: Any) -> RESTObjectList:

65+

def merge_requests(self, **kwargs: Any) -> RESTObjectList[GroupMergeRequest]:

6466

"""List the merge requests related to this milestone.

65676668

Args:

@@ -79,8 +81,10 @@ def merge_requests(self, **kwargs: Any) -> RESTObjectList:

7981

path = f"{self.manager.path}/{self.encoded_id}/merge_requests"

8082

data_list = self.manager.gitlab.http_list(path, iterator=True, **kwargs)

8183

if TYPE_CHECKING:

82-

assert isinstance(data_list, RESTObjectList)

83-

manager = GroupIssueManager(self.manager.gitlab, parent=self.manager._parent)

84+

assert isinstance(data_list, GitlabList)

85+

manager = GroupMergeRequestManager(

86+

self.manager.gitlab, parent=self.manager._parent

87+

)

8488

# FIXME(gpocentek): the computed manager path is not correct

8589

return RESTObjectList(manager, GroupMergeRequest, data_list)

8690

@@ -105,7 +109,7 @@ class ProjectMilestone(PromoteMixin, SaveMixin, ObjectDeleteMixin, RESTObject):

105109106110

@cli.register_custom_action(cls_names="ProjectMilestone")

107111

@exc.on_http_error(exc.GitlabListError)

108-

def issues(self, **kwargs: Any) -> RESTObjectList:

112+

def issues(self, **kwargs: Any) -> RESTObjectList[ProjectIssue]:

109113

"""List issues related to this milestone.

110114111115

Args:

@@ -125,14 +129,14 @@ def issues(self, **kwargs: Any) -> RESTObjectList:

125129

path = f"{self.manager.path}/{self.encoded_id}/issues"

126130

data_list = self.manager.gitlab.http_list(path, iterator=True, **kwargs)

127131

if TYPE_CHECKING:

128-

assert isinstance(data_list, RESTObjectList)

132+

assert isinstance(data_list, GitlabList)

129133

manager = ProjectIssueManager(self.manager.gitlab, parent=self.manager._parent)

130134

# FIXME(gpocentek): the computed manager path is not correct

131135

return RESTObjectList(manager, ProjectIssue, data_list)

132136133137

@cli.register_custom_action(cls_names="ProjectMilestone")

134138

@exc.on_http_error(exc.GitlabListError)

135-

def merge_requests(self, **kwargs: Any) -> RESTObjectList:

139+

def merge_requests(self, **kwargs: Any) -> RESTObjectList[ProjectMergeRequest]:

136140

"""List the merge requests related to this milestone.

137141138142

Args:

@@ -151,7 +155,7 @@ def merge_requests(self, **kwargs: Any) -> RESTObjectList:

151155

path = f"{self.manager.path}/{self.encoded_id}/merge_requests"

152156

data_list = self.manager.gitlab.http_list(path, iterator=True, **kwargs)

153157

if TYPE_CHECKING:

154-

assert isinstance(data_list, RESTObjectList)

158+

assert isinstance(data_list, GitlabList)

155159

manager = ProjectMergeRequestManager(

156160

self.manager.gitlab, parent=self.manager._parent

157161

)