From 65bf5524a287f58bf69e65da81380a856946291c Mon Sep 17 00:00:00 2001 From: Yax Date: Sat, 27 Sep 2025 16:05:25 +0200 Subject: [PATCH] Refactoring: split big main function --- makesite.py | 305 ++++++++++++++++++++++++++++------------------------ 1 file changed, 166 insertions(+), 139 deletions(-) diff --git a/makesite.py b/makesite.py index abebdd6..a8e30b5 100755 --- a/makesite.py +++ b/makesite.py @@ -51,8 +51,6 @@ FRENCH_WEEKDAYS = ['lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.', 'dim.'] FRENCH_MONTHS = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'] -# initialize markdown - class HighlightRenderer(mistune.HTMLRenderer): def block_code(self, code, info=None): @@ -388,14 +386,136 @@ def make_list( fwrite(dst_path, output) -def generate_rss(posts, params): +def create_blog(page_layout, list_in_page_layout, params): + banner_layout = fread("layout/banner.html") + paging_layout = fread("layout/paging.html") + post_layout = fread("layout/post.html") + post_layout = render(page_layout, content=post_layout) + comment_layout = fread("layout/comment.html") + comment_detail_layout = fread("layout/comment-detail.html") + category_layout = fread("layout/category.html") + item_layout = fread("layout/item.html") + + posts = make_posts( + "posts", + "**/*.md", + "_site/{{ post_url }}/index.html", + post_layout, + category_layout, + comment_layout, + comment_detail_layout, + **params + ) + + # Create blog list pages by 10. + page_size = 10 + chunk_posts = [ + posts[i: i + page_size] + for i in range(0, len(posts), page_size) + ] + page = 1 + last_page = len(chunk_posts) + for chunk in chunk_posts: + params["page"] = page + if page == last_page: + params["next_page"] = "" + else: + params["next_page"] = "/page" + str(page + 1) + "/" + if page == 1: + params["previous_page"] = "" + make_list( + chunk, + "_site/index.html", + list_in_page_layout, + item_layout, + banner_layout, + paging_layout, + **params + ) + else: + params["previous_page"] = "/page" + str(page - 1) + "/" + make_list( + chunk, + "_site/page" + str(page) + "/index.html", + list_in_page_layout, + item_layout, + banner_layout, + paging_layout, + **params + ) + page = page + 1 + return posts + + +def generate_categories(list_in_page_layout, item_nosummary_layout, + posts, params): + category_title_layout = fread("layout/category_title.html") + cat_post = {} + for post in posts: + for cat in post["categories"]: + if cat in cat_post: + cat_post[cat].append(post) + else: + cat_post[cat] = [post] + for cat in cat_post.keys(): + params["category"] = cat + make_list( + cat_post[cat], + "_site/" + slugify(cat) + "/index.html", + list_in_page_layout, + item_nosummary_layout, + category_title_layout, + None, + **params + ) + + +def generate_archives(blog_posts, list_in_page_layout, item_nosummary_layout, + archive_title_layout, params): + make_list( + blog_posts, + "_site/archives/index.html", + list_in_page_layout, + item_nosummary_layout, + archive_title_layout, + None, + **params + ) + + +def generate_notes(page_layout, archive_title_layout, + list_in_page_layout, params): + note_layout = fread("layout/note.html") + item_note_layout = fread("layout/item_note.html") + note_layout = render(page_layout, content=note_layout) + + notes = make_notes( + "notes", + "**/*.md", + "_site/{{ post_url }}/index.html", + note_layout, + **params + ) + + make_list( + notes, + "_site/notes/index.html", + list_in_page_layout, + item_note_layout, + archive_title_layout, + None, + **params + ) + + +def generate_rss_feeds(posts, params): rss_xml = fread("layout/rss.xml") rss_item_xml = fread("layout/rss_item.xml") - # Create main RSS feed for 10 last entries - nb_items = min(10, len(posts)) + + # Create main RSS feed for 10 last entries for filename in ("_site/rss.xml", "_site/index.xml"): make_list( - posts[:nb_items], + posts[:10], filename, rss_xml, rss_item_xml, @@ -425,12 +545,21 @@ def generate_rss(posts, params): ) -def main(param_file): - # Create a new _site directory from scratch. - if os.path.isdir("_site"): - shutil.rmtree("_site") - shutil.copytree("static", "_site") +def generate_sitemap(posts, params): + sitemap_xml = fread("layout/sitemap.xml") + sitemap_item_xml = fread("layout/sitemap_item.xml") + make_list( + posts, + "_site/sitemap.xml", + sitemap_xml, + sitemap_item_xml, + None, + None, + **params + ) + +def get_params(param_file): # Default parameters. params = { "title": "Blog", @@ -444,146 +573,44 @@ def main(param_file): log("use params from " + param_file) if os.path.isfile(param_file): params.update(json.loads(fread(param_file))) + return params + + +def clean_site(): + if os.path.isdir("_site"): + shutil.rmtree("_site") + shutil.copytree("static", "_site") + + +def main(param_file): + + params = get_params(param_file) + + # Create a new _site directory from scratch. + clean_site() # Load layouts. - banner_layout = fread("layout/banner.html") - paging_layout = fread("layout/paging.html") - archive_title_layout = fread("layout/archives.html") page_layout = fread("layout/page.html") - post_layout = fread("layout/post.html") list_layout = fread("layout/list.html") - item_layout = fread("layout/item.html") + list_in_page_layout = render(page_layout, content=list_layout) + archive_title_layout = fread("layout/archives.html") item_nosummary_layout = fread("layout/item_nosummary.html") - item_note_layout = fread("layout/item_note.html") - category_title_layout = fread("layout/category_title.html") - category_layout = fread("layout/category.html") - comment_layout = fread("layout/comment.html") - comment_detail_layout = fread("layout/comment-detail.html") - sitemap_xml = fread("layout/sitemap.xml") - sitemap_item_xml = fread("layout/sitemap_item.xml") - note_layout = fread("layout/note.html") - # Combine layouts to form final layouts. - post_layout = render(page_layout, content=post_layout) - list_layout = render(page_layout, content=list_layout) - note_layout = render(page_layout, content=note_layout) + blog_posts = create_blog(page_layout, list_in_page_layout, params) - # Create blogs. - blog_posts = make_posts( - "posts", - "**/*.md", - "_site/{{ post_url }}/index.html", - post_layout, - category_layout, - comment_layout, - comment_detail_layout, - **params - ) + generate_categories(list_in_page_layout, item_nosummary_layout, + blog_posts, params) - # Create blog list pages by 10. - page_size = 10 - chunk_posts = [ - blog_posts[i: i + page_size] - for i in range(0, len(blog_posts), page_size) - ] - page = 1 - last_page = len(chunk_posts) - for chunk in chunk_posts: - params["page"] = page - if page == last_page: - params["next_page"] = "" - else: - params["next_page"] = "/page" + str(page + 1) + "/" - if page == 1: - params["previous_page"] = "" - make_list( - chunk, - "_site/index.html", - list_layout, - item_layout, - banner_layout, - paging_layout, - **params - ) - else: - params["previous_page"] = "/page" + str(page - 1) + "/" - make_list( - chunk, - "_site/page" + str(page) + "/index.html", - list_layout, - item_layout, - banner_layout, - paging_layout, - **params - ) - page = page + 1 + generate_archives(blog_posts, list_in_page_layout, item_nosummary_layout, + archive_title_layout, params) - # Create category pages - cat_post = {} - for post in blog_posts: - for cat in post["categories"]: - if cat in cat_post: - cat_post[cat].append(post) - else: - cat_post[cat] = [post] - for cat in cat_post.keys(): - params["category"] = cat - make_list( - cat_post[cat], - "_site/" + slugify(cat) + "/index.html", - list_layout, - item_nosummary_layout, - category_title_layout, - None, - **params - ) + generate_notes(page_layout, archive_title_layout, + list_in_page_layout, params) - # Create archive page - make_list( - blog_posts, - "_site/archives/index.html", - list_layout, - item_nosummary_layout, - archive_title_layout, - None, - **params - ) + generate_rss_feeds(blog_posts, params) - generate_rss(blog_posts, params) + generate_sitemap(blog_posts, params) - # Create sitemap - make_list( - blog_posts, - "_site/sitemap.xml", - sitemap_xml, - sitemap_item_xml, - None, - None, - **params - ) - - # Create notes. - notes = make_notes( - "notes", - "**/*.md", - "_site/{{ post_url }}/index.html", - note_layout, - **params - ) - - make_list( - notes, - "_site/notes/index.html", - list_layout, - item_note_layout, - archive_title_layout, - None, - **params - ) - - -# Test parameter to be set temporarily by unit tests. -_test = None if __name__ == "__main__": parser = argparse.ArgumentParser(description='Makesite')