From 742829c8665cb0e5197c2232f4d1488e92f17f0e Mon Sep 17 00:00:00 2001 From: Qiu Wenbo Date: Fri, 19 May 2023 17:12:55 +0800 Subject: [PATCH] oebuild: fix error on python3.11 Adding two subparsers with same name is a hard error on python 3.11. Signed-off-by: Qiu Wenbo --- src/oebuild/app/main.py | 7 +++++-- src/oebuild/command.py | 9 ++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/oebuild/app/main.py b/src/oebuild/app/main.py index 616af9b..aa62d6f 100644 --- a/src/oebuild/app/main.py +++ b/src/oebuild/app/main.py @@ -37,6 +37,7 @@ class OebuildApp: self.base_oebuild_dir = oebuild_util.get_base_oebuild() self.oebuild_parser = None self.subparser_gen = None + self.subparsers = {} self.cmd = None try: plugins_dir = pathlib.Path(self.base_oebuild_dir,'app/conf','plugins.yaml') @@ -70,7 +71,8 @@ class OebuildApp: # Add sub-parsers for the command_ext commands. for command_name in self.command_ext: - subparser_gen.add_parser(command_name, add_help=False) + subparser = subparser_gen.add_parser(command_name, add_help=False) + self.subparsers[command_name] = subparser # Save the instance state. self.oebuild_parser = oebuild_parser @@ -132,7 +134,8 @@ class OebuildApp: # Check a program invariant. self.cmd =self.command_spec[name].factory() - args = self.cmd.add_parser(self.subparser_gen) + parser = self.subparsers[name] + args = self.cmd.add_parser(parser) self.cmd.run(args, unknown) diff --git a/src/oebuild/command.py b/src/oebuild/command.py index a87abd3..3351658 100644 --- a/src/oebuild/command.py +++ b/src/oebuild/command.py @@ -78,13 +78,16 @@ class OebuildCommand(ABC): ''' args = args.parse_args(['-h']) - def _parser(self, parser_adder, **kwargs): - # Create and return a "standard" parser. + def _parser(self, parser, **kwargs): + # return a "standard" parser. kwargs['help'] = self.help_msg kwargs['description'] = self.description kwargs['formatter_class'] = argparse.RawDescriptionHelpFormatter - return parser_adder.add_parser(self.name, **kwargs) + + parser.__dict__.update(kwargs) + + return parser class CommandError(RuntimeError): -- Gitee