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")
Exemple #3
0
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)
Exemple #4
0
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')