Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite812380

Browse files
fix: duplicate subparsers being added to argparse
Python 3.11 added an additional check in the argparse libary whichdetected duplicate subparsers being added. We had duplicate subparsersbeing added.Make sure we don't add duplicate subparsers.Closes:#2015
1 parent6b47c26 commite812380

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

‎gitlab/v4/cli.py‎

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,15 @@ 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:Dict[str,argparse.ArgumentParser]= {}
203204
foraction_namein ["list","get","create","update","delete"]:
204205
ifnothasattr(mgr_cls,action_name):
205206
continue
206207

207-
sub_parser_action=sub_parser.add_parser(action_name)
208+
sub_parser_action=sub_parser.add_parser(
209+
action_name,conflict_handler="resolve"
210+
)
211+
action_parsers[action_name]=sub_parser_action
208212
sub_parser_action.add_argument("--sudo",required=False)
209213
ifmgr_cls._from_parent_attrs:
210214
forxinmgr_cls._from_parent_attrs:
@@ -268,7 +272,10 @@ def _populate_sub_parser_by_class(
268272
ifcls.__name__incli.custom_actions:
269273
name=cls.__name__
270274
foraction_nameincli.custom_actions[name]:
271-
sub_parser_action=sub_parser.add_parser(action_name)
275+
ifaction_nameinaction_parsers:
276+
sub_parser_action=action_parsers[action_name]
277+
else:
278+
sub_parser_action=sub_parser.add_parser(action_name)
272279
# Get the attributes for URL/path construction
273280
ifmgr_cls._from_parent_attrs:
274281
forxinmgr_cls._from_parent_attrs:
@@ -298,13 +305,18 @@ def _populate_sub_parser_by_class(
298305
ifmgr_cls.__name__incli.custom_actions:
299306
name=mgr_cls.__name__
300307
foraction_nameincli.custom_actions[name]:
301-
sub_parser_action=sub_parser.add_parser(action_name)
308+
ifaction_nameinaction_parsers:
309+
sub_parser_action=action_parsers[action_name]
310+
else:
311+
sub_parser_action=sub_parser.add_parser(action_name)
302312
ifmgr_cls._from_parent_attrs:
303313
forxinmgr_cls._from_parent_attrs:
304314
sub_parser_action.add_argument(
305315
f"--{x.replace('_','-')}",required=True
306316
)
307-
sub_parser_action.add_argument("--sudo",required=False)
317+
sub_parser_action.sub_parser_action.add_argument(
318+
"--sudo",required=False
319+
)
308320

309321
required,optional,dummy=cli.custom_actions[name][action_name]
310322
forxinrequired:
@@ -326,16 +338,15 @@ def extend_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
326338
subparsers.required=True
327339

328340
# populate argparse for all Gitlab Object
329-
classes=[]
341+
classes=set()
330342
forclsingitlab.v4.objects.__dict__.values():
331343
ifnotisinstance(cls,type):
332344
continue
333345
ifissubclass(cls,gitlab.base.RESTManager):
334346
ifcls._obj_clsisnotNone:
335-
classes.append(cls._obj_cls)
336-
classes.sort(key=operator.attrgetter("__name__"))
347+
classes.add(cls._obj_cls)
337348

338-
forclsinclasses:
349+
forclsinsorted(classes,key=operator.attrgetter("__name__")):
339350
arg_name=cli.cls_to_what(cls)
340351
object_group=subparsers.add_parser(arg_name)
341352

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp