This is an automated email from the ASF dual-hosted git repository.
pierrejeambrun pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-1-test by this push:
new 39156a992c8 Add query guard in public asset list endpoints (#57438)
(#57543)
39156a992c8 is described below
commit 39156a992c83c629c8bfa1fc61529e2e791af201
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Thu Oct 30 12:23:10 2025 +0100
Add query guard in public asset list endpoints (#57438) (#57543)
(cherry picked from commit 942063a2200d7515e4a5ab2d920591cb4c45dad3)
---
.../api_fastapi/core_api/routes/public/assets.py | 5 ++++-
.../core_api/routes/public/test_assets.py | 24 +++++++++++++++-------
2 files changed, 21 insertions(+), 8 deletions(-)
diff --git
a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/assets.py
b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/assets.py
index 83940335248..a00739564f8 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/assets.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/assets.py
@@ -182,6 +182,7 @@ def get_assets(
subqueryload(AssetModel.scheduled_dags),
subqueryload(AssetModel.producing_tasks),
subqueryload(AssetModel.consuming_tasks),
+ subqueryload(AssetModel.aliases),
)
)
@@ -304,7 +305,9 @@ def get_asset_events(
session=session,
)
- assets_event_select =
assets_event_select.options(subqueryload(AssetEvent.created_dagruns))
+ assets_event_select = assets_event_select.options(
+ subqueryload(AssetEvent.created_dagruns), joinedload(AssetEvent.asset)
+ )
assets_events = session.scalars(assets_event_select)
return AssetEventCollectionResponse(
diff --git
a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_assets.py
b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_assets.py
index bb4f086787f..ddb7d8e7a94 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_assets.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_assets.py
@@ -252,7 +252,9 @@ class TestGetAssets(TestAssets):
assert len(session.query(AssetModel).all()) == 3
assert len(session.query(AssetActive).all()) == 2
- response = test_client.get("/assets")
+ with assert_queries_count(7):
+ response = test_client.get("/assets")
+
assert response.status_code == 200
response_data = response.json()
tz_datetime_format = from_datetime_to_zulu_without_ms(DEFAULT_DATE)
@@ -585,7 +587,9 @@ class TestGetAssetAliases(TestAssetAliases):
asset_aliases = session.query(AssetAliasModel).all()
assert len(asset_aliases) == 2
- response = test_client.get("/assets/aliases")
+ with assert_queries_count(2):
+ response = test_client.get("/assets/aliases")
+
assert response.status_code == 200
response_data = response.json()
assert response_data == {
@@ -668,7 +672,10 @@ class TestGetAssetEvents(TestAssets):
assets = session.query(AssetEvent).all()
session.commit()
assert len(assets) == 2
- response = test_client.get("/assets/events")
+
+ with assert_queries_count(3):
+ response = test_client.get("/assets/events")
+
assert response.status_code == 200
response_data = response.json()
assert response_data == {
@@ -1002,9 +1009,10 @@ class
TestGetDagAssetQueuedEvents(TestQueuedEventEndpoint):
(asset,) = self.create_assets(session=session, num=1)
self._create_asset_dag_run_queues(dag_id, asset.id, session)
- response = test_client.get(
- f"/dags/{dag_id}/assets/queuedEvents",
- )
+ with assert_queries_count(4):
+ response = test_client.get(
+ f"/dags/{dag_id}/assets/queuedEvents",
+ )
assert response.status_code == 200
assert response.json() == {
@@ -1262,7 +1270,9 @@ class TestGetAssetQueuedEvents(TestQueuedEventEndpoint):
(asset,) = self.create_assets(session=session, num=1)
self._create_asset_dag_run_queues(dag_id, asset.id, session)
- response = test_client.get(f"/assets/{asset.id}/queuedEvents")
+ with assert_queries_count(3):
+ response = test_client.get(f"/assets/{asset.id}/queuedEvents")
+
assert response.status_code == 200
assert response.json() == {
"queued_events": [