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 540a96d87f2 [v3-1-test] Respect maximum page limit in API (#60989) 
(#61073)
540a96d87f2 is described below

commit 540a96d87f25b96e1e7f3480fac21e47efad3f7f
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Jan 26 17:31:25 2026 +0100

    [v3-1-test] Respect maximum page limit in API (#60989) (#61073)
    
    * Respect maximum page limit in API
    
    * Fix CI
    (cherry picked from commit 2ed39694038132ee0ae1ea20aad51e0c7f335f83)
    
    Co-authored-by: Pierre Jeambrun <[email protected]>
---
 airflow-core/src/airflow/api_fastapi/common/parameters.py      |  5 +++--
 .../api_fastapi/core_api/routes/public/test_task_instances.py  | 10 +++++++---
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py 
b/airflow-core/src/airflow/api_fastapi/common/parameters.py
index 1d48187f1ce..a2f80876994 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 sqlalchemy.inspection import inspect
 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 @@ class LimitFilter(BaseParam[NonNegativeInt]):
         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 ee5e9724784..8b3cb628da0 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 airflow.utils.types import DagRunType
 
 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 @@ class TestGetMappedTaskInstances:
             ({"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 @@ class TestGetMappedTaskInstances:
     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 @@ class TestGetMappedTaskInstances:
         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 @@ class TestGetMappedTaskInstances:
             ({"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
     ):

Reply via email to