diff --git a/airflow-core/src/airflow/models/dagbag.py b/airflow-core/src/airflow/models/dagbag.py index 3d20c323e031c..e04f77d06df34 100644 --- a/airflow-core/src/airflow/models/dagbag.py +++ b/airflow-core/src/airflow/models/dagbag.py @@ -21,9 +21,8 @@ from typing import TYPE_CHECKING, Any from uuid import UUID -from sqlalchemy import String, inspect, select +from sqlalchemy import String, select from sqlalchemy.orm import Mapped, joinedload, mapped_column -from sqlalchemy.orm.attributes import NO_VALUE from airflow.models.base import Base, StringID from airflow.models.dag_version import DagVersion @@ -66,23 +65,16 @@ def _get_dag(self, version_id: UUID, session: Session) -> SerializedDAG | None: return self._read_dag(serdag) @staticmethod - def _version_from_dag_run(dag_run: DagRun, *, session: Session) -> DagVersion | None: + def _version_from_dag_run(dag_run: DagRun, *, session: Session) -> UUID | None: if not dag_run.bundle_version: if dag_version := DagVersion.get_latest_version(dag_id=dag_run.dag_id, session=session): - return dag_version + return dag_version.id - # Check if created_dag_version relationship is already loaded to avoid DetachedInstanceError - info: Any = inspect(dag_run) - if info.attrs.created_dag_version.loaded_value is not NO_VALUE: - # Relationship is already loaded, safe to access - return dag_run.created_dag_version - - # Relationship not loaded, fetch it explicitly from current session - return session.get(DagVersion, dag_run.created_dag_version_id) + return dag_run.created_dag_version_id def get_dag_for_run(self, dag_run: DagRun, session: Session) -> SerializedDAG | None: - if version := self._version_from_dag_run(dag_run=dag_run, session=session): - return self._get_dag(version_id=version.id, session=session) + if version_id := self._version_from_dag_run(dag_run=dag_run, session=session): + return self._get_dag(version_id=version_id, session=session) return None def iter_all_latest_version_dags(self, *, session: Session) -> Generator[SerializedDAG, None, None]: