Merge branch 'main' of ssh://bitbucket.darc.de:7999/frag/50ohm.de into feature/include

This commit is contained in:
Prof. Dr. Matthias Jung DL9MJ
2025-06-24 22:04:42 +02:00
committed by Tim Grelka
11 changed files with 396 additions and 27 deletions
+63 -10
View File
@@ -2,7 +2,6 @@ import json
import os
import shutil
from bs4 import BeautifulSoup
from jinja2 import Environment, FileSystemLoader
from joblib import Memory
from mistletoe import Document
@@ -22,7 +21,7 @@ class Build:
self.__build_chapter = memory.cache(self.__build_chapter)
self.__build_section = memory.cache(self.__build_section)
self.__build_page = memory.cache(self.__build_page)
def __parse_katalog(self):
with open("data/fragenkatalog3b.json") as fragenkatalog_file:
fragenkatalog = json.load(fragenkatalog_file)
@@ -90,9 +89,13 @@ class Build:
)
# cached
def __build_page(self, content) :
def __build_page(self, content, course_wrapper=False, sidebar=None) :
page_template = self.env.get_template("page.html")
return page_template.render(content=content)
return page_template.render(
content=content,
course_wrapper=course_wrapper,
sidebar=sidebar
)
def __picture_handler(self, id):
os.makedirs("build/pictures", exist_ok=True)
@@ -124,8 +127,7 @@ class Build:
title=next_chapter["title"],
)
result = self.__build_page(result)
result = BeautifulSoup(result, "html.parser").prettify()
result = self.__build_page(result, course_wrapper=True)
file.write(result)
def __include_handler(self, include):
@@ -166,8 +168,7 @@ class Build:
title=next_chapter["title"],
)
result = self.__build_page(result)
result = BeautifulSoup(result, "html.parser").prettify()
result = self.__build_page(result, course_wrapper=True)
file.write(result)
def __build_book_index(self, book):
@@ -177,7 +178,6 @@ class Build:
book=book,
)
result = self.__build_page(result)
result = BeautifulSoup(result, "html.parser").prettify()
file.write(result)
def build_edition(self, edition):
@@ -197,4 +197,57 @@ class Build:
self.__build_section(edition, edition_name, section, chapter, next_section, next_chapter)
def build_assets(self):
shutil.copytree("assets", "build/assets", dirs_exist_ok=True)
shutil.copytree("assets", "build/assets", dirs_exist_ok=True)
def __parse_snippets(self):
with open("data/snippets.json") as f:
snippets = json.load(f)
with FiftyOhmHtmlRenderer(self.__build_question, self.__picture_handler, self.__photo_handler) as renderer:
for key, value in snippets.items():
snippets[key] = renderer.render_inner(Document(value))
# Remove leading <p> and trailing </p>:
snippets[key] = snippets[key][3:-4]
return snippets
def __parse_contents(self):
with open("data/content.json") as f:
contents = json.load(f)
return contents
def __build_index(self, snippets):
template = self.env.get_template("index.html")
result = template.render({"snippets": snippets})
with open("build/index.html", "w") as file:
result = self.__build_page(result)
file.write(result)
def __build_course_page(self, snippets, template, page):
template = self.env.get_template(f"{template}.html")
result=template.render({"snippets": snippets})
with open(f"build/{page}.html", "w") as file:
result = self.__build_page(result)
file.write(result)
def __build_html_page(self, contents, page):
for content in contents:
if content["url_part"] == page:
with open(f"build/{page}.html", "w") as file:
result = self.__build_page(
content=content["content"],
sidebar=content["sidebar"]
)
file.write(result)
def build_website(self):
snippets = self.__parse_snippets()
contents = self.__parse_contents()
self.__build_index(snippets)
self.__build_course_page(snippets, "kurse-karte", "kurse_vor_ort_karte")
self.__build_course_page(snippets, "kurse-liste", "kurse_vor_ort_liste")
self.__build_course_page(snippets, "patenkarte", "patenkarte")
self.__build_html_page(contents, "pruefung")
self.__build_html_page(contents, "infos")
+4 -2
View File
@@ -13,8 +13,10 @@ class Config:
with open("config/config.json") as file:
self.config = json.load(file)
self.access_token = self.get_config_value("directus_api_key")
self.base_url = self.get_config_value("directus_api_url", "https://fragenkatalog.darc.de/")
self.question_access_token = self.get_config_value("directus_question_api_key")
self.question_base_url = self.get_config_value("directus_question_base_url", "https://fragenkatalog.darc.de/")
self.content_access_token = self.get_config_value("directus_content_api_key")
self.content_base_url = self.get_config_value("directus_content_base_url", "https://redaktion.50ohm.de/")
self.no_latex = self.get_config_value("no_latex", False)
def get_config_value(self, key: str, default=None):
+23 -1
View File
@@ -8,9 +8,10 @@ from tqdm import tqdm
class Download:
def __init__(self, api, config):
def __init__(self, api, content_api, config):
self.api = api
self.config = config
self.content_api = content_api
def download_edition(self, edition):
in_edition = self.api.get_one("items/edition", {"filter": {"ident": {"_eq": edition}}})
@@ -141,3 +142,24 @@ class Download:
with open("data/includes.json", "w") as f:
json.dump(result, f, indent=4)
def download_snippets(self):
snippets = {}
for snippet in tqdm(self.content_api.get("items/snippet"), desc="Downloading snippets"):
snippets[snippet["ident"]] = snippet["content"]
with open("data/snippets.json", "w", encoding="utf-8") as file:
json.dump(snippets, file, ensure_ascii=False, indent=4)
def download_content(self):
contents = []
for content in self.content_api.get("items/content"): #tqdm(self.content_api.get("items/content"), desc="Downloading content"):
contents.append(
{
"url_part": content["url_part"],
"content": content["content"],
"sidebar": content["sidebar"],
}
)
with open("data/content.json", "w", encoding="utf-8") as file:
json.dump(contents, file, ensure_ascii=False, indent=4)