Update wbs_diagram_generator.py
Browse files- wbs_diagram_generator.py +4 -15
wbs_diagram_generator.py
CHANGED
@@ -2,17 +2,15 @@ import graphviz
|
|
2 |
import json
|
3 |
from tempfile import NamedTemporaryFile
|
4 |
import os
|
5 |
-
from graph_generator_utils import add_nodes_and_edges
|
6 |
|
7 |
-
def generate_wbs_diagram(json_input: str
|
8 |
"""
|
9 |
Generates a Work Breakdown Structure (WBS) Diagram from JSON input.
|
10 |
|
11 |
Args:
|
12 |
json_input (str): A JSON string describing the WBS structure.
|
13 |
It must follow the Expected JSON Format Example below.
|
14 |
-
base_color (str): The hexadecimal color string (e.g., '#19191a') for the base
|
15 |
-
color of the nodes, from which a gradient will be generated.
|
16 |
|
17 |
Returns:
|
18 |
str: The filepath to the generated PNG image file.
|
@@ -63,7 +61,7 @@ def generate_wbs_diagram(json_input: str, base_color: str) -> str: # base_color
|
|
63 |
}
|
64 |
)
|
65 |
|
66 |
-
|
67 |
|
68 |
# Project Title node (main node)
|
69 |
dot.node(
|
@@ -77,7 +75,7 @@ def generate_wbs_diagram(json_input: str, base_color: str) -> str: # base_color
|
|
77 |
)
|
78 |
|
79 |
# Logic for color gradient within WBS specific nodes (Phases and Tasks)
|
80 |
-
# This ensures the gradient works correctly with the
|
81 |
def get_gradient_color(depth, base_hex_color, lightening_factor=0.12):
|
82 |
base_r = int(base_hex_color[1:3], 16)
|
83 |
base_g = int(base_hex_color[3:5], 16)
|
@@ -155,15 +153,6 @@ def generate_wbs_diagram(json_input: str, base_color: str) -> str: # base_color
|
|
155 |
# Use subgraph to enforce vertical alignment for tasks within a phase
|
156 |
if task_nodes_in_phase: # Only create subgraph if there are tasks
|
157 |
dot.subgraph(name=f'cluster_{phase_id}')
|
158 |
-
# You would typically add nodes to the subgraph if you want
|
159 |
-
# specific layout within it. For WBS columnar, just using rank attribute might suffice
|
160 |
-
# or ensuring proper `ranksep` and `nodesep` at graph level.
|
161 |
-
# The crucial part for columnar WBS is often setting nodes to the same rank
|
162 |
-
# or controlling the order. This is implicitly handled by `rankdir=TB`.
|
163 |
-
# The subgraphs themselves mostly define visual grouping (border) in Graphviz.
|
164 |
-
# Let's try to ensure vertical flow is emphasized without complex subgraphs that
|
165 |
-
# might interfere with the main layout engine. The primary connection handles rank.
|
166 |
-
|
167 |
# Save to temporary file
|
168 |
with NamedTemporaryFile(delete=False, suffix='.png') as tmp:
|
169 |
dot.render(tmp.name, format='png', cleanup=True)
|
|
|
2 |
import json
|
3 |
from tempfile import NamedTemporaryFile
|
4 |
import os
|
5 |
+
from graph_generator_utils import add_nodes_and_edges
|
6 |
|
7 |
+
def generate_wbs_diagram(json_input: str) -> str: # Removed base_color parameter
|
8 |
"""
|
9 |
Generates a Work Breakdown Structure (WBS) Diagram from JSON input.
|
10 |
|
11 |
Args:
|
12 |
json_input (str): A JSON string describing the WBS structure.
|
13 |
It must follow the Expected JSON Format Example below.
|
|
|
|
|
14 |
|
15 |
Returns:
|
16 |
str: The filepath to the generated PNG image file.
|
|
|
61 |
}
|
62 |
)
|
63 |
|
64 |
+
base_color = '#19191a' # Hardcoded base color
|
65 |
|
66 |
# Project Title node (main node)
|
67 |
dot.node(
|
|
|
75 |
)
|
76 |
|
77 |
# Logic for color gradient within WBS specific nodes (Phases and Tasks)
|
78 |
+
# This ensures the gradient works correctly with the hardcoded base_color
|
79 |
def get_gradient_color(depth, base_hex_color, lightening_factor=0.12):
|
80 |
base_r = int(base_hex_color[1:3], 16)
|
81 |
base_g = int(base_hex_color[3:5], 16)
|
|
|
153 |
# Use subgraph to enforce vertical alignment for tasks within a phase
|
154 |
if task_nodes_in_phase: # Only create subgraph if there are tasks
|
155 |
dot.subgraph(name=f'cluster_{phase_id}')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
156 |
# Save to temporary file
|
157 |
with NamedTemporaryFile(delete=False, suffix='.png') as tmp:
|
158 |
dot.render(tmp.name, format='png', cleanup=True)
|