1+ from typing import Any , cast , Dict , Optional , TYPE_CHECKING , Union
2+
13from gitlab import exceptions as exc
24from gitlab .base import RequiredOptional , RESTManager , RESTObject
35from gitlab .mixins import (
2224
2325class GroupLabel (SubscribableMixin , SaveMixin , ObjectDeleteMixin , RESTObject ):
2426 _id_attr = "name"
27+ manager : "GroupLabelManager"
2528
2629 # Update without ID, but we need an ID to get from list.
2730 @exc .on_http_error (exc .GitlabUpdateError )
28- def save (self , ** kwargs ) :
31+ def save (self , ** kwargs : Any ) -> None :
2932 """Saves the changes made to the object to the server.
3033
3134 The object is updated to match what the server returns.
@@ -56,7 +59,14 @@ class GroupLabelManager(ListMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTMa
5659 )
5760
5861 # Update without ID.
59- def update (self , name , new_data = None , ** kwargs ):
62+ # NOTE(jlvillal): Signature doesn't match UpdateMixin.update() so ignore
63+ # type error
64+ def update ( # type: ignore
65+ self ,
66+ name : Optional [str ],
67+ new_data : Optional [Dict [str , Any ]] = None ,
68+ ** kwargs : Any
69+ ) -> Dict [str , Any ]:
6070 """Update a Label on the server.
6171
6272 Args:
@@ -70,7 +80,9 @@ def update(self, name, new_data=None, **kwargs):
7080
7181 # Delete without ID.
7282 @exc .on_http_error (exc .GitlabDeleteError )
73- def delete (self , name , ** kwargs ):
83+ # NOTE(jlvillal): Signature doesn't match DeleteMixin.delete() so ignore
84+ # type error
85+ def delete (self , name : str , ** kwargs : Any ) -> None : # type: ignore
7486 """Delete a Label on the server.
7587
7688 Args:
@@ -81,17 +93,20 @@ def delete(self, name, **kwargs):
8193 GitlabAuthenticationError: If authentication is not correct
8294 GitlabDeleteError: If the server cannot perform the request
8395 """
96+ if TYPE_CHECKING :
97+ assert self .path is not None
8498 self .gitlab .http_delete (self .path , query_data = {"name" : name }, ** kwargs )
8599
86100
87101class ProjectLabel (
88102 PromoteMixin , SubscribableMixin , SaveMixin , ObjectDeleteMixin , RESTObject
89103):
90104 _id_attr = "name"
105+ manager : "ProjectLabelManager"
91106
92107 # Update without ID, but we need an ID to get from list.
93108 @exc .on_http_error (exc .GitlabUpdateError )
94- def save (self , ** kwargs ) :
109+ def save (self , ** kwargs : Any ) -> None :
95110 """Saves the changes made to the object to the server.
96111
97112 The object is updated to match what the server returns.
@@ -123,8 +138,20 @@ class ProjectLabelManager(
123138 required = ("name" ,), optional = ("new_name" , "color" , "description" , "priority" )
124139 )
125140
141+ def get (
142+ self , id : Union [str , int ], lazy : bool = False , ** kwargs : Any
143+ ) -> ProjectLabel :
144+ return cast (ProjectLabel , super ().get (id = id , lazy = lazy , ** kwargs ))
145+
126146 # Update without ID.
127- def update (self , name , new_data = None , ** kwargs ):
147+ # NOTE(jlvillal): Signature doesn't match UpdateMixin.update() so ignore
148+ # type error
149+ def update ( # type: ignore
150+ self ,
151+ name : Optional [str ],
152+ new_data : Optional [Dict [str , Any ]] = None ,
153+ ** kwargs : Any
154+ ) -> Dict [str , Any ]:
128155 """Update a Label on the server.
129156
130157 Args:
@@ -138,7 +165,9 @@ def update(self, name, new_data=None, **kwargs):
138165
139166 # Delete without ID.
140167 @exc .on_http_error (exc .GitlabDeleteError )
141- def delete (self , name , ** kwargs ):
168+ # NOTE(jlvillal): Signature doesn't match DeleteMixin.delete() so ignore
169+ # type error
170+ def delete (self , name : str , ** kwargs : Any ) -> None : # type: ignore
142171 """Delete a Label on the server.
143172
144173 Args:
@@ -149,4 +178,6 @@ def delete(self, name, **kwargs):
149178 GitlabAuthenticationError: If authentication is not correct
150179 GitlabDeleteError: If the server cannot perform the request
151180 """
181+ if TYPE_CHECKING :
182+ assert self .path is not None
152183 self .gitlab .http_delete (self .path , query_data = {"name" : name }, ** kwargs )
0 commit comments