feature: add solution to question index

This commit is contained in:
Matthias Jung
2026-04-05 22:43:57 +02:00
parent bec3012edb
commit a3b21beae6
+14 -20
View File
@@ -2,7 +2,6 @@ import json
import random import random
import re import re
import shutil import shutil
from collections import defaultdict
from pathlib import Path from pathlib import Path
from jinja2 import Environment, FileSystemLoader from jinja2 import Environment, FileSystemLoader
@@ -24,7 +23,7 @@ class Build:
self.env.filters["shuffle_answers"] = self.__filter_shuffle_answers self.env.filters["shuffle_answers"] = self.__filter_shuffle_answers
self.questions = self.__parse_katalog() self.questions = self.__parse_katalog()
self.question_index = defaultdict(dict) self.question_index = {}
self.question_token_pattern = re.compile(r"^\s*\[question:([\w\d]+)\]", re.MULTILINE) self.question_token_pattern = re.compile(r"^\s*\[question:([\w\d]+)\]", re.MULTILINE)
def __parse_katalog(self): def __parse_katalog(self):
@@ -539,31 +538,26 @@ class Build:
section_content: str, section_content: str,
): ):
for question_number in self.question_token_pattern.findall(section_content or ""): for question_number in self.question_token_pattern.findall(section_content or ""):
section_entry = self.question_index[question_number].setdefault( question_entry = self.question_index.setdefault(
section_ident, question_number,
{ {
"has_solution": self.__has_solution(question_number),
"section": section_ident,
"chapter_title": chapter_title, "chapter_title": chapter_title,
"section_title": section_title, "section_title": section_title,
"editions": set(), "editions": [],
}, },
) )
section_entry["editions"].add(edition) if edition not in question_entry["editions"]:
question_entry["editions"].append(edition)
def __serialize_question_index(self) -> dict[str, list[dict[str, object]]]: def __has_solution(self, question_number: str) -> bool:
serialized: dict[str, list[dict[str, object]]] = {} return (self.config.p_data_solutions / f"{question_number}.md").exists()
for question, sections in sorted(self.question_index.items()):
serialized[question] = [
{
"section": section,
"chapter_title": data["chapter_title"],
"section_title": data["section_title"],
"editions": sorted(data["editions"]),
}
for section, data in sorted(sections.items())
]
return serialized
def build_question_index(self): def build_question_index(self):
for question_data in self.question_index.values():
question_data["editions"] = sorted(question_data["editions"])
with (self.config.p_build_assets / "question_index.json").open("w", encoding="utf-8") as file: with (self.config.p_build_assets / "question_index.json").open("w", encoding="utf-8") as file:
json.dump(self.__serialize_question_index(), file, ensure_ascii=False, indent=2, sort_keys=True) json.dump(self.question_index, file, ensure_ascii=False, indent=2, sort_keys=True)
file.write("\n") file.write("\n")