sunank200 commented on code in PR #52297:
URL: https://github.com/apache/airflow/pull/52297#discussion_r2182308197


##########
airflow-core/docs/public-airflow-interface.rst:
##########
@@ -417,3 +541,55 @@ but in Airflow they are not parts of the Public Interface 
and might change any t
 * Python classes except those explicitly mentioned in this document, are 
considered an
   internal implementation detail and you should not assume they will be 
maintained
   in a backwards-compatible way.
+
+**Direct metadata database access from task code is no longer allowed**.
+Task code cannot directly access the metadata database to query DAG state, 
task history,
+or DAG runs. Instead, use one of the following alternatives:
+
+* **Task Context**: Use :func:`~airflow.sdk.get_current_context` to access 
task instance
+  information and methods like 
:meth:`~airflow.sdk.types.RuntimeTaskInstanceProtocol.get_dr_count`,
+  :meth:`~airflow.sdk.types.RuntimeTaskInstanceProtocol.get_dagrun_state`, and
+  :meth:`~airflow.sdk.types.RuntimeTaskInstanceProtocol.get_task_states`.
+
+* **REST API**: Use the :doc:`Stable REST API <stable-rest-api-ref>` for 
programmatic
+  access to Airflow metadata.
+
+* **Python Client**: Use the `Python Client 
<https://github.com/apache/airflow-client-python>`_ for Python-based
+  interactions with Airflow.
+
+This change improves architectural separation and enables remote execution 
capabilities.
+
+Example of using Task Context instead of direct database access:
+
+.. code-block:: python
+
+    from airflow.sdk import dag, get_current_context, task
+    from airflow.utils.state import DagRunState
+    from datetime import datetime
+
+
+    @dag(dag_id="example_dag", start_date=datetime(2025, 1, 1), 
schedule="@hourly", tags=["misc"], catchup=False)
+    def example_dag():
+
+        @task(task_id="check_dagrun_state")
+        def check_state():
+            context = get_current_context()
+            ti = context["ti"]
+            dag_run = context["dag_run"]
+
+            # Use Task Context methods instead of direct DB access
+            dr_count = ti.get_dr_count(dag_id="example_dag")
+            dagrun_state = ti.get_dagrun_state(dag_id="example_dag", 
run_id=dag_run.run_id)
+
+            return f"DAG run count: {dr_count}, current state: {dagrun_state}"
+
+        check_state()
+
+
+    example_dag()
+
+.. note::
+
+   **For Airflow 2.x users**: If you are using Airflow 2.x, please refer to the
+   `Airflow 2.11 Public Interface Documentation 
<https://airflow.apache.org/docs/apache-airflow/2.11.0/public-airflow-interface.html>`_
+   for the legacy interface.

Review Comment:
   I have removed it but then I had added this link for user who has reached 
the end of the page and move to previous version of documentation.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to