1+ from typing import Any , cast , Dict , Optional , TYPE_CHECKING , Union
2+
13from gitlab import exceptions as exc
24from gitlab import types
35from gitlab .base import RequiredOptional , RESTManager , RESTObject
@@ -42,11 +44,17 @@ class GroupEpicManager(CRUDMixin, RESTManager):
4244 )
4345 _types = {"labels" : types .ListAttribute }
4446
47+ def get (self , id : Union [str , int ], lazy : bool = False , ** kwargs : Any ) -> GroupEpic :
48+ return cast (GroupEpic , super ().get (id = id , lazy = lazy , ** kwargs ))
49+
4550
4651class GroupEpicIssue (ObjectDeleteMixin , SaveMixin , RESTObject ):
4752 _id_attr = "epic_issue_id"
53+ # Define type for 'manager' here So mypy won't complain about
54+ # 'self.manager.update()' call in the 'save' method.
55+ manager : "GroupEpicIssueManager"
4856
49- def save (self , ** kwargs ) :
57+ def save (self , ** kwargs : Any ) -> None :
5058 """Save the changes made to the object to the server.
5159
5260 The object is updated to match what the server returns.
@@ -78,7 +86,9 @@ class GroupEpicIssueManager(
7886 _update_attrs = RequiredOptional (optional = ("move_before_id" , "move_after_id" ))
7987
8088 @exc .on_http_error (exc .GitlabCreateError )
81- def create (self , data , ** kwargs ):
89+ def create (
90+ self , data : Optional [Dict [str , Any ]] = None , ** kwargs : Any
91+ ) -> GroupEpicIssue :
8292 """Create a new object.
8393
8494 Args:
@@ -94,9 +104,13 @@ def create(self, data, **kwargs):
94104 RESTObject: A new instance of the manage object class build with
95105 the data sent by the server
96106 """
107+ if TYPE_CHECKING :
108+ assert data is not None
97109 CreateMixin ._check_missing_create_attrs (self , data )
98110 path = f"{ self .path } /{ data .pop ('issue_id' )} "
99111 server_data = self .gitlab .http_post (path , ** kwargs )
112+ if TYPE_CHECKING :
113+ assert isinstance (server_data , dict )
100114 # The epic_issue_id attribute doesn't exist when creating the resource,
101115 # but is used everywhere elese. Let's create it to be consistent client
102116 # side
0 commit comments