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