migration from ha-cantegrill repo
This commit is contained in:
60
kwargsparser.py
Normal file
60
kwargsparser.py
Normal file
@@ -0,0 +1,60 @@
|
||||
# Usage:
|
||||
#
|
||||
# you can optionnaly pass two callback log(string) to log error and warning.
|
||||
# If you don't, error will assert and warning will be ignored
|
||||
# parser = kwargsParser(kwargs)
|
||||
#
|
||||
# some_arg = parser.parse_args('some_arg',None)
|
||||
# some_other_arg = parser.parse_args('some_other_arg',False)
|
||||
#
|
||||
# parser.validate_args() #optional, will assert if kwargs contain unknow args and will display a list of valid args
|
||||
#
|
||||
|
||||
class kwargsParser():
|
||||
def __init__(self,kwargs,log_error_cb = None, log_warning_cb = None):
|
||||
self.kwargs = dict(kwargs)
|
||||
self.valid_args = list()
|
||||
self.log_error_cb = log_error_cb
|
||||
self.log_warning_cb = log_warning_cb
|
||||
|
||||
def parse_args(self,arg_name,default_value,legacy_args_name = []):
|
||||
self.valid_args.append(arg_name)
|
||||
arg_found = None
|
||||
if arg_name in self.kwargs:
|
||||
arg_found = arg_name
|
||||
else: #let's check legacy args
|
||||
for legacy_arg in legacy_args_name:
|
||||
if legacy_arg in self.kwargs:
|
||||
arg_found = legacy_arg
|
||||
self.log_warning(f"{arg_found} is a legacy arg please use {arg_name} instead")
|
||||
break
|
||||
|
||||
if arg_found:
|
||||
for legacy_arg in legacy_args_name:
|
||||
if arg_found != legacy_arg and legacy_arg in self.kwargs:
|
||||
self.log_warning(f"{legacy_arg} is a legacy arg and will ignored as you used {arg_name} before")
|
||||
|
||||
value = self.kwargs[arg_found]
|
||||
del self.kwargs[arg_found]
|
||||
return value
|
||||
else:
|
||||
return default_value
|
||||
|
||||
def log_error(self, error_string):
|
||||
if self.log_error_cb:
|
||||
self.log_error_cb(error_string)
|
||||
else:
|
||||
assert False, error_string
|
||||
|
||||
def log_warning(self, warning_string):
|
||||
if self.log_warning_cb:
|
||||
self.log_warning_cb(warning_string)
|
||||
|
||||
def validate_args(self,args_to_ignore_in_validation = []):
|
||||
for arg in args_to_ignore_in_validation:
|
||||
if arg in self.kwargs:
|
||||
del self.kwargs[arg]
|
||||
|
||||
args_left = len(self.kwargs)
|
||||
if args_left != 0:
|
||||
self.log_error(f"Unknown kwargs : {self.kwargs}. Valid args are {self.valid_args}")
|
||||
Reference in New Issue
Block a user