def generate_value(self, context_params, value, parse_with_jinja=False): if context_params is None: context_params = {} if parse_with_jinja: value = jinja_utils.evaluate_object(value, context_params) if not value in self.choices: raise Exception('Value must be one of %s; received %s' % (self.choices, value)) return copy.deepcopy(value)
def generate_value(self, context_params, value, parse_with_jinja=False): if context_params is None: context_params = {} if parse_with_jinja: value = jinja_utils.evaluate_object(value, context_params) if not value in self.choices: raise Exception( 'Value must be one of %s; received %s' % (self.choices, value)) return copy.deepcopy(value)
def generate_value(self, context_params, value, parse_with_jinja=False): """Returns a copy of the input value. If parse_with_jinja is True, strings within the input value are treated as templates and parsed against context_params. The output will be a unicode string. If parse_with_jinja is False, the input value is copied and returned without changing its type. """ if context_params is None: context_params = {} if parse_with_jinja: return jinja_utils.evaluate_object(value, context_params) else: return copy.deepcopy(value)
def test_evaluate_object(self): parsed_object = jinja_utils.evaluate_object('abc', {}) self.assertEqual(parsed_object, 'abc') parsed_object = jinja_utils.evaluate_object('{{ab}}', {'ab': 'c'}) self.assertEqual(parsed_object, 'c') parsed_object = jinja_utils.evaluate_object('abc{{ab}}', {'ab': 'c'}) self.assertEqual(parsed_object, 'abcc') parsed_object = jinja_utils.evaluate_object(['a', '{{a}}', 'a{{a}}'], {'a': 'b'}) self.assertEqual(parsed_object, ['a', 'b', 'ab']) parsed_object = jinja_utils.evaluate_object({}, {}) self.assertEqual(parsed_object, {}) parsed_object = jinja_utils.evaluate_object({}, {'a': 'b'}) self.assertEqual(parsed_object, {}) parsed_object = jinja_utils.evaluate_object({'a': 'b'}, {}) self.assertEqual(parsed_object, {'a': 'b'}) parsed_object = jinja_utils.evaluate_object({'a': 'a{{b}}'}, {'b': 'c'}) self.assertEqual(parsed_object, {'a': 'ac'}) parsed_object = jinja_utils.evaluate_object({'a': '{{b}}'}, {'b': 3}) self.assertEqual(parsed_object, {'a': '3'}) parsed_object = jinja_utils.evaluate_object({'a': '{{b}}'}, {'b': 'c'}) self.assertEqual(parsed_object, {'a': 'c'}) # Failure cases should be handled gracefully. parsed_object = jinja_utils.evaluate_object('{{c}}', {}) self.assertEqual(parsed_object, '') parsed_object = jinja_utils.evaluate_object('{{c}}', {'a': 'b'}) self.assertEqual(parsed_object, '') # Test that the original dictionary is unchanged. orig_dict = {'a': '{{b}}'} parsed_dict = jinja_utils.evaluate_object(orig_dict, {'b': 'c'}) self.assertEqual(orig_dict, {'a': '{{b}}'}) self.assertEqual(parsed_dict, {'a': 'c'}) # Test that int type input is used. parsed_object = jinja_utils.evaluate_object(34, {}) self.assertEqual(parsed_object, 34)
def test_evaluate_object(self): parsed_object = jinja_utils.evaluate_object('abc', {}) self.assertEqual(parsed_object, 'abc') parsed_object = jinja_utils.evaluate_object('{{ab}}', {'ab': 'c'}) self.assertEqual(parsed_object, 'c') parsed_object = jinja_utils.evaluate_object('abc{{ab}}', {'ab': 'c'}) self.assertEqual(parsed_object, 'abcc') parsed_object = jinja_utils.evaluate_object( ['a', '{{a}}', 'a{{a}}'], {'a': 'b'}) self.assertEqual(parsed_object, ['a', 'b', 'ab']) parsed_object = jinja_utils.evaluate_object({}, {}) self.assertEqual(parsed_object, {}) parsed_object = jinja_utils.evaluate_object({}, {'a': 'b'}) self.assertEqual(parsed_object, {}) parsed_object = jinja_utils.evaluate_object({'a': 'b'}, {}) self.assertEqual(parsed_object, {'a': 'b'}) parsed_object = jinja_utils.evaluate_object( {'a': 'a{{b}}'}, {'b': 'c'}) self.assertEqual(parsed_object, {'a': 'ac'}) parsed_object = jinja_utils.evaluate_object({'a': '{{b}}'}, {'b': 3}) self.assertEqual(parsed_object, {'a': '3'}) parsed_object = jinja_utils.evaluate_object({'a': '{{b}}'}, {'b': 'c'}) self.assertEqual(parsed_object, {'a': 'c'}) # Failure cases should be handled gracefully. parsed_object = jinja_utils.evaluate_object('{{c}}', {}) self.assertEqual(parsed_object, '') parsed_object = jinja_utils.evaluate_object('{{c}}', {'a': 'b'}) self.assertEqual(parsed_object, '') # Test that the original dictionary is unchanged. orig_dict = {'a': '{{b}}'} parsed_dict = jinja_utils.evaluate_object(orig_dict, {'b': 'c'}) self.assertEqual(orig_dict, {'a': '{{b}}'}) self.assertEqual(parsed_dict, {'a': 'c'})