|
24 | 24 |
|
25 | 25 | from .protocol import SUPPORT_SCHEMA |
26 | 26 | from .utils import get_parent_tree, parse_value_string_by_schema, parse_schema_as_cmd, pydantic_schema_to_protocol |
27 | | -from .entrypoint_base import SchemaType, PropertyType, EntryPointABC, PydanticModelLike |
| 27 | +from .entrypoint_base import SchemaType, PropertyType, EntryPointABC, PydanticModelLike, CallerReturnType |
28 | 28 |
|
29 | 29 |
|
30 | 30 | class EntryPoint(EntryPointABC): |
@@ -185,7 +185,7 @@ def with_schema(self, schemaObj: Union[str, dict, PydanticModelLike]) -> Union[s |
185 | 185 | self.__doc__ = schemaObj.__doc__ |
186 | 186 | return schemaObj |
187 | 187 |
|
188 | | - def __call__(self, argv: Sequence[str]) -> Optional[Any]: |
| 188 | + def __call__(self, argv: Sequence[str]) -> Optional[CallerReturnType]: |
189 | 189 | if not self.usage: |
190 | 190 | if len(self._subcmds) == 0: |
191 | 191 | self.usage = f"{self.prog} [options]" |
@@ -215,23 +215,27 @@ def __call__(self, argv: Sequence[str]) -> Optional[Any]: |
215 | 215 | description=self.__doc__, |
216 | 216 | usage=self.usage, |
217 | 217 | formatter_class=argparse.RawDescriptionHelpFormatter) |
218 | | - self.pass_args_to_sub(parser, argv) |
219 | | - return None |
| 218 | + return self.pass_args_to_sub(parser, argv) |
| 219 | + |
220 | 220 | else: |
221 | 221 | parser = argparse.ArgumentParser( |
222 | 222 | prog=self.prog, |
223 | 223 | epilog=self.epilog, |
224 | 224 | description=self.__doc__, |
225 | 225 | usage=self.usage) |
226 | | - return self.parse_args(parser, argv) |
| 226 | + result = self.parse_args(parser, argv) |
| 227 | + if result is None: |
| 228 | + return result |
| 229 | + else: |
| 230 | + return {"caller": self.name, "result": result} |
227 | 231 |
|
228 | | - def pass_args_to_sub(self, parser: argparse.ArgumentParser, argv: Sequence[str]) -> None: |
| 232 | + def pass_args_to_sub(self, parser: argparse.ArgumentParser, argv: Sequence[str]) -> Optional[CallerReturnType]: |
229 | 233 | scmds = list(self._subcmds.keys()) |
230 | 234 | scmdss = ",".join(scmds) |
231 | 235 | parser.add_argument('subcmd', help=f'执行子命令,可选的子命有{scmdss}') |
232 | 236 | args = parser.parse_args(argv[0:1]) |
233 | 237 | if self._subcmds.get(args.subcmd): |
234 | | - self._subcmds[args.subcmd](argv[1:]) |
| 238 | + return self._subcmds[args.subcmd](argv[1:]) |
235 | 239 | else: |
236 | 240 | print(f'未知的子命令 `{argv[0]}`') |
237 | 241 | parser.print_help() |
|
0 commit comments