positional arguments works well

This commit is contained in:
Emmanuel Garette 2019-01-28 17:05:50 +01:00 committed by Emmanuel Garette
parent c6f7dc8206
commit 15eb20ae11
2 changed files with 16 additions and 10 deletions

View file

@ -17,8 +17,8 @@ from tiramisu import IntOption, StrOption, BoolOption, ChoiceOption, \
choiceoption = ChoiceOption('cmd', choiceoption = ChoiceOption('cmd',
'choice the sub argument', 'choice the sub argument',
('str', 'list', 'int'), ('str', 'list', 'int'),
properties=('mandatory',)) properties=('mandatory',
# 'positional')) 'positional'))
# * a boolean to pass script in verbosity mode with argument -v --verbosity # * a boolean to pass script in verbosity mode with argument -v --verbosity
booloption = BoolOption('verbosity', booloption = BoolOption('verbosity',
'increase output verbosity', 'increase output verbosity',
@ -60,6 +60,7 @@ config = Config(OptionDescription('root',
int_ int_
])) ]))
# initialise the parser # initialise the parser
config.property.read_write()
parser = TiramisuCmdlineParser(config) parser = TiramisuCmdlineParser(config)
# parse arguments of current script # parse arguments of current script
parser.parse_args() parser.parse_args()

View file

@ -166,16 +166,17 @@ class TiramisuCmdlineParser(ArgumentParser):
if name.startswith(self.prefix_chars): if name.startswith(self.prefix_chars):
raise ValueError('name cannot startswith "{}"'.format(self.prefix_chars)) raise ValueError('name cannot startswith "{}"'.format(self.prefix_chars))
properties = obj.property.get() properties = obj.property.get()
kwargs = {'help': option.doc().replace('%', '%%'), kwargs = {'help': option.doc().replace('%', '%%')}
'default': SUPPRESS,
'dest': option.path()}
if 'positional' in properties: if 'positional' in properties:
#if not 'mandatory' in properties: #if not 'mandatory' in properties:
# raise ValueError('"positional" argument must be "mandatory" too') # raise ValueError('"positional" argument must be "mandatory" too')
args = [name] args = [option.path()]
#if option.requires(): #if option.requires():
kwargs['default'] = obj.value.get()
kwargs['nargs'] = '?' kwargs['nargs'] = '?'
else: else:
kwargs['dest'] = option.path()
kwargs['default'] = SUPPRESS
if self.fullpath and prefix: if self.fullpath and prefix:
name = prefix + '.' + name name = prefix + '.' + name
args = [self._gen_argument(name, properties)] args = [self._gen_argument(name, properties)]
@ -240,11 +241,15 @@ class TiramisuCmdlineParser(ArgumentParser):
self.error('unrecognized arguments: {}'.format(name)) self.error('unrecognized arguments: {}'.format(name))
if valid_mandatory: if valid_mandatory:
for key in self.config.value.mandatory(): for key in self.config.value.mandatory():
properties = self.config.option(key).property.get()
if 'positional' not in properties:
if self.fullpath or '.' not in key: if self.fullpath or '.' not in key:
name = key name = key
else: else:
name = key.rsplit('.', 1)[1] name = key.rsplit('.', 1)[1]
args = self._gen_argument(name, self.config.option(key).property.get()) args = self._gen_argument(name, self.config.option(key).property.get())
else:
args = key
self.error('the following arguments are required: {}'.format(args)) self.error('the following arguments are required: {}'.format(args))
return namespaces return namespaces