mirror of
https://github.com/sigmasternchen/grimoire
synced 2025-03-15 08:08:55 +00:00
cleanup + better logging
This commit is contained in:
parent
da5ec4876a
commit
04dadfa8e4
1 changed files with 27 additions and 10 deletions
|
@ -1,7 +1,6 @@
|
||||||
import argparse
|
import argparse
|
||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
|
|
||||||
import markdown
|
import markdown
|
||||||
import yaml
|
import yaml
|
||||||
|
@ -13,29 +12,41 @@ jinja_env = Environment(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def to_relative(path):
|
||||||
|
trimmed = path.removeprefix(os.getcwd())
|
||||||
|
if trimmed != path:
|
||||||
|
trimmed = "." + trimmed
|
||||||
|
return trimmed
|
||||||
|
|
||||||
|
|
||||||
def compile_markdown(data):
|
def compile_markdown(data):
|
||||||
for entry in data:
|
for entry in data:
|
||||||
if "markdown" in entry:
|
if "markdown" in entry:
|
||||||
print(f"Compiling markdown for {entry['filename']}...")
|
print(f"Compiling markdown for {entry['relative_filename']}...")
|
||||||
entry["markdown_compiled"] = markdown.markdown(entry["markdown"])
|
entry["markdown_compiled"] = markdown.markdown(entry["markdown"])
|
||||||
|
|
||||||
|
|
||||||
def render(data, tags, output_dir):
|
def render(data, tags, output_dir):
|
||||||
|
files_written = 0
|
||||||
|
|
||||||
for entry in data:
|
for entry in data:
|
||||||
if "template" in entry:
|
if "template" in entry:
|
||||||
template_path = os.path.realpath(os.path.dirname(entry["filename"]) + "/" + entry["template"])
|
template_path = os.path.realpath(os.path.dirname(entry["filename"]) + "/" + entry["template"])
|
||||||
template_dir = os.path.dirname(template_path)
|
template_dir = os.path.dirname(template_path)
|
||||||
print(f"Rendering template for {entry['filename']}...")
|
print(f"Rendering template for {entry['relative_filename']}...")
|
||||||
template = jinja_env.get_template(template_path)
|
template = jinja_env.get_template(template_path)
|
||||||
entry["rendered"] = template.render(current=entry, all=data, tags=tags, template_dir=template_dir)
|
entry["rendered"] = template.render(current=entry, all=data, tags=tags, template_dir=template_dir)
|
||||||
|
|
||||||
if "rendered" in entry and "output" in entry:
|
if "rendered" in entry and "output" in entry:
|
||||||
|
files_written += 1
|
||||||
filename = os.path.realpath(output_dir + "/" + entry["output"])
|
filename = os.path.realpath(output_dir + "/" + entry["output"])
|
||||||
print(f" ... writing to {filename}")
|
print(f" ... writing to {to_relative(filename)}")
|
||||||
os.makedirs(os.path.dirname(filename), exist_ok=True)
|
os.makedirs(os.path.dirname(filename), exist_ok=True)
|
||||||
with open(filename, "w") as file:
|
with open(filename, "w") as file:
|
||||||
file.write(entry["rendered"])
|
file.write(entry["rendered"])
|
||||||
|
|
||||||
|
return files_written
|
||||||
|
|
||||||
|
|
||||||
def extract_tags(data):
|
def extract_tags(data):
|
||||||
tags = {}
|
tags = {}
|
||||||
|
@ -61,12 +72,13 @@ def handle_file_or_glob(globname):
|
||||||
|
|
||||||
|
|
||||||
def handle_file(filename):
|
def handle_file(filename):
|
||||||
print(f"Reading {filename}...")
|
print(f"Reading {to_relative(filename)}...")
|
||||||
|
|
||||||
with open(filename, "r") as file:
|
with open(filename, "r") as file:
|
||||||
data = yaml.load(file, Loader)
|
data = yaml.load(file, Loader)
|
||||||
|
|
||||||
data["filename"] = filename
|
data["filename"] = filename
|
||||||
|
data["relative_filename"] = to_relative(filename)
|
||||||
results = [data]
|
results = [data]
|
||||||
|
|
||||||
relative_dir = os.path.dirname(filename)
|
relative_dir = os.path.dirname(filename)
|
||||||
|
@ -88,26 +100,31 @@ def parse_arguments():
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) < 2:
|
|
||||||
print("no files to work on")
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
output_dir, filenames = parse_arguments()
|
output_dir, filenames = parse_arguments()
|
||||||
|
|
||||||
print(f"Output directory: {output_dir}")
|
print(f"Output directory: {output_dir}")
|
||||||
print(f"Initial filenames: {filenames}")
|
print(f"Initial filenames: {filenames}")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
if len(filenames) == 0:
|
||||||
|
print("error: at least one filename needed")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
data = []
|
data = []
|
||||||
for filename in filenames:
|
for filename in filenames:
|
||||||
data.extend(handle_file_or_glob(filename))
|
data.extend(handle_file_or_glob(filename))
|
||||||
|
|
||||||
print(f"Total number of entries: {len(data)}")
|
print(f"Total number of entries: {len(data)}")
|
||||||
|
print()
|
||||||
|
|
||||||
compile_markdown(data)
|
compile_markdown(data)
|
||||||
tags = extract_tags(data)
|
tags = extract_tags(data)
|
||||||
|
files_written = render(data, tags, output_dir)
|
||||||
|
|
||||||
render(data, tags, output_dir)
|
print(f"Total files written: {files_written}")
|
||||||
|
|
||||||
|
print()
|
||||||
|
print("Done.")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in a new issue