# -*- coding: utf-8 -*- from collections import OrderedDict from jwutils.log import * class ArgsContainer: # export __args = OrderedDict() __kwargs = OrderedDict() __values = {} def __getattr__(self, name): values = self.__values if name in self.__values: return self.__values[name] if name in self.__kwargs.keys(): d = self.__kwargs[name] if 'default' in d: return d['default'] raise Exception(f'No value for argument "{name}"') raise Exception(f'No argument "{name}" defined') def __setattr__(self, name, value): if not name in self.__kwargs.keys(): raise Exception(f'No argument "{name}" defined') self.__values[name] = value def add_argument(self, *args, **kwargs): for arg in args: if arg[0] != '-': name = arg break if arg[:2] == '--': name = arg[2:] break else: raise Exception('Missing argument name') name = name.replace('-', '_') self.__args[name] = args self.__kwargs[name] = kwargs def keys(self): return self.__args.keys() @property def args(self, name): return self.__args[name] @property def kwargs(self, name): return self.__kwargs[name] def dump(self, prio, *args, **kwargs): caller = get_caller_pos(**kwargs) for name in self.__kwargs.keys(): val = None try: val = self.__getattr__(name) except: pass slog(prio, f'{name}: {val}', caller=caller)