Refactoring: split big main function
This commit is contained in:
parent
9a7312c585
commit
65bf5524a2
1 changed files with 166 additions and 139 deletions
305
makesite.py
305
makesite.py
|
@ -51,8 +51,6 @@ FRENCH_WEEKDAYS = ['lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.', 'dim.']
|
||||||
FRENCH_MONTHS = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin',
|
FRENCH_MONTHS = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin',
|
||||||
'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.']
|
'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.']
|
||||||
|
|
||||||
# initialize markdown
|
|
||||||
|
|
||||||
|
|
||||||
class HighlightRenderer(mistune.HTMLRenderer):
|
class HighlightRenderer(mistune.HTMLRenderer):
|
||||||
def block_code(self, code, info=None):
|
def block_code(self, code, info=None):
|
||||||
|
@ -388,14 +386,136 @@ def make_list(
|
||||||
fwrite(dst_path, output)
|
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_xml = fread("layout/rss.xml")
|
||||||
rss_item_xml = fread("layout/rss_item.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"):
|
for filename in ("_site/rss.xml", "_site/index.xml"):
|
||||||
make_list(
|
make_list(
|
||||||
posts[:nb_items],
|
posts[:10],
|
||||||
filename,
|
filename,
|
||||||
rss_xml,
|
rss_xml,
|
||||||
rss_item_xml,
|
rss_item_xml,
|
||||||
|
@ -425,12 +545,21 @@ def generate_rss(posts, params):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def main(param_file):
|
def generate_sitemap(posts, params):
|
||||||
# Create a new _site directory from scratch.
|
sitemap_xml = fread("layout/sitemap.xml")
|
||||||
if os.path.isdir("_site"):
|
sitemap_item_xml = fread("layout/sitemap_item.xml")
|
||||||
shutil.rmtree("_site")
|
make_list(
|
||||||
shutil.copytree("static", "_site")
|
posts,
|
||||||
|
"_site/sitemap.xml",
|
||||||
|
sitemap_xml,
|
||||||
|
sitemap_item_xml,
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
**params
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_params(param_file):
|
||||||
# Default parameters.
|
# Default parameters.
|
||||||
params = {
|
params = {
|
||||||
"title": "Blog",
|
"title": "Blog",
|
||||||
|
@ -444,146 +573,44 @@ def main(param_file):
|
||||||
log("use params from " + param_file)
|
log("use params from " + param_file)
|
||||||
if os.path.isfile(param_file):
|
if os.path.isfile(param_file):
|
||||||
params.update(json.loads(fread(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.
|
# 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")
|
page_layout = fread("layout/page.html")
|
||||||
post_layout = fread("layout/post.html")
|
|
||||||
list_layout = fread("layout/list.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_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.
|
blog_posts = create_blog(page_layout, list_in_page_layout, params)
|
||||||
post_layout = render(page_layout, content=post_layout)
|
|
||||||
list_layout = render(page_layout, content=list_layout)
|
|
||||||
note_layout = render(page_layout, content=note_layout)
|
|
||||||
|
|
||||||
# Create blogs.
|
generate_categories(list_in_page_layout, item_nosummary_layout,
|
||||||
blog_posts = make_posts(
|
blog_posts, params)
|
||||||
"posts",
|
|
||||||
"**/*.md",
|
|
||||||
"_site/{{ post_url }}/index.html",
|
|
||||||
post_layout,
|
|
||||||
category_layout,
|
|
||||||
comment_layout,
|
|
||||||
comment_detail_layout,
|
|
||||||
**params
|
|
||||||
)
|
|
||||||
|
|
||||||
# Create blog list pages by 10.
|
generate_archives(blog_posts, list_in_page_layout, item_nosummary_layout,
|
||||||
page_size = 10
|
archive_title_layout, params)
|
||||||
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
|
|
||||||
|
|
||||||
# Create category pages
|
generate_notes(page_layout, archive_title_layout,
|
||||||
cat_post = {}
|
list_in_page_layout, params)
|
||||||
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
|
|
||||||
)
|
|
||||||
|
|
||||||
# Create archive page
|
generate_rss_feeds(blog_posts, params)
|
||||||
make_list(
|
|
||||||
blog_posts,
|
|
||||||
"_site/archives/index.html",
|
|
||||||
list_layout,
|
|
||||||
item_nosummary_layout,
|
|
||||||
archive_title_layout,
|
|
||||||
None,
|
|
||||||
**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__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description='Makesite')
|
parser = argparse.ArgumentParser(description='Makesite')
|
||||||
|
|
Loading…
Add table
Reference in a new issue