Fix --help

Non-method attributes are shown using dir() when listing available
commands.

	usage: ogcli [-h] [{create,list,restore,rest,send,set,setup}]

'rest' is a class instance of OgRest and must not be
shown when listing available commands.

Method members of OgCLI class are the available commands that ogcli can
execute.
Use inspect module in order to get class members (getmembers) and filter
only those that are a method (ismethod).

	usage: ogcli [-h] [{create,list,restore,send,set,setup}]

Fixes: 0f2d1f1dba ("Show all valid commands when running ogcli --help")
master
Jose M. Guisado 2022-02-24 10:11:40 +01:00 committed by Jose M. Guisado Gomez
parent 0f2d1f1dba
commit 5c1137662e
1 changed files with 5 additions and 3 deletions

8
ogcli
View File

@ -7,6 +7,8 @@
# Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
from inspect import ismethod, getmembers
from cli.cli import OgCLI
import argparse
import json
@ -34,9 +36,9 @@ class CLI():
self.ogcli = OgCLI(self.cfg)
parser = argparse.ArgumentParser(prog='ogcli')
parser.add_argument('command', help='Subcommand to run',
choices=[attr for attr in dir(self.ogcli)
if not str.startswith(attr, "_")])
parser.add_argument('command', help='Subcommand to run', nargs='?',
choices=[attr for attr, _ in getmembers(self.ogcli, lambda x: ismethod(x))
if not attr.startswith('_')])
args = parser.parse_args(sys.argv[1:2])
if not hasattr(self.ogcli, args.command):