jscheffl commented on code in PR #37436: URL: https://github.com/apache/airflow/pull/37436#discussion_r1581455829
########## 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: Do you have specific DAGs loaded? Which chars are you entering? Can you post the stack trace? I tested locally on my side and for me it looks good. -- 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