forked from ungleich-public/cdist
		
	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…
	
	Add table
		Add a link
		
	
		Reference in a new issue