Test CLI action parser
This commit is contained in:
parent
cdd9dd4f6f
commit
8c1f64243f
1 changed files with 32 additions and 7 deletions
|
@ -16,6 +16,7 @@ class Config(object):
|
|||
self.rev = 4260
|
||||
self.argv = argv
|
||||
self.action = None
|
||||
self.test_parser = None
|
||||
self.pending_changes = {}
|
||||
self.need_restart = False
|
||||
self.keys_api_change_allowed = set([
|
||||
|
@ -203,6 +204,8 @@ class Config(object):
|
|||
action = self.subparsers.add_parser("testConnection", help='Testing')
|
||||
action = self.subparsers.add_parser("testAnnounce", help='Testing')
|
||||
|
||||
self.test_parser = self.subparsers.add_parser("test", help='Run a test')
|
||||
self.test_parser.add_argument('test_name', help='Test name', nargs="?")
|
||||
# Config parameters
|
||||
self.parser.add_argument('--verbose', help='More detailed logging', action='store_true')
|
||||
self.parser.add_argument('--debug', help='Debug mode', action='store_true')
|
||||
|
@ -356,8 +359,17 @@ class Config(object):
|
|||
valid_parameters.append(arg)
|
||||
return valid_parameters + plugin_parameters
|
||||
|
||||
def getParser(self, argv):
|
||||
action = self.getAction(argv)
|
||||
if not action:
|
||||
return self.parser
|
||||
else:
|
||||
return self.subparsers.choices[action]
|
||||
|
||||
# Parse arguments from config file and command line
|
||||
def parse(self, silent=False, parse_config=True):
|
||||
argv = self.argv[:] # Copy command line arguments
|
||||
current_parser = self.getParser(argv)
|
||||
if silent: # Don't display messages or quit on unknown parameter
|
||||
original_print_message = self.parser._print_message
|
||||
original_exit = self.parser.exit
|
||||
|
@ -365,11 +377,10 @@ class Config(object):
|
|||
def silencer(parser, function_name):
|
||||
parser.exited = True
|
||||
return None
|
||||
self.parser.exited = False
|
||||
self.parser._print_message = lambda *args, **kwargs: silencer(self.parser, "_print_message")
|
||||
self.parser.exit = lambda *args, **kwargs: silencer(self.parser, "exit")
|
||||
current_parser.exited = False
|
||||
current_parser._print_message = lambda *args, **kwargs: silencer(current_parser, "_print_message")
|
||||
current_parser.exit = lambda *args, **kwargs: silencer(current_parser, "exit")
|
||||
|
||||
argv = self.argv[:] # Copy command line arguments
|
||||
self.parseCommandline(argv, silent) # Parse argv
|
||||
self.setAttributes()
|
||||
if parse_config:
|
||||
|
@ -383,10 +394,10 @@ class Config(object):
|
|||
self.ip_local.append(self.fileserver_ip)
|
||||
|
||||
if silent: # Restore original functions
|
||||
if self.parser.exited and self.action == "main": # Argument parsing halted, don't start ZeroNet with main action
|
||||
if current_parser.exited and self.action == "main": # Argument parsing halted, don't start ZeroNet with main action
|
||||
self.action = None
|
||||
self.parser._print_message = original_print_message
|
||||
self.parser.exit = original_exit
|
||||
current_parser._print_message = original_print_message
|
||||
current_parser.exit = original_exit
|
||||
|
||||
self.loadTrackersFile()
|
||||
|
||||
|
@ -439,6 +450,16 @@ class Config(object):
|
|||
argv = argv[:1] + argv_extend + argv[1:]
|
||||
return argv
|
||||
|
||||
# Return command line value of given argument
|
||||
def getCmdlineValue(self, key):
|
||||
if key not in self.argv:
|
||||
return None
|
||||
argv_index = self.argv.index(key)
|
||||
if argv_index == len(self.argv) - 1: # last arg, test not specified
|
||||
return None
|
||||
|
||||
return self.argv[argv_index + 1]
|
||||
|
||||
# Expose arguments as class attributes
|
||||
def setAttributes(self):
|
||||
# Set attributes from arguments
|
||||
|
@ -457,7 +478,11 @@ class Config(object):
|
|||
@PluginManager.acceptPlugins
|
||||
class ConfigPlugin(object):
|
||||
def __init__(self, config):
|
||||
self.argv = config.argv
|
||||
self.parser = config.parser
|
||||
self.subparsers = config.subparsers
|
||||
self.test_parser = config.test_parser
|
||||
self.getCmdlineValue = config.getCmdlineValue
|
||||
self.createArguments()
|
||||
|
||||
def createArguments(self):
|
||||
|
|
Loading…
Reference in a new issue