60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
# 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}") |