11from gitlab .base import RESTObject
2- from gitlab .mixins import CreateMixin ,DeleteMixin ,ListMixin ,ObjectDeleteMixin
3- from gitlab .types import RequiredOptional
2+ from gitlab .mixins import (
3+ CreateMixin ,
4+ DeleteMixin ,
5+ ListMixin ,
6+ ObjectDeleteMixin ,
7+ ObjectRotateMixin ,
8+ RotateMixin ,
9+ )
10+ from gitlab .types import ArrayAttribute ,RequiredOptional
411
512__all__ = [
613"ServiceAccount" ,
714"ServiceAccountManager" ,
815"GroupServiceAccount" ,
916"GroupServiceAccountManager" ,
17+ "GroupServiceAccountAccessToken" ,
18+ "GroupServiceAccountAccessTokenManager" ,
1019]
1120
1221
1322class ServiceAccount (RESTObject ):
1423pass
1524
1625
17- class ServiceAccountManager (CreateMixin ,ListMixin , RESTManager ):
26+ class ServiceAccountManager (CreateMixin [ ServiceAccount ] ,ListMixin [ ServiceAccount ] ):
1827_path = "/service_accounts"
1928_obj_cls = ServiceAccount
20- _create_attrs = RequiredOptional (
21- optional = ("name" ,"username" ,"email" ),
22- )
29+ _create_attrs = RequiredOptional (optional = ("name" ,"username" ,"email" ))
2330
2431
2532class GroupServiceAccount (ObjectDeleteMixin ,RESTObject ):
@@ -35,3 +42,20 @@ class GroupServiceAccountManager(
3542_obj_cls = GroupServiceAccount
3643_from_parent_attrs = {"group_id" :"id" }
3744_create_attrs = RequiredOptional (optional = ("name" ,"username" ))
45+
46+
47+ class GroupServiceAccountAccessToken (ObjectRotateMixin ,RESTObject ):
48+ pass
49+
50+
51+ class GroupServiceAccountAccessTokenManager (
52+ CreateMixin [GroupServiceAccountAccessToken ],
53+ RotateMixin [GroupServiceAccountAccessToken ],
54+ ):
55+ _path = "/groups/{group_id}/service_accounts/{user_id}/personal_access_tokens"
56+ _obj_cls = GroupServiceAccountAccessToken
57+ _from_parent_attrs = {"group_id" :"id" ,"user_id" :"user_id" }
58+ _create_attrs = RequiredOptional (
59+ required = ("name" ,"scopes" ),optional = ("expires_at" ,)
60+ )
61+ _types = {"scopes" :ArrayAttribute }