You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by as...@apache.org on 2021/06/22 13:46:17 UTC
[airflow] 27/38: Correctly handle None returns from Query.scalar()
(#16345)
This is an automated email from the ASF dual-hosted git repository.
ash pushed a commit to branch v2-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 777fd9b3a92b942f268cbb9869d62d2c9d2d9ed1
Author: Tzu-ping Chung <tp...@astronomer.io>
AuthorDate: Wed Jun 16 03:23:32 2021 +0800
Correctly handle None returns from Query.scalar() (#16345)
This is possible when the query does not return a row, according to
SQLAlchemy documentation. We can handle them to provide better errors in
unexpected situations.
Toward #8171, fix #16328.
(cherry picked from commit 147bcecc4902793e0b913dfdad1bd799621971c7)
---
airflow/models/serialized_dag.py | 6 +++---
airflow/www/views.py | 3 ++-
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/airflow/models/serialized_dag.py b/airflow/models/serialized_dag.py
index 4e8ebc4..bba58ad 100644
--- a/airflow/models/serialized_dag.py
+++ b/airflow/models/serialized_dag.py
@@ -275,7 +275,7 @@ class SerializedDagModel(Base):
@classmethod
@provide_session
- def get_max_last_updated_datetime(cls, session: Session = None) -> datetime:
+ def get_max_last_updated_datetime(cls, session: Session = None) -> Optional[datetime]:
"""
Get the maximum date when any DAG was last updated in serialized_dag table
@@ -286,7 +286,7 @@ class SerializedDagModel(Base):
@classmethod
@provide_session
- def get_latest_version_hash(cls, dag_id: str, session: Session = None) -> str:
+ def get_latest_version_hash(cls, dag_id: str, session: Session = None) -> Optional[str]:
"""
Get the latest DAG version for a given DAG ID.
@@ -294,7 +294,7 @@ class SerializedDagModel(Base):
:type dag_id: str
:param session: ORM Session
:type session: Session
- :return: DAG Hash
+ :return: DAG Hash, or None if the DAG is not found
:rtype: str | None
"""
return session.query(cls.dag_hash).filter(cls.dag_id == dag_id).scalar()
diff --git a/airflow/www/views.py b/airflow/www/views.py
index eadec6c..424892e 100644
--- a/airflow/www/views.py
+++ b/airflow/www/views.py
@@ -4023,7 +4023,8 @@ class DagDependenciesView(AirflowBaseView):
title = "DAG Dependencies"
if timezone.utcnow() > self.last_refresh + self.refresh_interval:
- if SerializedDagModel.get_max_last_updated_datetime() > self.last_refresh:
+ max_last_updated = SerializedDagModel.get_max_last_updated_datetime()
+ if max_last_updated is None or max_last_updated > self.last_refresh:
self._calculate_graph()
self.last_refresh = timezone.utcnow()