feat(api)!: Make RESTObjectList typing generic · python-gitlab/python-gitlab@befba35
@@ -4,6 +4,7 @@
44from gitlab import exceptions as exc
55from gitlab import types
66from gitlab.base import RESTObject, RESTObjectList
7+from gitlab.client import GitlabList
78from gitlab.mixins import (
89CRUDMixin,
910ObjectDeleteMixin,
@@ -16,6 +17,7 @@
1617from .issues import GroupIssue, GroupIssueManager, ProjectIssue, ProjectIssueManager
1718from .merge_requests import (
1819GroupMergeRequest,
20+GroupMergeRequestManager,
1921ProjectMergeRequest,
2022ProjectMergeRequestManager,
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:
5355path = f"{self.manager.path}/{self.encoded_id}/issues"
5456data_list = self.manager.gitlab.http_list(path, iterator=True, **kwargs)
5557if TYPE_CHECKING:
56-assert isinstance(data_list, RESTObjectList)
58+assert isinstance(data_list, GitlabList)
5759manager = GroupIssueManager(self.manager.gitlab, parent=self.manager._parent)
5860# FIXME(gpocentek): the computed manager path is not correct
5961return 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:
7981path = f"{self.manager.path}/{self.encoded_id}/merge_requests"
8082data_list = self.manager.gitlab.http_list(path, iterator=True, **kwargs)
8183if 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
8589return 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:
125129path = f"{self.manager.path}/{self.encoded_id}/issues"
126130data_list = self.manager.gitlab.http_list(path, iterator=True, **kwargs)
127131if TYPE_CHECKING:
128-assert isinstance(data_list, RESTObjectList)
132+assert isinstance(data_list, GitlabList)
129133manager = ProjectIssueManager(self.manager.gitlab, parent=self.manager._parent)
130134# FIXME(gpocentek): the computed manager path is not correct
131135return 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:
151155path = f"{self.manager.path}/{self.encoded_id}/merge_requests"
152156data_list = self.manager.gitlab.http_list(path, iterator=True, **kwargs)
153157if TYPE_CHECKING:
154-assert isinstance(data_list, RESTObjectList)
158+assert isinstance(data_list, GitlabList)
155159manager = ProjectMergeRequestManager(
156160self.manager.gitlab, parent=self.manager._parent
157161 )