diff --git a/airflow/models/taskinstance.py b/airflow/models/taskinstance.py index 0f5d49b819762..7913cff7ff7c5 100644 --- a/airflow/models/taskinstance.py +++ b/airflow/models/taskinstance.py @@ -771,7 +771,13 @@ def log_url(self): """Log URL for TaskInstance""" iso = quote(self.execution_date.isoformat()) base_url = conf.get('webserver', 'BASE_URL') - return base_url + f"/log?execution_date={iso}&task_id={self.task_id}&dag_id={self.dag_id}" + return ( + f"{base_url}/log" + f"?execution_date={iso}" + f"&task_id={self.task_id}" + f"&dag_id={self.dag_id}" + f"&map_index={self.map_index}" + ) @property def mark_success_url(self): diff --git a/tests/models/test_taskinstance.py b/tests/models/test_taskinstance.py index a1d180fa1ee56..da3d138306235 100644 --- a/tests/models/test_taskinstance.py +++ b/tests/models/test_taskinstance.py @@ -1307,18 +1307,6 @@ def test_get_num_running_task_instances(self, create_task_instance): assert 1 == ti2.get_num_running_task_instances(session=session) assert 1 == ti3.get_num_running_task_instances(session=session) - # def test_log_url(self): - # now = pendulum.now('Europe/Brussels') - # dag = DAG('dag', start_date=DEFAULT_DATE) - # task = EmptyOperator(task_id='op', dag=dag) - # ti = TI(task=task, execution_date=now) - # d = urllib.parse.parse_qs( - # urllib.parse.urlparse(ti.log_url).query, - # keep_blank_values=True, strict_parsing=True) - # self.assertEqual(d['dag_id'][0], 'dag') - # self.assertEqual(d['task_id'][0], 'op') - # self.assertEqual(pendulum.parse(d['execution_date'][0]), now) - def test_log_url(self, create_task_instance): ti = create_task_instance(dag_id='dag', task_id='op', execution_date=timezone.datetime(2018, 1, 1)) @@ -1327,6 +1315,7 @@ def test_log_url(self, create_task_instance): 'execution_date=2018-01-01T00%3A00%3A00%2B00%3A00' '&task_id=op' '&dag_id=dag' + '&map_index=-1' ) assert ti.log_url == expected_url