@@ -89,6 +89,8 @@ def set_approvers(
89
89
approver_ids :Optional [List [int ]]= None ,
90
90
approver_group_ids :Optional [List [int ]]= None ,
91
91
approval_rule_name :str = "name" ,
92
+ * ,
93
+ approver_usernames :Optional [List [str ]]= None ,
92
94
** kwargs :Any ,
93
95
)-> RESTObject :
94
96
"""Change MR-level allowed approvers and approver groups.
@@ -104,13 +106,15 @@ def set_approvers(
104
106
"""
105
107
approver_ids = approver_ids or []
106
108
approver_group_ids = approver_group_ids or []
109
+ approver_usernames = approver_usernames or []
107
110
108
111
data = {
109
112
"name" :approval_rule_name ,
110
113
"approvals_required" :approvals_required ,
111
114
"rule_type" :"regular" ,
112
115
"user_ids" :approver_ids ,
113
116
"group_ids" :approver_group_ids ,
117
+ "usernames" :approver_usernames ,
114
118
}
115
119
if TYPE_CHECKING :
116
120
assert self ._parent is not None
@@ -124,6 +128,7 @@ def set_approvers(
124
128
ar .user_ids = data ["user_ids" ]
125
129
ar .approvals_required = data ["approvals_required" ]
126
130
ar .group_ids = data ["group_ids" ]
131
+ ar .usernames = data ["usernames" ]
127
132
ar .save ()
128
133
return ar
129
134
# if there was no rule matching the rule name, create a new one
@@ -145,14 +150,14 @@ class ProjectMergeRequestApprovalRuleManager(CRUDMixin, RESTManager):
145
150
"name" ,
146
151
"approvals_required" ,
147
152
),
148
- optional = ("user_ids" ,"group_ids" ),
153
+ optional = ("user_ids" ,"group_ids" , "usernames" ),
149
154
)
150
155
# Important: When approval_project_rule_id is set, the name, users and
151
156
# groups of project-level rule will be copied. The approvals_required
152
157
# specified will be used.
153
158
_create_attrs = RequiredOptional (
154
159
required = ("name" ,"approvals_required" ),
155
- optional = ("approval_project_rule_id" ,"user_ids" ,"group_ids" ),
160
+ optional = ("approval_project_rule_id" ,"user_ids" ,"group_ids" , "usernames" ),
156
161
)
157
162
158
163
def get (