Compare commits
1 Commits
main
...
dev/blocki
| Author | SHA1 | Date | |
|---|---|---|---|
| 83283c0657 |
@ -4,7 +4,7 @@ RUN apk add --no-cache \
|
|||||||
py3-yaml \
|
py3-yaml \
|
||||||
graphviz
|
graphviz
|
||||||
|
|
||||||
WORKDIR /code
|
COPY run.sh /run.sh
|
||||||
COPY code/ .
|
RUN chmod +x /run.sh
|
||||||
|
|
||||||
CMD ["python3", "puudot.py"]
|
CMD ["./run.sh"]
|
||||||
|
|||||||
@ -8,6 +8,8 @@ import uuid
|
|||||||
# - also see: https://stackoverflow.com/questions/53862417/how-to-set-head-and-tail-position-in-nodes-graphviz
|
# - also see: https://stackoverflow.com/questions/53862417/how-to-set-head-and-tail-position-in-nodes-graphviz
|
||||||
# Solve layering of clusters
|
# Solve layering of clusters
|
||||||
# - https://observablehq.com/@gordonsmith/church
|
# - https://observablehq.com/@gordonsmith/church
|
||||||
|
# https://candide-guevara.github.io/cs_related/2019/09/10/graphviz-examples.html
|
||||||
|
# https://forum.graphviz.org/t/set-nodes-from-left-to-right-and-other-from-top-to-bottom-on-the-same-rank/1860
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -40,9 +42,21 @@ def make_link_line(link, config):
|
|||||||
return line + "\n"
|
return line + "\n"
|
||||||
|
|
||||||
def make_block_line(block, config):
|
def make_block_line(block, config):
|
||||||
line = f"subgraph cluster_{block['id']} {{\n{config["subgraph"]}\nlabel=\"{block['label']}\"\n"
|
configs = []
|
||||||
for node in block["texts"]:
|
if block['hidden']:
|
||||||
|
configs.append(config["subgraph"]["hidden"])
|
||||||
|
else:
|
||||||
|
configs.append(config["subgraph"]["block"])
|
||||||
|
|
||||||
|
config_line = "\n".join(configs)
|
||||||
|
|
||||||
|
line = f"subgraph cluster_{block['id']} {{\n{config_line}\nlabel=\"{block['label']}\"\n"
|
||||||
|
for node in block["nodes"]:
|
||||||
line += f"{node}\n"
|
line += f"{node}\n"
|
||||||
|
#if block['hidden']:
|
||||||
|
#line += "{rank=same\nedge [constraint=false]\n"
|
||||||
|
#line += f"{block['nodes'][0]} -- {block['nodes'][1]}\n"
|
||||||
|
#line += "}"
|
||||||
return line + "}\n\n"
|
return line + "}\n\n"
|
||||||
|
|
||||||
|
|
||||||
@ -76,7 +90,6 @@ class Graph:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.config = {}
|
self.config = {}
|
||||||
|
|
||||||
self.layers = {}
|
|
||||||
self.blocks = []
|
self.blocks = []
|
||||||
self.nodes = []
|
self.nodes = []
|
||||||
self.links = []
|
self.links = []
|
||||||
@ -89,12 +102,15 @@ class Graph:
|
|||||||
dot = config.get("dot", {})
|
dot = config.get("dot", {})
|
||||||
if dot != {}:
|
if dot != {}:
|
||||||
dot["graph"] = dot.get("graph", "")
|
dot["graph"] = dot.get("graph", "")
|
||||||
dot["subgraph"] = dot.get("subgraph", "")
|
dot["subgraph"] = dot.get("subgraph", {})
|
||||||
|
dot["subgraph"]["block"] = dot["subgraph"].get("block", "")
|
||||||
|
dot["subgraph"]["hidden"] = dot["subgraph"].get("hidden", "")
|
||||||
dot["node"] = dot.get("node", {})
|
dot["node"] = dot.get("node", {})
|
||||||
dot["node"]["text"] = dot["node"].get("text", "")
|
dot["node"]["text"] = dot["node"].get("text", "")
|
||||||
dot["node"]["hidden"] = dot["node"].get("hidden", "")
|
dot["node"]["hidden"] = dot["node"].get("hidden", "")
|
||||||
dot["edge"] = dot.get("edge", {})
|
dot["edge"] = dot.get("edge", {})
|
||||||
dot["edge"]["default"] = dot["edge"].get("default", "")
|
dot["edge"]["default"] = dot["edge"].get("default", "")
|
||||||
|
dot["edge"]["middle"] = dot["edge"].get("middle", "")
|
||||||
dot["edge"]["hidden"] = dot["edge"].get("hidden", "")
|
dot["edge"]["hidden"] = dot["edge"].get("hidden", "")
|
||||||
self.config = dot
|
self.config = dot
|
||||||
|
|
||||||
@ -108,10 +124,10 @@ class Graph:
|
|||||||
new_block = {
|
new_block = {
|
||||||
"id": block_id,
|
"id": block_id,
|
||||||
"label": block.get("label", ""),
|
"label": block.get("label", ""),
|
||||||
"texts": []
|
"nodes": [],
|
||||||
|
"hidden": False
|
||||||
}
|
}
|
||||||
|
|
||||||
#prev_node_id = ""
|
|
||||||
texts_in_block = block.get("texts", [])
|
texts_in_block = block.get("texts", [])
|
||||||
for i, text in enumerate(texts_in_block):
|
for i, text in enumerate(texts_in_block):
|
||||||
node_id = get_id()
|
node_id = get_id()
|
||||||
@ -120,21 +136,27 @@ class Graph:
|
|||||||
if i == math.ceil(len(texts_in_block) / 2) - 1:
|
if i == math.ceil(len(texts_in_block) / 2) - 1:
|
||||||
for link in block.get("links", []):
|
for link in block.get("links", []):
|
||||||
if link in linker:
|
if link in linker:
|
||||||
|
"""link_node1 = get_id()
|
||||||
|
link_node2 = get_id()
|
||||||
|
|
||||||
|
self.nodes.append({"id": link_node1, "text": "", "hidden": True})
|
||||||
|
self.nodes.append({"id": link_node2, "text": "", "hidden": True})
|
||||||
|
|
||||||
|
link_block_id = get_id()
|
||||||
|
self.blocks.append({"id": link_block_id, "label": "", "nodes": [link_node1, link_node2], "hidden": True})
|
||||||
|
|
||||||
|
self.links.append({"from": linker[link], "to": link_node1, "head": "", "hidden": False})
|
||||||
|
#self.links.append({"from": link_node1, "to": link_node2, "head": "", "hidden": False})
|
||||||
|
self.links.append({"from": link_node2, "to": node_id, "head": block_id, "hidden": False})"""
|
||||||
self.links.append({"from": linker[link], "to": node_id, "head": block_id, "hidden": False})
|
self.links.append({"from": linker[link], "to": node_id, "head": block_id, "hidden": False})
|
||||||
del linker[link]
|
del linker[link]
|
||||||
|
|
||||||
self.nodes.append({"id": node_id, "text": text.get("text", ""), "hidden": False})
|
self.nodes.append({"id": node_id, "text": text.get("text", ""), "hidden": False})
|
||||||
|
|
||||||
# Chain nodes in block
|
new_block["nodes"].append(node_id)
|
||||||
#if prev_node_id:
|
|
||||||
# self.links.append({"from": prev_node_id, "to": node_id, "head": "", "hidden": True})
|
|
||||||
|
|
||||||
new_block["texts"].append(node_id)
|
|
||||||
|
|
||||||
for link in text.get("links", []):
|
for link in text.get("links", []):
|
||||||
linker[link] = node_id
|
linker[link] = node_id
|
||||||
|
|
||||||
#prev_node_id = node_id
|
|
||||||
|
|
||||||
self.blocks.append(new_block)
|
self.blocks.append(new_block)
|
||||||
|
|
||||||
|
|||||||
15
config.yaml
15
config.yaml
@ -1,12 +1,17 @@
|
|||||||
dot:
|
dot:
|
||||||
graph: |
|
graph: |
|
||||||
graph [splines=ortho, nodesep=0.2, ranksep="0.5 equally"]
|
graph [splines=true, nodesep=0.25, ranksep="1 equally"]
|
||||||
|
//graph [splines=ortho, nodesep=0.2, ranksep="0.5 equally"]
|
||||||
//node [color=white]
|
//node [color=white]
|
||||||
//edge [headport=n, tailport=s]
|
//edge [headport=n, tailport=s]
|
||||||
compound=true
|
compound=true
|
||||||
center=true
|
center=true
|
||||||
subgraph: |
|
subgraph:
|
||||||
labeljust=l
|
block: |
|
||||||
|
labeljust=l
|
||||||
|
hidden: |
|
||||||
|
//rank=same
|
||||||
|
//style=invis
|
||||||
node:
|
node:
|
||||||
text: |
|
text: |
|
||||||
shape=plaintext
|
shape=plaintext
|
||||||
@ -17,7 +22,7 @@ dot:
|
|||||||
height=0
|
height=0
|
||||||
edge:
|
edge:
|
||||||
default: |
|
default: |
|
||||||
headport=n
|
//headport=n
|
||||||
tailport=s
|
//tailport=s
|
||||||
hidden: |
|
hidden: |
|
||||||
style=invis
|
style=invis
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 139 KiB |
@ -6,5 +6,6 @@ services:
|
|||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
image: puudot:latest
|
image: puudot:latest
|
||||||
volumes:
|
volumes:
|
||||||
|
- ./code:/code
|
||||||
- ./data:/data
|
- ./data:/data
|
||||||
- ./config.yaml:/config.yaml
|
- ./config.yaml:/config.yaml
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user