8000 fix: duplicate subparsers being added to argparse · python-gitlab/python-gitlab@6f013d1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6f013d1

Browse files
fix: duplicate subparsers being added to argparse
Python 3.11 added an additional check in the argparse libary which detected duplicate subparsers being added. We had duplicate subparsers being added. Make sure we don't add duplicate subparsers. Closes: #2015
1 parent 6b47c26 commit 6f013d1

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

gitlab/v4/cli.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,12 @@ def _populate_sub_parser_by_class(
200200
mgr_cls_name = f"{cls.__name__}Manager"
201201
mgr_cls = getattr(gitlab.v4.objects, mgr_cls_name)
202202

203+
action_parsers = set()
203204
for action_name in ["list", "get", "create", "update", "delete"]:
204205
if not hasattr(mgr_cls, action_name):
205206
continue
206207

208+
action_parsers.add(action_name)
207209
sub_parser_action = sub_parser.add_parser(action_name)
208210
sub_parser_action.add_argument("--sudo", required=False)
209211
if mgr_cls._from_parent_attrs:
@@ -268,6 +270,9 @@ def _populate_sub_parser_by_class(
268270
if cls.__name__ in cli.custom_actions:
269271
name = cls.__name__
270272
for action_name in cli.custom_actions[name]:
273+
if action_name in action_parsers:
274+
continue
275+
271276
sub_parser_action = sub_parser.add_parser(action_name)
272277
# Get the attributes for URL/path construction
273278
if mgr_cls._from_parent_attrs:
@@ -326,16 +331,15 @@ def extend_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
326331
subparsers.required = True
327332

328333
# populate argparse for all Gitlab Object
329-
classes = []
334+
classes = set()
330335
for cls in gitlab.v4.objects.__dict__.values():
331336
if not isinstance(cls, type):
332337
continue
333338
if issubclass(cls, gitlab.base.RESTManager):
334339
if cls._obj_cls is not None:
335-
classes.append(cls._obj_cls)
336-
classes.sort(key=operator.attrgetter("__name__"))
340+
classes.add(cls._obj_cls)
337341

338-
for cls in classes:
342+
for cls in sorted(classes, key=operator.attrgetter("__name__")):
339343
arg_name = cli.cls_to_what(cls)
340344
object_group = subparsers.add_parser(arg_name)
341345

0 commit comments

Comments
 (0)
0