def test_python_callable_keyword_arguments_are_templatized(self): """Test PythonOperator op_kwargs are templatized""" recorded_calls = [] task = task_decorator( # a Mock instance cannot be used as a callable function or test fails with a # TypeError: Object of type Mock is not JSON serializable build_recording_function(recorded_calls), dag=self.dag) ret = task(an_int=4, a_date=date(2019, 1, 1), a_templated_string="dag {{dag.dag_id}} ran on {{ds}}.") self.dag.create_dagrun(run_id=DagRunType.MANUAL.value, execution_date=DEFAULT_DATE, start_date=DEFAULT_DATE, state=State.RUNNING) ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE) # pylint: disable=maybe-no-member assert len(recorded_calls) == 1 self._assert_calls_equal( recorded_calls[0], Call(an_int=4, a_date=date(2019, 1, 1), a_templated_string="dag {} ran on {}.".format( self.dag.dag_id, DEFAULT_DATE.date().isoformat())))
def test_python_callable_arguments_are_templatized(self): """Test @task op_args are templatized""" recorded_calls = [] # Create a named tuple and ensure it is still preserved # after the rendering is done Named = namedtuple('Named', ['var1', 'var2']) named_tuple = Named('{{ ds }}', 'unchanged') task = task_decorator( # a Mock instance cannot be used as a callable function or test fails with a # TypeError: Object of type Mock is not JSON serializable build_recording_function(recorded_calls), dag=self.dag) ret = task(4, date(2019, 1, 1), "dag {{dag.dag_id}} ran on {{ds}}.", named_tuple) self.dag.create_dagrun(run_id=DagRunType.MANUAL.value, execution_date=DEFAULT_DATE, start_date=DEFAULT_DATE, state=State.RUNNING) ret.operator.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE) # pylint: disable=maybe-no-member ds_templated = DEFAULT_DATE.date().isoformat() assert len(recorded_calls) == 1 self._assert_calls_equal( recorded_calls[0], Call(4, date(2019, 1, 1), "dag {} ran on {}.".format(self.dag.dag_id, ds_templated), Named(ds_templated, 'unchanged')))