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',
|
||||
'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')
|
||||
|
|
Loading…
Add table
Reference in a new issue