jw-python/tools/python/jwutils/ArgsContainer.py

62 lines
1.7 KiB
Python
Raw Normal View History

# -*- 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)