bbovenzi commented on code in PR #37436:
URL: https://github.com/apache/airflow/pull/37436#discussion_r1581435304


##########
airflow/www/views.py:
##########
@@ -5415,51 +5453,78 @@ class AutocompleteView(AirflowBaseView):
     def autocomplete(self, session: Session = NEW_SESSION):
         """Autocomplete."""
         query = unquote(request.args.get("query", ""))
+        query_prefix = ""
+        prefix_search_match = re2.match(r"(?i)(dag|owner|task):\s*", query)
+        if prefix_search_match:
+            query_prefix = prefix_search_match[0].lower()
+            query = query[len(query_prefix) :]
 
         if not query:
             return flask.json.jsonify([])
 
-        # Provide suggestions of dag_ids and owners
-        dag_ids_query = select(
-            sqla.literal("dag").label("type"),
-            DagModel.dag_id.label("name"),
-            DagModel._dag_display_property_value.label("dag_display_name"),
-        ).where(
-            ~DagModel.is_subdag,
-            DagModel.is_active,
-            or_(
-                DagModel.dag_id.ilike(f"%{query}%"),
-                DagModel._dag_display_property_value.ilike(f"%{query}%"),
-            ),
-        )
+        status = flask_session.get(FILTER_STATUS_COOKIE)
+        filter_dag_ids = get_auth_manager().get_permitted_dag_ids(user=g.user)
 
-        owners_query = (
-            select(
-                sqla.literal("owner").label("type"),
-                DagModel.owners.label("name"),
-                sqla.literal(None).label("dag_display_name"),
+        def _filter_dags_query(dags_query: Select) -> Select:
+            # Hide DAGs if not showing status: "all"
+            if status == "active":
+                dags_query = dags_query.where(~DagModel.is_paused)
+            elif status == "paused":
+                dags_query = dags_query.where(DagModel.is_paused)
+            return dags_query.where(
+                ~DagModel.is_subdag, DagModel.is_active, 
DagModel.dag_id.in_(filter_dag_ids)
             )
-            .distinct()
-            .where(~DagModel.is_subdag, DagModel.is_active, 
DagModel.owners.ilike(f"%{query}%"))
-        )
 
-        # Hide DAGs if not showing status: "all"
-        status = flask_session.get(FILTER_STATUS_COOKIE)
-        if status == "active":
-            dag_ids_query = dag_ids_query.where(~DagModel.is_paused)
-            owners_query = owners_query.where(~DagModel.is_paused)
-        elif status == "paused":
-            dag_ids_query = dag_ids_query.where(DagModel.is_paused)
-            owners_query = owners_query.where(DagModel.is_paused)
+        if query_prefix.startswith("task:"):
+            # Provide suggestions of task_ids
+            dags_query = _filter_dags_query(dags_query=select(DagModel.dag_id))
+            filtered_dag_ids = session.scalars(dags_query).all()
+            dag_bag = get_airflow_app().dag_bag
+            filtered_dags = [dag_bag.get_dag(dag_id, session=session) for 
dag_id in filtered_dag_ids]

Review Comment:
   In testing locally, I am keep getting errors from these dag_bag fetches:
   
   ```ValueError("Invalid value for `name`, must not be `None`")```



-- 
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: commits-unsubscr...@airflow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to