diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py b/airflow-core/src/airflow/api_fastapi/common/parameters.py index 1d48187f1cea9..a2f80876994b2 100644 --- a/airflow-core/src/airflow/api_fastapi/common/parameters.py +++ b/airflow-core/src/airflow/api_fastapi/common/parameters.py @@ -40,6 +40,7 @@ from airflow._shared.timezones import timezone from airflow.api_fastapi.core_api.base import OrmClause from airflow.api_fastapi.core_api.security import GetUserDep +from airflow.configuration import conf from airflow.models import Base from airflow.models.asset import ( AssetAliasModel, @@ -99,8 +100,8 @@ def to_orm(self, select: Select) -> Select: return select.limit(self.value) @classmethod - def depends(cls, limit: NonNegativeInt = 50) -> LimitFilter: - return cls().set_value(limit) + def depends(cls, limit: NonNegativeInt = conf.getint("api", "page_size")) -> LimitFilter: + return cls().set_value(min(limit, conf.getint("api", "maximum_page_limit"))) class OffsetFilter(BaseParam[NonNegativeInt]): diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py index ee5e972478482..8b3cb628da0df 100644 --- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py +++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py @@ -47,6 +47,7 @@ from tests_common.test_utils.api_fastapi import _check_task_instance_note from tests_common.test_utils.asserts import assert_queries_count +from tests_common.test_utils.config import conf_vars from tests_common.test_utils.db import ( clear_db_runs, clear_rendered_ti_fields, @@ -785,8 +786,8 @@ def test_offset_limit(self, test_client, one_task_with_many_mapped_tis): ({"order_by": "map_index", "limit": 100}, list(range(100))), ({"order_by": "-map_index", "limit": 100}, list(range(109, 9, -1))), ( - {"order_by": "state", "limit": 108}, - list(range(5, 25)) + list(range(25, 110)) + list(range(3)), + {"order_by": "state", "limit": 108}, # Maximum page limit will limit result to 100 items. + list(range(5, 25)) + list(range(25, 105)), ), ( {"order_by": "-state", "limit": 100}, @@ -801,6 +802,8 @@ def test_offset_limit(self, test_client, one_task_with_many_mapped_tis): def test_mapped_instances_order( self, test_client, session, params, expected_map_indexes, one_task_with_many_mapped_tis ): + from airflow.configuration import conf + with assert_queries_count(4): response = test_client.get( "/dags/mapped_tis/dagRuns/run_mapped_tis/taskInstances/task_2/listMapped", @@ -810,7 +813,7 @@ def test_mapped_instances_order( assert response.status_code == 200 body = response.json() assert body["total_entries"] == 110 - assert len(body["task_instances"]) == params["limit"] + assert len(body["task_instances"]) == min(params["limit"], conf.getint("api", "maximum_page_limit")) assert expected_map_indexes == [ti["map_index"] for ti in body["task_instances"]] # Ordering of nulls values is DB specific. @@ -822,6 +825,7 @@ def test_mapped_instances_order( ({"order_by": "-rendered_map_index", "limit": 100}, [0] + list(range(11, 110)[::-1])), # Desc ], ) + @conf_vars({("api", "maximum_page_limit"): "110"}) def test_rendered_map_index_order( self, test_client, session, params, expected_map_indexes, one_task_with_many_mapped_tis ):