implement boolean parameters, forgotten files ;-)
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
parent
362bdcdbdd
commit
0760ff3c94
4 changed files with 89 additions and 2 deletions
|
@ -82,6 +82,7 @@ class CdistType(object):
|
|||
self.__explorers = None
|
||||
self.__required_parameters = None
|
||||
self.__optional_parameters = None
|
||||
self.__boolean_parameters = None
|
||||
|
||||
def __repr__(self):
|
||||
return '<CdistType %s>' % self.name
|
||||
|
@ -144,3 +145,19 @@ class CdistType(object):
|
|||
finally:
|
||||
self.__optional_parameters = parameters
|
||||
return self.__optional_parameters
|
||||
|
||||
@property
|
||||
def boolean_parameters(self):
|
||||
"""Return a list of boolean parameters"""
|
||||
if not self.__boolean_parameters:
|
||||
parameters = []
|
||||
try:
|
||||
with open(os.path.join(self.absolute_path, "parameter", "boolean")) as fd:
|
||||
for line in fd:
|
||||
parameters.append(line.strip())
|
||||
except EnvironmentError:
|
||||
# error ignored
|
||||
pass
|
||||
finally:
|
||||
self.__boolean_parameters = parameters
|
||||
return self.__boolean_parameters
|
||||
|
|
|
@ -87,7 +87,7 @@ class Emulator(object):
|
|||
def commandline(self):
|
||||
"""Parse command line"""
|
||||
|
||||
parser = argparse.ArgumentParser(add_help=False)
|
||||
parser = argparse.ArgumentParser(add_help=False, argument_default=argparse.SUPPRESS)
|
||||
|
||||
for parameter in self.cdist_type.optional_parameters:
|
||||
argument = "--" + parameter
|
||||
|
@ -95,6 +95,9 @@ class Emulator(object):
|
|||
for parameter in self.cdist_type.required_parameters:
|
||||
argument = "--" + parameter
|
||||
parser.add_argument(argument, dest=parameter, action='store', required=True)
|
||||
for parameter in self.cdist_type.boolean_parameters:
|
||||
argument = "--" + parameter
|
||||
parser.add_argument(argument, dest=parameter, action='store_const', const='')
|
||||
|
||||
# If not singleton support one positional parameter
|
||||
if not self.cdist_type.is_singleton:
|
||||
|
|
|
@ -126,7 +126,7 @@ class AutoRequireEmulatorTestCase(test.CdistTestCase):
|
|||
self.assertEqual(sorted(cdist_object.requirements), sorted(expected))
|
||||
|
||||
|
||||
class ArgumentsWithDashesTestCase(test.CdistTestCase):
|
||||
class ArgumentsTestCase(test.CdistTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.temp_dir = self.mkdtemp()
|
||||
|
@ -159,3 +159,59 @@ class ArgumentsWithDashesTestCase(test.CdistTestCase):
|
|||
cdist_type = core.CdistType(self.local.type_path, '__arguments_with_dashes')
|
||||
cdist_object = core.CdistObject(cdist_type, self.local.object_path, 'some-id')
|
||||
self.assertTrue('with-dash' in cdist_object.parameters)
|
||||
|
||||
def test_boolean(self):
|
||||
type_name = '__arguments_boolean'
|
||||
object_id = 'some-id'
|
||||
argv = [type_name, object_id, '--boolean1']
|
||||
os.environ.update(self.env)
|
||||
emu = emulator.Emulator(argv)
|
||||
emu.run()
|
||||
|
||||
cdist_type = core.CdistType(self.local.type_path, type_name)
|
||||
cdist_object = core.CdistObject(cdist_type, self.local.object_path, object_id)
|
||||
self.assertTrue('boolean1' in cdist_object.parameters)
|
||||
self.assertFalse('boolean2' in cdist_object.parameters)
|
||||
# empty file -> True
|
||||
self.assertTrue(cdist_object.parameters['boolean1'] == '')
|
||||
|
||||
def test_required(self):
|
||||
type_name = '__arguments_required'
|
||||
object_id = 'some-id'
|
||||
value = 'some value'
|
||||
argv = [type_name, object_id, '--required1', value, '--required2', value]
|
||||
os.environ.update(self.env)
|
||||
emu = emulator.Emulator(argv)
|
||||
emu.run()
|
||||
|
||||
cdist_type = core.CdistType(self.local.type_path, type_name)
|
||||
cdist_object = core.CdistObject(cdist_type, self.local.object_path, object_id)
|
||||
self.assertTrue('required1' in cdist_object.parameters)
|
||||
self.assertTrue('required2' in cdist_object.parameters)
|
||||
self.assertEqual(cdist_object.parameters['required1'], value)
|
||||
self.assertEqual(cdist_object.parameters['required2'], value)
|
||||
|
||||
# def test_required_missing(self):
|
||||
# type_name = '__arguments_required'
|
||||
# object_id = 'some-id'
|
||||
# value = 'some value'
|
||||
# argv = [type_name, object_id, '--required1', value]
|
||||
# os.environ.update(self.env)
|
||||
# emu = emulator.Emulator(argv)
|
||||
#
|
||||
# self.assertRaises(SystemExit, emu.run)
|
||||
|
||||
def test_optional(self):
|
||||
type_name = '__arguments_optional'
|
||||
object_id = 'some-id'
|
||||
value = 'some value'
|
||||
argv = [type_name, object_id, '--optional1', value]
|
||||
os.environ.update(self.env)
|
||||
emu = emulator.Emulator(argv)
|
||||
emu.run()
|
||||
|
||||
cdist_type = core.CdistType(self.local.type_path, type_name)
|
||||
cdist_object = core.CdistObject(cdist_type, self.local.object_path, object_id)
|
||||
self.assertTrue('optional1' in cdist_object.parameters)
|
||||
self.assertFalse('optional2' in cdist_object.parameters)
|
||||
self.assertEqual(cdist_object.parameters['optional1'], value)
|
||||
|
|
|
@ -145,3 +145,14 @@ class TypeTestCase(test.CdistTestCase):
|
|||
base_path = fixtures
|
||||
cdist_type = core.CdistType(base_path, '__without_optional_parameters')
|
||||
self.assertEqual(cdist_type.optional_parameters, [])
|
||||
|
||||
def test_with_boolean_parameters(self):
|
||||
base_path = fixtures
|
||||
cdist_type = core.CdistType(base_path, '__with_boolean_parameters')
|
||||
self.assertEqual(cdist_type.boolean_parameters, ['boolean1', 'boolean2'])
|
||||
|
||||
def test_without_boolean_parameters(self):
|
||||
base_path = fixtures
|
||||
cdist_type = core.CdistType(base_path, '__without_boolean_parameters')
|
||||
self.assertEqual(cdist_type.boolean_parameters, [])
|
||||
|
||||
|
|
Loading…
Reference in a new issue