mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-python
synced 2026-01-15 01:52:56 +01:00
ArgsContainer: Add class
ArgsContainer provides an interface similar to argparse.ArgumentParser and can be used as a drop-in replacement when fishing for arguments. Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
2bad14a891
commit
51f08d3dce
1 changed files with 62 additions and 0 deletions
62
tools/python/jwutils/ArgsContainer.py
Normal file
62
tools/python/jwutils/ArgsContainer.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
# -*- 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue