Skip to content
Snippets Groups Projects
Commit 96a2ff4b authored by jkerdreu's avatar jkerdreu
Browse files

Better command line handling

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2800 b32b6428-25c9-4566-ad07-03861ab6144f
parent 17baa940
No related branches found
No related tags found
No related merge requests found
......@@ -37,7 +37,6 @@ class Colors(Enum):
ADDR = fore.LIGHT_RED
INFO = fore.CYAN
def __str__(self):
return self.value
......@@ -111,9 +110,9 @@ class ToolboxHelper(object):
def setup_parser(self):
self.parser = OptionParser()
self.parser.add_option("-C", "--no-color", dest="no_color",help="disable color",action="store_true", default=False)
self.parser.add_option("-A" , "--mcast-addr", dest="mcast_addr",help="Multicast address",default=None)
self.parser.add_option("-P" , "--mcast-port", dest="mcast_port",help="Multicast port",default=None)
self.parser.add_option("-c" , dest="no_color",help="disable color",action="store_true", default=False)
self.parser.add_option("-a" , dest="mcast_addr",help="Multicast address",default=config.address)
self.parser.add_option("-p" , dest="mcast_port",help="Multicast port",default=config.port)
return self.parser
def setup_device(self):
......@@ -127,8 +126,11 @@ class ToolboxHelper(object):
def setup_engine(self):
# engine
bus_addr = self.options.mcast_addr if self.options.mcast_addr else config.address
bus_port = int(self.options.mcast_port) if self.options.mcast_port else config.port
bus_addr = self.options.mcast_addr
try:
bus_port = int(self.options.mcast_port)
except ValueError:
self.error("Invalid port number")
eng = AsyncEngine(address=bus_addr,port=bus_port)
eng.disable_msg_filter()
......@@ -138,6 +140,11 @@ class ToolboxHelper(object):
eng.start()
return eng
def setup_basic(self):
eng = self.setup_engine()
dev = self.setup_device()
return (eng,dev)
def setup_msg_parser(self):
self.engine.subscribe(self.parse_msg)
......@@ -174,7 +181,7 @@ class ToolboxHelper(object):
target.alive = True
return target
def engine_wait(self,timeout=1):
def engine_wait(self,timeout=2):
""" run the engine until timeout """
self.engine.add_timer(self._quit,timeout)
self.engine.run()
......@@ -202,6 +209,10 @@ class ToolboxHelper(object):
print(LINE)
self.engine.shutdown()
def error(self,error_msg):
print(f"error: {error_msg}")
self.parser.print_help()
exit(1)
def colorize(color,text):
return f"{color}{text}{style.RESET}"
......@@ -209,29 +220,20 @@ def colorize(color,text):
def now():
return time.time()
#####################################################
# general functions
#####################################################
def init():
print("Never call me again")
#####################################################
# dumper
#####################################################
def dumper():
#global helper
helper = ToolboxHelper()
helper.setup_parser()
helper.parser.add_option("-a", "--filter-address", dest="filter_address",help="only show given address")
helper.parser.add_option("-f",dest="filter_address",help="only show given address")
(options,_) = helper.parse()
target = None
if options.filter_address:
target = tools.get_uuid(options.filter_address)
if target == None:
print("Invalid address")
exit(1)
helper.error(f"Invalid address: {options.filter_address}")
async def dumper_callback(msg):
if target!=None:
......@@ -264,16 +266,14 @@ def dumper():
#####################################################
def is_alive():
helper = ToolboxHelper()
(options,_) = helper.parse()
eng = helper.setup_engine()
dev = helper.setup_device()
(options,args) = helper.parse()
(eng,dev) = helper.setup_basic()
type_ = 'any.any'
if len(sys.argv) > 1:
type_ = sys.argv[-1]
if len(args) == 1:
type_ = args[0]
if not tools.is_valid_dev_type(type_):
print("Invalid device type: [%s]" % type_)
exit(1)
helper.error("Invalid device type: %s" % type_)
async def alive_callback(msg):
await asyncio.sleep(0)
......@@ -301,17 +301,17 @@ def is_alive():
#####################################################
# info
#####################################################
def info():
helper = ToolboxHelper()
helper.parse()
eng = helper.setup_engine()
dev = helper.setup_device()
(_,args)=helper.parse()
(eng,dev) = helper.setup_basic()
if len(args) !=1:
helper.error("empty address")
target = tools.get_uuid(sys.argv[-1])
target = tools.get_uuid(args[0])
if target == None:
print("Invalid address")
exit(1)
helper.error("Invalid address: %s" % args[0])
async def info_callback(msg,addr=target):
await asyncio.sleep(0)
......@@ -333,7 +333,6 @@ def info():
eng.subscribe(info_callback)
eng.on_start(run)
# run engine at least x second
helper.engine_wait(2)
#####################################################
......@@ -341,22 +340,21 @@ def info():
#####################################################
def walker():
helper = ToolboxHelper()
helper.parse()
eng = helper.setup_engine()
dev = helper.setup_device()
(_,args)=helper.parse()
(eng,dev) = helper.setup_basic()
type_ = 'any.any'
if len(sys.argv) > 1:
type_ = sys.argv[-1]
if len(args) == 1:
type_ = args[0]
if not tools.is_valid_dev_type(type_):
print("Invalid device type: [%s]" % type_)
exit(1)
helper.error("Invalid device type: [%s]" % type_)
def walker_callback(msg):
if msg.source == dev.address:
return
if msg.source == dev.address: return
target = helper.parse_msg(msg)
# FIXME: aliver is ready ??
# FIXME: alive is ready ??
# alive ?
if msg.is_alive():
if not target.ready():
......@@ -378,7 +376,6 @@ def walker():
#####################################################
# log
#####################################################
def log():
helper = ToolboxHelper()
(options,_)=helper.parse()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment