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.rev = 4260
|
||||||
self.argv = argv
|
self.argv = argv
|
||||||
self.action = None
|
self.action = None
|
||||||
|
self.test_parser = None
|
||||||
self.pending_changes = {}
|
self.pending_changes = {}
|
||||||
self.need_restart = False
|
self.need_restart = False
|
||||||
self.keys_api_change_allowed = set([
|
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("testConnection", help='Testing')
|
||||||
action = self.subparsers.add_parser("testAnnounce", 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
|
# Config parameters
|
||||||
self.parser.add_argument('--verbose', help='More detailed logging', action='store_true')
|
self.parser.add_argument('--verbose', help='More detailed logging', action='store_true')
|
||||||
self.parser.add_argument('--debug', help='Debug mode', 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)
|
valid_parameters.append(arg)
|
||||||
return valid_parameters + plugin_parameters
|
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
|
# Parse arguments from config file and command line
|
||||||
def parse(self, silent=False, parse_config=True):
|
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
|
if silent: # Don't display messages or quit on unknown parameter
|
||||||
original_print_message = self.parser._print_message
|
original_print_message = self.parser._print_message
|
||||||
original_exit = self.parser.exit
|
original_exit = self.parser.exit
|
||||||
|
@ -365,11 +377,10 @@ class Config(object):
|
||||||
def silencer(parser, function_name):
|
def silencer(parser, function_name):
|
||||||
parser.exited = True
|
parser.exited = True
|
||||||
return None
|
return None
|
||||||
self.parser.exited = False
|
current_parser.exited = False
|
||||||
self.parser._print_message = lambda *args, **kwargs: silencer(self.parser, "_print_message")
|
current_parser._print_message = lambda *args, **kwargs: silencer(current_parser, "_print_message")
|
||||||
self.parser.exit = lambda *args, **kwargs: silencer(self.parser, "exit")
|
current_parser.exit = lambda *args, **kwargs: silencer(current_parser, "exit")
|
||||||
|
|
||||||
argv = self.argv[:] # Copy command line arguments
|
|
||||||
self.parseCommandline(argv, silent) # Parse argv
|
self.parseCommandline(argv, silent) # Parse argv
|
||||||
self.setAttributes()
|
self.setAttributes()
|
||||||
if parse_config:
|
if parse_config:
|
||||||
|
@ -383,10 +394,10 @@ class Config(object):
|
||||||
self.ip_local.append(self.fileserver_ip)
|
self.ip_local.append(self.fileserver_ip)
|
||||||
|
|
||||||
if silent: # Restore original functions
|
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.action = None
|
||||||
self.parser._print_message = original_print_message
|
current_parser._print_message = original_print_message
|
||||||
self.parser.exit = original_exit
|
current_parser.exit = original_exit
|
||||||
|
|
||||||
self.loadTrackersFile()
|
self.loadTrackersFile()
|
||||||
|
|
||||||
|
@ -439,6 +450,16 @@ class Config(object):
|
||||||
argv = argv[:1] + argv_extend + argv[1:]
|
argv = argv[:1] + argv_extend + argv[1:]
|
||||||
return argv
|
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
|
# Expose arguments as class attributes
|
||||||
def setAttributes(self):
|
def setAttributes(self):
|
||||||
# Set attributes from arguments
|
# Set attributes from arguments
|
||||||
|
@ -457,7 +478,11 @@ class Config(object):
|
||||||
@PluginManager.acceptPlugins
|
@PluginManager.acceptPlugins
|
||||||
class ConfigPlugin(object):
|
class ConfigPlugin(object):
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
|
self.argv = config.argv
|
||||||
self.parser = config.parser
|
self.parser = config.parser
|
||||||
|
self.subparsers = config.subparsers
|
||||||
|
self.test_parser = config.test_parser
|
||||||
|
self.getCmdlineValue = config.getCmdlineValue
|
||||||
self.createArguments()
|
self.createArguments()
|
||||||
|
|
||||||
def createArguments(self):
|
def createArguments(self):
|
||||||
|
|
Loading…
Reference in a new issue