diff --git a/stsg/build.py b/stsg/build.py index 7ff91a9..c5361db 100644 --- a/stsg/build.py +++ b/stsg/build.py @@ -8,7 +8,7 @@ from typing import Optional, Union, Dict, Generator, List, DefaultDict, Any from bs4 import BeautifulSoup from collections import defaultdict import toml -import datetime +from datetime import datetime from . import config @@ -110,11 +110,8 @@ class ArticleTranslation: "article_content": self.article_content, "article_preview": self.article_preview, "article_url": self.url, - "article_overview_url": self.article.url, "article_slug": self.article.slug, "article_title": self.title, - "article_datetime": self.article.article_written.strftime(config.formatting.datetime_format), - "article_datetime_iso": self.article.article_written.isoformat(), } if return_foreign_articles: @@ -163,13 +160,9 @@ class Article: self.url = "/" + "/".join(self.location_in_tree) self.dist_path = Path(config.setup.dist_directory, *self.location_in_tree) - - - self.article_written = datetime.datetime.fromisoformat(article_config["datetime"]) if "datetime" in article_config else datetime.datetime.fromtimestamp(self.directory.stat().st_mtime) - - + # build the tree self.child_articles: List[Article] = [] - self.article_translations: List[ArticleTranslation] = [] + self.article_translations_list: List[ArticleTranslation] = [] self.article_translations_map: Dict[str, ArticleTranslation] = {} for c in self.directory.iterdir(): @@ -178,7 +171,7 @@ class Article: if c.is_file(): at = ArticleTranslation(c, self) - self.article_translations.append(at) + self.article_translations_list.append(at) self.article_translations_map[at.language_code] = at elif c.is_dir(): self.child_articles.append(Article( @@ -186,23 +179,37 @@ class Article: location_in_tree=self.location_in_tree.copy(), )) - # the tree is built - self.article_translations.sort(key=lambda a: a.priority, reverse=True) - self.translation_cards = "\n".join(a.get_translation_card() for a in self.article_translations) - self.article_cards = "\n".join(c.get_article_card() for c in self.child_articles) - - for at in self.article_translations: - at.__init_context__() + self.article_translations_list.sort(key=lambda a: a.priority, reverse=True) logger.info("found %s at %s with the translations %s", self.slug, ".".join(list(self.location_in_tree)), ",".join(self.article_translations_map.keys())) + # the tree is built + self.translation_cards = "\n".join(a.get_translation_card() for a in self.article_translations_list) + self.article_cards = "\n".join(c.get_article_card() for c in self.child_articles) + + for at in self.article_translations_list: + at.__init_context__() + self.__init_context__() + + + + def __init_context__(self): + self.context["url"] = self.url + self.context_meta["slug"] = self.slug + + modified_at = datetime.fromisoformat(article_config["datetime"]) if "datetime" in article_config else datetime.fromtimestamp(self.directory.stat().st_mtime) + self.context_meta["date"] = modified_at.strftime(config.formatting.datetime_format) + self.context_meta["iso_date"] = modified_at.isoformat() + + + def build(self): # builds the tree structure to the dist directory self.dist_path.mkdir(parents=True, exist_ok=True) with Path(self.dist_path, "index.html").open("w") as f: f.write(self.get_overview()) - for at in self.article_translations: + for at in self.article_translations_list: at.build() for ca in self.child_articles: @@ -210,11 +217,6 @@ class Article: def _get_values(self, return_foreign_articles: bool = True) -> Dict[str, str]: r = { - "article_url": self.url, - "article_title": self.slug, - "article_slug": self.slug, - "article_datetime": self.article_written.strftime(config.formatting.datetime_format), - "article_datetime_iso": self.article_written.isoformat(), "article_overview_url": self.url, "article_translation_cards": self.translation_cards, "article_children_cards": self.article_cards,