def test_jinja_engine(self): engine = manager.get_expression_engine('jinja') block = engine.evaluate_block('Hello {{ world }}', {'world': 'cruel world'}) self.assertEqual(block, 'Hello cruel world') block = engine.evaluate_block('Hello {% if world %}world{% endif %}', {'world': True}) self.assertEqual(block, 'Hello world') with self.assertRaises(EvaluationError): engine.evaluate_block('Hello {% bar') expression = engine.evaluate_inline('world', {'world': 'cruel world'}) self.assertEqual(expression, 'cruel world') expression = engine.evaluate_inline('world', {'world': True}) self.assertEqual(expression, True) expression = engine.evaluate_inline('world | yesno("yes", "no")', {'world': False}) self.assertEqual(expression, 'no') expression = engine.evaluate_inline('[1, 2, 3, world]', {'world': 4}) self.assertEqual(expression, [1, 2, 3, 4]) expression = engine.evaluate_inline('a.b.c.d', {}) self.assertEqual(expression, None) expression = engine.evaluate_inline('a.b.c().d', {}) self.assertEqual(expression, None) expression = engine.evaluate_inline( 'a.b.0.d', {'a': { 'b': [{ 'd': 'Hello world' }] }}) self.assertEqual(expression, 'Hello world') expression = engine.evaluate_inline('a.b.0.d', {}) self.assertEqual(expression, None) expression = engine.evaluate_inline('[world, false] | all', {'world': True}) self.assertFalse(expression) expression = engine.evaluate_inline('[world, false] | any', {'world': True}) self.assertTrue(expression) # Test that propagation of undefined values works. expression = engine.evaluate_inline('foo.bar | name | default("bar")', {}) self.assertEqual(expression, 'bar') expression = engine.evaluate_inline('foo.bar | id | default("bar")', {}) self.assertEqual(expression, 'bar') expression = engine.evaluate_inline('foo.bar | type | default("bar")', {}) self.assertEqual(expression, 'bar') expression = engine.evaluate_inline( 'foo.bar | basename | default("bar")', {}) self.assertEqual(expression, 'bar') # Ensure that filter decorations are correctly copied when decorating filters to # automatically propagate undefined values on exceptions. expression = engine.evaluate_inline('foo | join(" ")', {'foo': ['a', 'b', 'c']}) self.assertEqual(expression, 'a b c')
def test_jinja_engine(self): engine = manager.get_expression_engine("jinja") block = engine.evaluate_block("Hello {{ world }}", {"world": "cruel world"}) self.assertEqual(block, "Hello cruel world") block = engine.evaluate_block("Hello {% if world %}world{% endif %}", {"world": True}) self.assertEqual(block, "Hello world") with self.assertRaises(EvaluationError): engine.evaluate_block("Hello {% bar") expression = engine.evaluate_inline("world", {"world": "cruel world"}) self.assertEqual(expression, "cruel world") expression = engine.evaluate_inline("world", {"world": True}) self.assertEqual(expression, True) expression = engine.evaluate_inline('world | yesno("yes", "no")', {"world": False}) self.assertEqual(expression, "no") expression = engine.evaluate_inline("[1, 2, 3, world]", {"world": 4}) self.assertEqual(expression, [1, 2, 3, 4]) expression = engine.evaluate_inline("a.b.c.d", {}) self.assertEqual(expression, None) expression = engine.evaluate_inline("a.b.c().d", {}) self.assertEqual(expression, None) expression = engine.evaluate_inline( "a.b.0.d", {"a": { "b": [{ "d": "Hello world" }] }}) self.assertEqual(expression, "Hello world") expression = engine.evaluate_inline("a.b.0.d", {}) self.assertEqual(expression, None) expression = engine.evaluate_inline("[world, false] | all", {"world": True}) self.assertFalse(expression) expression = engine.evaluate_inline("[world, false] | any", {"world": True}) self.assertTrue(expression) # Test that propagation of undefined values works. expression = engine.evaluate_inline('foo.bar | name | default("bar")', {}) self.assertEqual(expression, "bar") expression = engine.evaluate_inline('foo.bar | id | default("bar")', {}) self.assertEqual(expression, "bar") expression = engine.evaluate_inline('foo.bar | type | default("bar")', {}) self.assertEqual(expression, "bar") expression = engine.evaluate_inline( 'foo.bar | basename | default("bar")', {}) self.assertEqual(expression, "bar") # Ensure that filter decorations are correctly copied when decorating filters to # automatically propagate undefined values on exceptions. expression = engine.evaluate_inline('foo | join(" ")', {"foo": ["a", "b", "c"]}) self.assertEqual(expression, "a b c")
def render_template(process, template_string, context): """Render template using the specified expression engine.""" from resolwe.flow.managers import manager # Get the appropriate expression engine. If none is defined, do not evaluate # any expressions. expression_engine = process.requirements.get('expression-engine', None) if not expression_engine: return template_string return manager.get_expression_engine(expression_engine).evaluate_block(template_string, context)
def render_template(process, template_string, context): """Render template using the specified expression engine.""" from resolwe.flow.managers import manager # Get the appropriate expression engine. If none is defined, do not evaluate # any expressions. expression_engine = process.requirements.get('expression-engine', None) if not expression_engine: return template_string return manager.get_expression_engine(expression_engine).evaluate_block(template_string, context)
def test_jinja_engine(self): engine = manager.get_expression_engine('jinja') block = engine.evaluate_block('Hello {{ world }}', {'world': 'cruel world'}) self.assertEqual(block, 'Hello cruel world') block = engine.evaluate_block('Hello {% if world %}world{% endif %}', {'world': True}) self.assertEqual(block, 'Hello world') with self.assertRaises(EvaluationError): engine.evaluate_block('Hello {% bar') expression = engine.evaluate_inline('world', {'world': 'cruel world'}) self.assertEqual(expression, 'cruel world') expression = engine.evaluate_inline('world', {'world': True}) self.assertEqual(expression, True) expression = engine.evaluate_inline('world | yesno("yes", "no")', {'world': False}) self.assertEqual(expression, 'no') expression = engine.evaluate_inline('[1, 2, 3, world]', {'world': 4}) self.assertEqual(expression, [1, 2, 3, 4]) expression = engine.evaluate_inline('a.b.c.d', {}) self.assertEqual(expression, None) expression = engine.evaluate_inline('a.b.c().d', {}) self.assertEqual(expression, None) expression = engine.evaluate_inline('a.b.0.d', {'a': {'b': [{'d': 'Hello world'}]}}) self.assertEqual(expression, 'Hello world') expression = engine.evaluate_inline('a.b.0.d', {}) self.assertEqual(expression, None) expression = engine.evaluate_inline('[world, false] | all', {'world': True}) self.assertFalse(expression) expression = engine.evaluate_inline('[world, false] | any', {'world': True}) self.assertTrue(expression) # Test that propagation of undefined values works. expression = engine.evaluate_inline('foo.bar | name | default("bar")', {}) self.assertEqual(expression, 'bar') expression = engine.evaluate_inline('foo.bar | id | default("bar")', {}) self.assertEqual(expression, 'bar') expression = engine.evaluate_inline('foo.bar | type | default("bar")', {}) self.assertEqual(expression, 'bar') expression = engine.evaluate_inline('foo.bar | basename | default("bar")', {}) self.assertEqual(expression, 'bar') # Ensure that filter decorations are correctly copied when decorating filters to # automatically propagate undefined values on exceptions. expression = engine.evaluate_inline('foo | join(" ")', {'foo': ['a', 'b', 'c']}) self.assertEqual(expression, 'a b c')
def test_jinja_engine(self): engine = manager.get_expression_engine('jinja') block = engine.evaluate_block('Hello {{ world }}', {'world': 'cruel world'}) self.assertEqual(block, 'Hello cruel world') block = engine.evaluate_block('Hello {% if world %}world{% endif %}', {'world': True}) self.assertEqual(block, 'Hello world') with self.assertRaises(EvaluationError): engine.evaluate_block('Hello {% bar') expression = engine.evaluate_inline('world', {'world': 'cruel world'}) self.assertEqual(expression, 'cruel world') expression = engine.evaluate_inline('world', {'world': True}) self.assertEqual(expression, True) expression = engine.evaluate_inline('world | yesno("yes", "no")', {'world': False}) self.assertEqual(expression, 'no') expression = engine.evaluate_inline('[1, 2, 3, world]', {'world': 4}) self.assertEqual(expression, [1, 2, 3, 4]) expression = engine.evaluate_inline('a.b.c.d', {}) self.assertEqual(expression, None) expression = engine.evaluate_inline('a.b.c().d', {}) self.assertEqual(expression, None)
def test_jinja_engine(self): engine = manager.get_expression_engine('jinja') block = engine.evaluate_block('Hello {{ world }}', {'world': 'cruel world'}) self.assertEqual(block, 'Hello cruel world') block = engine.evaluate_block('Hello {% if world %}world{% endif %}', {'world': True}) self.assertEqual(block, 'Hello world') with self.assertRaises(EvaluationError): engine.evaluate_block('Hello {% bar') expression = engine.evaluate_inline('world', {'world': 'cruel world'}) self.assertEqual(expression, 'cruel world') expression = engine.evaluate_inline('world', {'world': True}) self.assertEqual(expression, True) expression = engine.evaluate_inline('world | yesno("yes", "no")', {'world': False}) self.assertEqual(expression, 'no') expression = engine.evaluate_inline('[1, 2, 3, world]', {'world': 4}) self.assertEqual(expression, [1, 2, 3, 4]) expression = engine.evaluate_inline('a.b.c.d', {}) self.assertEqual(expression, None) expression = engine.evaluate_inline('a.b.c().d', {}) self.assertEqual(expression, None) expression = engine.evaluate_inline('a.b.0.d', {'a': {'b': [{'d': 'Hello world'}]}}) self.assertEqual(expression, 'Hello world') expression = engine.evaluate_inline('a.b.0.d', {}) self.assertEqual(expression, None) # Test that propagation of undefined values works. expression = engine.evaluate_inline('foo.bar | name | default("bar")', {}) self.assertEqual(expression, 'bar') expression = engine.evaluate_inline('foo.bar | id | default("bar")', {}) self.assertEqual(expression, 'bar') expression = engine.evaluate_inline('foo.bar | type | default("bar")', {}) self.assertEqual(expression, 'bar') expression = engine.evaluate_inline('foo.bar | basename | default("bar")', {}) self.assertEqual(expression, 'bar')