def test_render_template_field_undefined_strict(self): """Tests if render_template from a field works""" dag = DAG('test-dag', start_date=DEFAULT_DATE, template_undefined=jinja2.StrictUndefined) with dag: task = DummyOperator(task_id='op1') with self.assertRaises(jinja2.UndefinedError): task.render_template('', '{{ foo }}', {})
def test_render_template_field(self): """Tests if render_template from a field works""" dag = DAG('test-dag', start_date=DEFAULT_DATE) with dag: task = DummyOperator(task_id='op1') result = task.render_template('', '{{ foo }}', dict(foo='bar')) self.assertEqual(result, 'bar')
def test_render_template_list_field(self): """Tests if render_template from a list field works""" dag = DAG('test-dag', start_date=DEFAULT_DATE) with dag: task = DummyOperator(task_id='op1') self.assertListEqual( task.render_template('', ['{{ foo }}_1', '{{ foo }}_2'], {'foo': 'bar'}), ['bar_1', 'bar_2'] )
def test_render_template_datetime_field(self): """Tests if render_template from a datetime field works""" dag = DAG('test-dag', start_date=DEFAULT_DATE) with dag: task = DummyOperator(task_id='op1') self.assertEqual( task.render_template('', datetime.datetime(2018, 12, 6, 10, 55), {'foo': 'bar'}), datetime.datetime(2018, 12, 6, 10, 55) )
def test_render_template_dict_field(self): """Tests if render_template from a dict field works""" dag = DAG('test-dag', start_date=DEFAULT_DATE) with dag: task = DummyOperator(task_id='op1') self.assertDictEqual( task.render_template('', {'key1': '{{ foo }}_1', 'key2': '{{ foo }}_2'}, {'foo': 'bar'}), {'key1': 'bar_1', 'key2': 'bar_2'} )
def test_render_template_field_macro(self): """ Tests if render_template from a field works, if a custom filter was defined""" dag = DAG('test-dag', start_date=DEFAULT_DATE, user_defined_macros = dict(foo='bar')) with dag: task = DummyOperator(task_id='op1') result = task.render_template('', '{{ foo }}', dict()) self.assertEqual(result, 'bar')
def test_render_template_numeric_field(self): """ Tests if render_template from a field works, if a custom filter was defined""" dag = DAG('test-dag', start_date=DEFAULT_DATE, user_defined_macros=dict(foo='bar')) with dag: task = DummyOperator(task_id='op1') result = task.render_template('', 1, dict()) self.assertEqual(result, 1)
def test_render_template_UUID_field(self): """Tests if render_template from a UUID field works""" dag = DAG('test-dag', start_date=DEFAULT_DATE) with dag: task = DummyOperator(task_id='op1') random_uuid = uuid.uuid4() self.assertIs( task.render_template('', random_uuid, {'foo': 'bar'}), random_uuid )
def test_render_template_dict_field_with_templated_keys(self): """Tests if render_template from a dict field works as expected: dictionary keys are not templated""" dag = DAG('test-dag', start_date=DEFAULT_DATE) with dag: task = DummyOperator(task_id='op1') self.assertDictEqual( task.render_template('', {'key_{{ foo }}_1': 1, 'key_2': '{{ foo }}_2'}, {'foo': 'bar'}), {'key_{{ foo }}_1': 1, 'key_2': 'bar_2'} )
def test_render_template_object_field(self): """Tests if render_template from an object field works""" dag = DAG('test-dag', start_date=DEFAULT_DATE) with dag: task = DummyOperator(task_id='op1') test_object = object() self.assertIs( task.render_template('', test_object, {'foo': 'bar'}), test_object )
def test_render_template_field_filter(self): """ Tests if render_template from a field works, if a custom filter was defined""" def jinja_udf(name): return 'Hello %s' % name dag = DAG('test-dag', start_date=DEFAULT_DATE, user_defined_filters=dict(hello=jinja_udf)) with dag: task = DummyOperator(task_id='op1') result = task.render_template('', "{{ 'world' | hello}}", dict()) self.assertEqual(result, 'Hello world')
def test_render_template_dict_field(self): """Tests if render_template from a dict field works""" dag = DAG('test-dag', start_date=DEFAULT_DATE) with dag: task = DummyOperator(task_id='op1') self.assertDictEqual( task.render_template('', { 'key1': '{{ foo }}_1', 'key2': '{{ foo }}_2' }, {'foo': 'bar'}), { 'key1': 'bar_1', 'key2': 'bar_2' })
def test_render_template_field_filter(self): """ Tests if render_template from a field works, if a custom filter was defined""" def jinja_udf(name): return 'Hello %s' %name dag = DAG('test-dag', start_date=DEFAULT_DATE, user_defined_filters = dict(hello=jinja_udf)) with dag: task = DummyOperator(task_id='op1') result = task.render_template('', "{{ 'world' | hello}}", dict()) self.assertEqual(result, 'Hello world')
def test_render_template_named_tuple_field(self): """Tests if render_template from a named tuple field works""" Named = namedtuple('Named', ['var1', 'var2']) dag = DAG('test-dag', start_date=DEFAULT_DATE) with dag: task = DummyOperator(task_id='op1') expected = Named('bar_1', 'bar_2') actual = task.render_template('', Named('{{ foo }}_1', '{{ foo }}_2'), {'foo': 'bar'}) # Named tuple's field access is preserved but are still rendered self.assertTupleEqual(expected, actual) self.assertEqual( expected.var1, actual.var1, msg="Named tuples may not have been preserved in rendering") self.assertEqual( expected.var2, actual.var2, msg="Named tuples may not have been preserved in rendering")
def test_render_template_field_undefined_not_strict(self): """Test render_template with template_undefined configured to silently error.""" with DAG("test-dag", start_date=DEFAULT_DATE, template_undefined=jinja2.Undefined): task = DummyOperator(task_id="op1") self.assertEqual(task.render_template("{{ foo }}", {}), "")