grimoire-ssg/grimoiressg/content_files.py

53 lines
1.2 KiB
Python
Raw Normal View History

import os
import yaml
from yaml import Loader
2025-01-10 17:53:57 +00:00
from grimoiressg.utils import logger, for_each_glob, to_relative
def handle_file(filename):
2025-01-10 17:53:57 +00:00
logger.debug(" Reading %s...", to_relative(filename))
with open(filename, "r") as file:
data = yaml.load(file, Loader)
data["filename"] = filename
data["relative_filename"] = to_relative(filename)
results = [data]
relative_dir = os.path.dirname(filename)
for filename in data.get("include", []):
filename = relative_dir + "/" + filename
sub_data = for_each_glob(filename, handle_file)
results.extend(sub_data)
return results
def deduplicate(candidates):
names = set()
results = []
for candidate in candidates:
if candidate["relative_filename"] not in names:
names.add(candidate["relative_filename"])
results.append(candidate)
return results
def recursively_read_files(context):
data = []
2025-01-10 17:53:57 +00:00
logger.info("Reading content files...")
for filename in context["filenames"]:
data.extend(for_each_glob(filename, handle_file))
data = deduplicate(data)
2025-01-10 17:53:57 +00:00
logger.info(f"Read %d files in total.", len(data))
return data