Fix: render graph.json, a dependency, before node-centered-graph.

This commit is contained in:
Sergio Martínez Portela 2023-06-09 21:04:04 +02:00
parent 49a5ec3df2
commit 3f5ec66c3d

View File

@ -288,6 +288,19 @@ def regen_all(src_top, dest_top, *, docs=None, db=None):
backlink_graph[main_headline_id] = set() backlink_graph[main_headline_id] = set()
backlink_graph[main_headline_id].add(backlink) backlink_graph[main_headline_id].add(backlink)
# Output graph files
graphpath = os.path.join(dest_top, "graph.json")
graph_explorer_path = os.path.join(dest_top, "graph.html")
with open(graphpath, "wt") as f:
json.dump(obj=graph, fp=f, indent=2)
graph_explorer_path = os.path.join(dest_top, "graph.html")
with open(graph_explorer_path, 'wt') as f:
with open(os.path.join(os.path.dirname(os.path.abspath(dest_top)), '..', 'static', 'graph_explorer.html'), 'rt') as template:
source = template.read()
f.write(source.replace('<!-- REPLACE_THIS_WITH_GRAPH -->',
json.dumps(graph)))
logging.info("Generated {} files".format(files_generated))
# Render docs after we've built the graph # Render docs after we've built the graph
# Render main headlines # Render main headlines
full_graph_info = { "nodes": graph, "backlinks": backlink_graph, "main_headlines": main_headlines_by_path } full_graph_info = { "nodes": graph, "backlinks": backlink_graph, "main_headlines": main_headlines_by_path }
@ -298,7 +311,6 @@ def regen_all(src_top, dest_top, *, docs=None, db=None):
f.write(render_as_document(main_headline, main_headline.doc, headlineLevel=0, graph=full_graph_info, f.write(render_as_document(main_headline, main_headline.doc, headlineLevel=0, graph=full_graph_info,
title=org_rw.token_list_to_plaintext(main_headline.title.contents))) title=org_rw.token_list_to_plaintext(main_headline.title.contents)))
# Render all headlines # Render all headlines
for headline in all_headlines: for headline in all_headlines:
endpath = os.path.join(dest_top, headline.id + ".node.html") endpath = os.path.join(dest_top, headline.id + ".node.html")
@ -316,18 +328,6 @@ def regen_all(src_top, dest_top, *, docs=None, db=None):
title=org_rw.token_list_to_plaintext(headline.title.contents))) title=org_rw.token_list_to_plaintext(headline.title.contents)))
files_generated += 1 files_generated += 1
# Output graph files
graphpath = os.path.join(dest_top, "graph.json")
graph_explorer_path = os.path.join(dest_top, "graph.html")
with open(graphpath, "wt") as f:
json.dump(obj=graph, fp=f, indent=2)
graph_explorer_path = os.path.join(dest_top, "graph.html")
with open(graph_explorer_path, 'wt') as f:
with open(os.path.join(os.path.dirname(os.path.abspath(dest_top)), '..', 'static', 'graph_explorer.html'), 'rt') as template:
source = template.read()
f.write(source.replace('<!-- REPLACE_THIS_WITH_GRAPH -->',
json.dumps(graph)))
logging.info("Generated {} files".format(files_generated))
cur.close() cur.close()
db.commit() db.commit()
@ -712,13 +712,17 @@ def render_connections(headline_id, content, graph):
# TODO: Cache results # TODO: Cache results
# TODO: Avoid querying graph API on script # TODO: Avoid querying graph API on script
# TODO: Properly render outgouing links
logging.info("Generating centered graph for {}".format(headline_id)) logging.info("Generating centered graph for {}".format(headline_id))
import subprocess import subprocess
this_dir = os.path.dirname(os.path.abspath(__file__)) this_dir = os.path.dirname(os.path.abspath(__file__))
os.makedirs('cache', exist_ok=True) os.makedirs('cache', exist_ok=True)
subprocess.check_call(['python3', os.path.join(this_dir, 'gen-centered-graph.py'), headline_id, 'cache/' + headline_id + '.svg']) subprocess.check_call(['python3', os.path.join(this_dir, 'gen-centered-graph.py'), headline_id, 'cache/' + headline_id + '.svg'])
with open('cache/' + headline_id + '.svg') as f: try:
content.append("<div class='connections'>{}</div>".format(f.read())) with open('cache/' + headline_id + '.svg') as f:
content.append("<div class='connections'>{}</div>".format(f.read()))
except FileNotFoundError:
logging.exception('Graph file not produced on headline: "{}"'.format(headline_id))
def render(headline, doc, graph, headlineLevel): def render(headline, doc, graph, headlineLevel):
try: try: