feature: add solution to question index
This commit is contained in:
+14
-20
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user