Skip to content

Commit c0d8810

Browse files
nejchJohnVillalovos
authored andcommitted
refactor: use new-style formatting for named placeholders
1 parent 472b300 commit c0d8810

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+148
-164
lines changed

gitlab/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ def _compute_path(self, path: Optional[str] = None) -> Optional[str]:
320320
for self_attr, parent_attr in self._from_parent_attrs.items()
321321
}
322322
self._parent_attrs = data
323-
return path % data
323+
return path.format(**data)
324324

325325
@property
326326
def path(self) -> Optional[str]:

gitlab/v4/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def __init__(
5353
# the class _path attribute, and replace the value with the result.
5454
if TYPE_CHECKING:
5555
assert self.mgr_cls._path is not None
56-
self.mgr_cls._path = self.mgr_cls._path % self.args
56+
self.mgr_cls._path = self.mgr_cls._path.format(**self.args)
5757
self.mgr = self.mgr_cls(gl)
5858

5959
if self.mgr_cls._types:

gitlab/v4/objects/access_requests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class GroupAccessRequest(AccessRequestMixin, ObjectDeleteMixin, RESTObject):
2020

2121

2222
class GroupAccessRequestManager(ListMixin, CreateMixin, DeleteMixin, RESTManager):
23-
_path = "/groups/%(group_id)s/access_requests"
23+
_path = "/groups/{group_id}/access_requests"
2424
_obj_cls = GroupAccessRequest
2525
_from_parent_attrs = {"group_id": "id"}
2626

@@ -30,6 +30,6 @@ class ProjectAccessRequest(AccessRequestMixin, ObjectDeleteMixin, RESTObject):
3030

3131

3232
class ProjectAccessRequestManager(ListMixin, CreateMixin, DeleteMixin, RESTManager):
33-
_path = "/projects/%(project_id)s/access_requests"
33+
_path = "/projects/{project_id}/access_requests"
3434
_obj_cls = ProjectAccessRequest
3535
_from_parent_attrs = {"project_id": "id"}

gitlab/v4/objects/audit_events.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class GroupAuditEvent(RESTObject):
3232

3333

3434
class GroupAuditEventManager(RetrieveMixin, RESTManager):
35-
_path = "/groups/%(group_id)s/audit_events"
35+
_path = "/groups/{group_id}/audit_events"
3636
_obj_cls = GroupAuditEvent
3737
_from_parent_attrs = {"group_id": "id"}
3838
_list_filters = ("created_after", "created_before")
@@ -43,7 +43,7 @@ class ProjectAuditEvent(RESTObject):
4343

4444

4545
class ProjectAuditEventManager(RetrieveMixin, RESTManager):
46-
_path = "/projects/%(project_id)s/audit_events"
46+
_path = "/projects/{project_id}/audit_events"
4747
_obj_cls = ProjectAuditEvent
4848
_from_parent_attrs = {"project_id": "id"}
4949
_list_filters = ("created_after", "created_before")

gitlab/v4/objects/award_emojis.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class ProjectIssueAwardEmoji(ObjectDeleteMixin, RESTObject):
2222

2323

2424
class ProjectIssueAwardEmojiManager(NoUpdateMixin, RESTManager):
25-
_path = "/projects/%(project_id)s/issues/%(issue_iid)s/award_emoji"
25+
_path = "/projects/{project_id}/issues/{issue_iid}/award_emoji"
2626
_obj_cls = ProjectIssueAwardEmoji
2727
_from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"}
2828
_create_attrs = RequiredOptional(required=("name",))
@@ -33,9 +33,7 @@ class ProjectIssueNoteAwardEmoji(ObjectDeleteMixin, RESTObject):
3333

3434

3535
class ProjectIssueNoteAwardEmojiManager(NoUpdateMixin, RESTManager):
36-
_path = (
37-
"/projects/%(project_id)s/issues/%(issue_iid)s" "/notes/%(note_id)s/award_emoji"
38-
)
36+
_path = "/projects/{project_id}/issues/{issue_iid}/notes/{note_id}/award_emoji"
3937
_obj_cls = ProjectIssueNoteAwardEmoji
4038
_from_parent_attrs = {
4139
"project_id": "project_id",
@@ -50,7 +48,7 @@ class ProjectMergeRequestAwardEmoji(ObjectDeleteMixin, RESTObject):
5048

5149

5250
class ProjectMergeRequestAwardEmojiManager(NoUpdateMixin, RESTManager):
53-
_path = "/projects/%(project_id)s/merge_requests/%(mr_iid)s/award_emoji"
51+
_path = "/projects/{project_id}/merge_requests/{mr_iid}/award_emoji"
5452
_obj_cls = ProjectMergeRequestAwardEmoji
5553
_from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"}
5654
_create_attrs = RequiredOptional(required=("name",))
@@ -61,10 +59,7 @@ class ProjectMergeRequestNoteAwardEmoji(ObjectDeleteMixin, RESTObject):
6159

6260

6361
class ProjectMergeRequestNoteAwardEmojiManager(NoUpdateMixin, RESTManager):
64-
_path = (
65-
"/projects/%(project_id)s/merge_requests/%(mr_iid)s"
66-
"/notes/%(note_id)s/award_emoji"
67-
)
62+
_path = "/projects/{project_id}/merge_requests/{mr_iid}/notes/{note_id}/award_emoji"
6863
_obj_cls = ProjectMergeRequestNoteAwardEmoji
6964
_from_parent_attrs = {
7065
"project_id": "project_id",
@@ -79,7 +74,7 @@ class ProjectSnippetAwardEmoji(ObjectDeleteMixin, RESTObject):
7974

8075

8176
class ProjectSnippetAwardEmojiManager(NoUpdateMixin, RESTManager):
82-
_path = "/projects/%(project_id)s/snippets/%(snippet_id)s/award_emoji"
77+
_path = "/projects/{project_id}/snippets/{snippet_id}/award_emoji"
8378
_obj_cls = ProjectSnippetAwardEmoji
8479
_from_parent_attrs = {"project_id": "project_id", "snippet_id": "id"}
8580
_create_attrs = RequiredOptional(required=("name",))
@@ -90,10 +85,7 @@ class ProjectSnippetNoteAwardEmoji(ObjectDeleteMixin, RESTObject):
9085

9186

9287
class ProjectSnippetNoteAwardEmojiManager(NoUpdateMixin, RESTManager):
93-
_path = (
94-
"/projects/%(project_id)s/snippets/%(snippet_id)s"
95-
"/notes/%(note_id)s/award_emoji"
96-
)
88+
_path = "/projects/{project_id}/snippets/{snippet_id}/notes/{note_id}/award_emoji"
9789
_obj_cls = ProjectSnippetNoteAwardEmoji
9890
_from_parent_attrs = {
9991
"project_id": "project_id",

gitlab/v4/objects/badges.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class GroupBadge(SaveMixin, ObjectDeleteMixin, RESTObject):
1616

1717

1818
class GroupBadgeManager(BadgeRenderMixin, CRUDMixin, RESTManager):
19-
_path = "/groups/%(group_id)s/badges"
19+
_path = "/groups/{group_id}/badges"
2020
_obj_cls = GroupBadge
2121
_from_parent_attrs = {"group_id": "id"}
2222
_create_attrs = RequiredOptional(required=("link_url", "image_url"))
@@ -28,7 +28,7 @@ class ProjectBadge(SaveMixin, ObjectDeleteMixin, RESTObject):
2828

2929

3030
class ProjectBadgeManager(BadgeRenderMixin, CRUDMixin, RESTManager):
31-
_path = "/projects/%(project_id)s/badges"
31+
_path = "/projects/{project_id}/badges"
3232
_obj_cls = ProjectBadge
3333
_from_parent_attrs = {"project_id": "id"}
3434
_create_attrs = RequiredOptional(required=("link_url", "image_url"))

gitlab/v4/objects/boards.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class GroupBoardList(SaveMixin, ObjectDeleteMixin, RESTObject):
2020

2121

2222
class GroupBoardListManager(CRUDMixin, RESTManager):
23-
_path = "/groups/%(group_id)s/boards/%(board_id)s/lists"
23+
_path = "/groups/{group_id}/boards/{board_id}/lists"
2424
_obj_cls = GroupBoardList
2525
_from_parent_attrs = {"group_id": "group_id", "board_id": "id"}
2626
_create_attrs = RequiredOptional(required=("label_id",))
@@ -37,7 +37,7 @@ class GroupBoard(SaveMixin, ObjectDeleteMixin, RESTObject):
3737

3838

3939
class GroupBoardManager(CRUDMixin, RESTManager):
40-
_path = "/groups/%(group_id)s/boards"
40+
_path = "/groups/{group_id}/boards"
4141
_obj_cls = GroupBoard
4242
_from_parent_attrs = {"group_id": "id"}
4343
_create_attrs = RequiredOptional(required=("name",))
@@ -51,7 +51,7 @@ class ProjectBoardList(SaveMixin, ObjectDeleteMixin, RESTObject):
5151

5252

5353
class ProjectBoardListManager(CRUDMixin, RESTManager):
54-
_path = "/projects/%(project_id)s/boards/%(board_id)s/lists"
54+
_path = "/projects/{project_id}/boards/{board_id}/lists"
5555
_obj_cls = ProjectBoardList
5656
_from_parent_attrs = {"project_id": "project_id", "board_id": "id"}
5757
_create_attrs = RequiredOptional(required=("label_id",))
@@ -68,7 +68,7 @@ class ProjectBoard(SaveMixin, ObjectDeleteMixin, RESTObject):
6868

6969

7070
class ProjectBoardManager(CRUDMixin, RESTManager):
71-
_path = "/projects/%(project_id)s/boards"
71+
_path = "/projects/{project_id}/boards"
7272
_obj_cls = ProjectBoard
7373
_from_parent_attrs = {"project_id": "id"}
7474
_create_attrs = RequiredOptional(required=("name",))

gitlab/v4/objects/branches.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class ProjectBranch(ObjectDeleteMixin, RESTObject):
1414

1515

1616
class ProjectBranchManager(NoUpdateMixin, RESTManager):
17-
_path = "/projects/%(project_id)s/repository/branches"
17+
_path = "/projects/{project_id}/repository/branches"
1818
_obj_cls = ProjectBranch
1919
_from_parent_attrs = {"project_id": "id"}
2020
_create_attrs = RequiredOptional(required=("branch", "ref"))
@@ -25,7 +25,7 @@ class ProjectProtectedBranch(ObjectDeleteMixin, RESTObject):
2525

2626

2727
class ProjectProtectedBranchManager(NoUpdateMixin, RESTManager):
28-
_path = "/projects/%(project_id)s/protected_branches"
28+
_path = "/projects/{project_id}/protected_branches"
2929
_obj_cls = ProjectProtectedBranch
3030
_from_parent_attrs = {"project_id": "id"}
3131
_create_attrs = RequiredOptional(

gitlab/v4/objects/clusters.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class GroupCluster(SaveMixin, ObjectDeleteMixin, RESTObject):
1717

1818

1919
class GroupClusterManager(CRUDMixin, RESTManager):
20-
_path = "/groups/%(group_id)s/clusters"
20+
_path = "/groups/{group_id}/clusters"
2121
_obj_cls = GroupCluster
2222
_from_parent_attrs = {"group_id": "id"}
2323
_create_attrs = RequiredOptional(
@@ -63,7 +63,7 @@ class ProjectCluster(SaveMixin, ObjectDeleteMixin, RESTObject):
6363

6464

6565
class ProjectClusterManager(CRUDMixin, RESTManager):
66-
_path = "/projects/%(project_id)s/clusters"
66+
_path = "/projects/{project_id}/clusters"
6767
_obj_cls = ProjectCluster
6868
_from_parent_attrs = {"project_id": "id"}
6969
_create_attrs = RequiredOptional(

gitlab/v4/objects/commits.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def signature(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
143143

144144

145145
class ProjectCommitManager(RetrieveMixin, CreateMixin, RESTManager):
146-
_path = "/projects/%(project_id)s/repository/commits"
146+
_path = "/projects/{project_id}/repository/commits"
147147
_obj_cls = ProjectCommit
148148
_from_parent_attrs = {"project_id": "id"}
149149
_create_attrs = RequiredOptional(
@@ -158,7 +158,7 @@ class ProjectCommitComment(RESTObject):
158158

159159

160160
class ProjectCommitCommentManager(ListMixin, CreateMixin, RESTManager):
161-
_path = "/projects/%(project_id)s/repository/commits/%(commit_id)s" "/comments"
161+
_path = "/projects/{project_id}/repository/commits/{commit_id}/comments"
162162
_obj_cls = ProjectCommitComment
163163
_from_parent_attrs = {"project_id": "project_id", "commit_id": "id"}
164164
_create_attrs = RequiredOptional(
@@ -171,7 +171,7 @@ class ProjectCommitStatus(RefreshMixin, RESTObject):
171171

172172

173173
class ProjectCommitStatusManager(ListMixin, CreateMixin, RESTManager):
174-
_path = "/projects/%(project_id)s/repository/commits/%(commit_id)s" "/statuses"
174+
_path = "/projects/{project_id}/repository/commits/{commit_id}/statuses"
175175
_obj_cls = ProjectCommitStatus
176176
_from_parent_attrs = {"project_id": "project_id", "commit_id": "id"}
177177
_create_attrs = RequiredOptional(
@@ -202,10 +202,10 @@ def create(
202202
# project_id and commit_id are in the data dict when using the CLI, but
203203
# they are missing when using only the API
204204
# See #511
205-
base_path = "/projects/%(project_id)s/statuses/%(commit_id)s"
205+
base_path = "/projects/{project_id}/statuses/{commit_id}"
206206
path: Optional[str]
207207
if data is not None and "project_id" in data and "commit_id" in data:
208-
path = base_path % data
208+
path = base_path.format(**data)
209209
else:
210210
path = self._compute_path(base_path)
211211
if TYPE_CHECKING:

gitlab/v4/objects/container_registry.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class ProjectRegistryRepository(ObjectDeleteMixin, RESTObject):
1818

1919

2020
class ProjectRegistryRepositoryManager(DeleteMixin, ListMixin, RESTManager):
21-
_path = "/projects/%(project_id)s/registry/repositories"
21+
_path = "/projects/{project_id}/registry/repositories"
2222
_obj_cls = ProjectRegistryRepository
2323
_from_parent_attrs = {"project_id": "id"}
2424

@@ -30,7 +30,7 @@ class ProjectRegistryTag(ObjectDeleteMixin, RESTObject):
3030
class ProjectRegistryTagManager(DeleteMixin, RetrieveMixin, RESTManager):
3131
_obj_cls = ProjectRegistryTag
3232
_from_parent_attrs = {"project_id": "project_id", "repository_id": "id"}
33-
_path = "/projects/%(project_id)s/registry/repositories/%(repository_id)s/tags"
33+
_path = "/projects/{project_id}/registry/repositories/{repository_id}/tags"
3434

3535
@cli.register_custom_action(
3636
"ProjectRegistryTagManager",

gitlab/v4/objects/custom_attributes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class GroupCustomAttribute(ObjectDeleteMixin, RESTObject):
1616

1717

1818
class GroupCustomAttributeManager(RetrieveMixin, SetMixin, DeleteMixin, RESTManager):
19-
_path = "/groups/%(group_id)s/custom_attributes"
19+
_path = "/groups/{group_id}/custom_attributes"
2020
_obj_cls = GroupCustomAttribute
2121
_from_parent_attrs = {"group_id": "id"}
2222

@@ -26,7 +26,7 @@ class ProjectCustomAttribute(ObjectDeleteMixin, RESTObject):
2626

2727

2828
class ProjectCustomAttributeManager(RetrieveMixin, SetMixin, DeleteMixin, RESTManager):
29-
_path = "/projects/%(project_id)s/custom_attributes"
29+
_path = "/projects/{project_id}/custom_attributes"
3030
_obj_cls = ProjectCustomAttribute
3131
_from_parent_attrs = {"project_id": "id"}
3232

@@ -36,6 +36,6 @@ class UserCustomAttribute(ObjectDeleteMixin, RESTObject):
3636

3737

3838
class UserCustomAttributeManager(RetrieveMixin, SetMixin, DeleteMixin, RESTManager):
39-
_path = "/users/%(user_id)s/custom_attributes"
39+
_path = "/users/{user_id}/custom_attributes"
4040
_obj_cls = UserCustomAttribute
4141
_from_parent_attrs = {"user_id": "id"}

gitlab/v4/objects/deploy_keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class ProjectKey(SaveMixin, ObjectDeleteMixin, RESTObject):
2929

3030

3131
class ProjectKeyManager(CRUDMixin, RESTManager):
32-
_path = "/projects/%(project_id)s/deploy_keys"
32+
_path = "/projects/{project_id}/deploy_keys"
3333
_obj_cls = ProjectKey
3434
_from_parent_attrs = {"project_id": "id"}
3535
_create_attrs = RequiredOptional(required=("title", "key"), optional=("can_push",))

gitlab/v4/objects/deploy_tokens.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class GroupDeployToken(ObjectDeleteMixin, RESTObject):
2626

2727

2828
class GroupDeployTokenManager(ListMixin, CreateMixin, DeleteMixin, RESTManager):
29-
_path = "/groups/%(group_id)s/deploy_tokens"
29+
_path = "/groups/{group_id}/deploy_tokens"
3030
_from_parent_attrs = {"group_id": "id"}
3131
_obj_cls = GroupDeployToken
3232
_create_attrs = RequiredOptional(
@@ -47,7 +47,7 @@ class ProjectDeployToken(ObjectDeleteMixin, RESTObject):
4747

4848

4949
class ProjectDeployTokenManager(ListMixin, CreateMixin, DeleteMixin, RESTManager):
50-
_path = "/projects/%(project_id)s/deploy_tokens"
50+
_path = "/projects/{project_id}/deploy_tokens"
5151
_from_parent_attrs = {"project_id": "id"}
5252
_obj_cls = ProjectDeployToken
5353
_create_attrs = RequiredOptional(

gitlab/v4/objects/deployments.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class ProjectDeployment(SaveMixin, RESTObject):
1414

1515

1616
class ProjectDeploymentManager(RetrieveMixin, CreateMixin, UpdateMixin, RESTManager):
17-
_path = "/projects/%(project_id)s/deployments"
17+
_path = "/projects/{project_id}/deployments"
1818
_obj_cls = ProjectDeployment
1919
_from_parent_attrs = {"project_id": "id"}
2020
_list_filters = (

gitlab/v4/objects/discussions.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class ProjectCommitDiscussion(RESTObject):
2525

2626

2727
class ProjectCommitDiscussionManager(RetrieveMixin, CreateMixin, RESTManager):
28-
_path = "/projects/%(project_id)s/repository/commits/%(commit_id)s/" "discussions"
28+
_path = "/projects/{project_id}/repository/commits/{commit_id}/discussions"
2929
_obj_cls = ProjectCommitDiscussion
3030
_from_parent_attrs = {"project_id": "project_id", "commit_id": "id"}
3131
_create_attrs = RequiredOptional(required=("body",), optional=("created_at",))
@@ -36,7 +36,7 @@ class ProjectIssueDiscussion(RESTObject):
3636

3737

3838
class ProjectIssueDiscussionManager(RetrieveMixin, CreateMixin, RESTManager):
39-
_path = "/projects/%(project_id)s/issues/%(issue_iid)s/discussions"
39+
_path = "/projects/{project_id}/issues/{issue_iid}/discussions"
4040
_obj_cls = ProjectIssueDiscussion
4141
_from_parent_attrs = {"project_id": "project_id", "issue_iid": "iid"}
4242
_create_attrs = RequiredOptional(required=("body",), optional=("created_at",))
@@ -49,7 +49,7 @@ class ProjectMergeRequestDiscussion(SaveMixin, RESTObject):
4949
class ProjectMergeRequestDiscussionManager(
5050
RetrieveMixin, CreateMixin, UpdateMixin, RESTManager
5151
):
52-
_path = "/projects/%(project_id)s/merge_requests/%(mr_iid)s/discussions"
52+
_path = "/projects/{project_id}/merge_requests/{mr_iid}/discussions"
5353
_obj_cls = ProjectMergeRequestDiscussion
5454
_from_parent_attrs = {"project_id": "project_id", "mr_iid": "iid"}
5555
_create_attrs = RequiredOptional(
@@ -63,7 +63,7 @@ class ProjectSnippetDiscussion(RESTObject):
6363

6464

6565
class ProjectSnippetDiscussionManager(RetrieveMixin, CreateMixin, RESTManager):
66-
_path = "/projects/%(project_id)s/snippets/%(snippet_id)s/discussions"
66+
_path = "/projects/{project_id}/snippets/{snippet_id}/discussions"
6767
_obj_cls = ProjectSnippetDiscussion
6868
_from_parent_attrs = {"project_id": "project_id", "snippet_id": "id"}
6969
_create_attrs = RequiredOptional(required=("body",), optional=("created_at",))

gitlab/v4/objects/environments.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def stop(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
4343
class ProjectEnvironmentManager(
4444
RetrieveMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTManager
4545
):
46-
_path = "/projects/%(project_id)s/environments"
46+
_path = "/projects/{project_id}/environments"
4747
_obj_cls = ProjectEnvironment
4848
_from_parent_attrs = {"project_id": "id"}
4949
_create_attrs = RequiredOptional(required=("name",), optional=("external_url",))

gitlab/v4/objects/epics.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class GroupEpic(ObjectDeleteMixin, SaveMixin, RESTObject):
2929

3030

3131
class GroupEpicManager(CRUDMixin, RESTManager):
32-
_path = "/groups/%(group_id)s/epics"
32+
_path = "/groups/{group_id}/epics"
3333
_obj_cls = GroupEpic
3434
_from_parent_attrs = {"group_id": "id"}
3535
_list_filters = ("author_id", "labels", "order_by", "sort", "search")
@@ -71,7 +71,7 @@ def save(self, **kwargs):
7171
class GroupEpicIssueManager(
7272
ListMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTManager
7373
):
74-
_path = "/groups/%(group_id)s/epics/%(epic_iid)s/issues"
74+
_path = "/groups/{group_id}/epics/{epic_iid}/issues"
7575
_obj_cls = GroupEpicIssue
7676
_from_parent_attrs = {"group_id": "group_id", "epic_iid": "iid"}
7777
_create_attrs = RequiredOptional(required=("issue_id",))

0 commit comments

Comments
 (0)