This is an automated email from the ASF dual-hosted git repository. ephraimanierobi pushed a commit to branch v2-4-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit ee2cdbf185d06fa75455e078b1ec1b3b8e267ea4 Author: Brent Bovenzi <br...@astronomer.io> AuthorDate: Fri Oct 14 13:34:19 2022 -0400 Filter dataset dependency data on webserver (#27046) * filter dataset dependency data on webserver * rename u,v to source,target (cherry picked from commit 1c9a87e0c3e792e0fcd0e53f77b2b0158f94f02e) --- .../www/static/js/api/useDatasetDependencies.ts | 13 ++---------- airflow/www/static/js/types/index.ts | 4 ++-- airflow/www/views.py | 24 ++++++++++++---------- 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/airflow/www/static/js/api/useDatasetDependencies.ts b/airflow/www/static/js/api/useDatasetDependencies.ts index 104a7025ba..d7ec3260e6 100644 --- a/airflow/www/static/js/api/useDatasetDependencies.ts +++ b/airflow/www/static/js/api/useDatasetDependencies.ts @@ -72,7 +72,7 @@ const generateGraph = ({ nodes, edges, font }: GenerateProps) => ({ height: 40, value, })), - edges: edges.map((e) => ({ id: `${e.u}-${e.v}`, sources: [e.u], targets: [e.v] })), + edges: edges.map((e) => ({ id: `${e.source}-${e.target}`, sources: [e.source], targets: [e.target] })), }); const formatDependencies = async ({ edges, nodes }: DatasetDependencies) => { @@ -81,17 +81,8 @@ const formatDependencies = async ({ edges, nodes }: DatasetDependencies) => { // get computed style to calculate how large each node should be const font = `bold ${16}px ${window.getComputedStyle(document.body).fontFamily}`; - // Make sure we only show edges that are connected to two nodes. - const newEdges = edges.filter((e) => { - const edgeNodes = nodes.filter((n) => n.id === e.u || n.id === e.v); - return edgeNodes.length === 2; - }); - - // Then filter out any nodes without an edge. - const newNodes = nodes.filter((n) => newEdges.some((e) => e.u === n.id || e.v === n.id)); - // Finally generate the graph data with elk - const data = await elk.layout(generateGraph({ nodes: newNodes, edges: newEdges, font })); + const data = await elk.layout(generateGraph({ nodes, edges, font })); return data as Data; }; diff --git a/airflow/www/static/js/types/index.ts b/airflow/www/static/js/types/index.ts index bf0f7d9b9c..7fc88afa67 100644 --- a/airflow/www/static/js/types/index.ts +++ b/airflow/www/static/js/types/index.ts @@ -93,8 +93,8 @@ interface DepNode { } interface DepEdge { - u: string; - v: string; + source: string; + target: string; } interface DatasetListItem extends API.Dataset { diff --git a/airflow/www/views.py b/airflow/www/views.py index b6b6836256..dd6c9226af 100644 --- a/airflow/www/views.py +++ b/airflow/www/views.py @@ -3526,19 +3526,21 @@ class Airflow(AirflowBaseView): for dag, dependencies in SerializedDagModel.get_dag_dependencies().items(): dag_node_id = f"dag:{dag}" - if dag_node_id not in nodes_dict: - nodes_dict[dag_node_id] = node_dict(dag_node_id, dag, "dag") - - for dep in dependencies: - if dep.node_id not in nodes_dict and ( - dep.dependency_type == 'dag' or dep.dependency_type == 'dataset' - ): - nodes_dict[dep.node_id] = node_dict(dep.node_id, dep.dependency_id, dep.dependency_type) - edge_tuples.add((f"dag:{dep.source}", dep.node_id)) - edge_tuples.add((dep.node_id, f"dag:{dep.target}")) + if dag_node_id not in nodes_dict and len(dependencies) > 0: + for dep in dependencies: + if dep.dependency_type == 'dag' or dep.dependency_type == 'dataset': + nodes_dict[dag_node_id] = node_dict(dag_node_id, dag, 'dag') + if dep.node_id not in nodes_dict: + nodes_dict[dep.node_id] = node_dict( + dep.node_id, dep.dependency_id, dep.dependency_type + ) + if dep.source != 'dataset': + edge_tuples.add((f"dag:{dep.source}", dep.node_id)) + if dep.target != 'dataset': + edge_tuples.add((dep.node_id, f"dag:{dep.target}")) nodes = list(nodes_dict.values()) - edges = [{"u": u, "v": v} for u, v in edge_tuples] + edges = [{"source": source, "target": target} for source, target in edge_tuples] data = { 'nodes': nodes,