diff --git a/makesite.py b/makesite.py index fe12c22..abebdd6 100755 --- a/makesite.py +++ b/makesite.py @@ -53,6 +53,7 @@ FRENCH_MONTHS = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', # initialize markdown + class HighlightRenderer(mistune.HTMLRenderer): def block_code(self, code, info=None): if info: @@ -61,6 +62,7 @@ class HighlightRenderer(mistune.HTMLRenderer): return highlight(code, lexer, formatter) return '
' + mistune.escape(code) + '
'
+
markdown = mistune.create_markdown(renderer=HighlightRenderer())
@@ -101,7 +103,9 @@ def read_headers(text):
def rfc_2822_format(date_str):
"""Convert yyyy-mm-dd date string to RFC 2822 format date string."""
d = datetime.datetime.strptime(date_str, "%Y-%m-%d")
- return d.replace(tzinfo=datetime.timezone.utc).strftime('%a, %d %b %Y %H:%M:%S %z')
+ return d \
+ .replace(tzinfo=datetime.timezone.utc) \
+ .strftime('%a, %d %b %Y %H:%M:%S %z')
def slugify(value):
@@ -111,7 +115,9 @@ def slugify(value):
trailing whitespace.
"""
value = (
- unicodedata.normalize("NFKD", value).encode("ascii", "ignore").decode("ascii")
+ unicodedata.normalize("NFKD", value)
+ .encode("ascii", "ignore")
+ .decode("ascii")
)
value = re.sub(r"[^\w\s-]", "", value).strip().lower()
return re.sub(r"[-\s]+", "-", value)
@@ -190,12 +196,12 @@ def render(template, **params):
def get_header_list_value(header_name, page_params):
- l = []
+ header_list = []
if header_name in page_params:
for s in page_params[header_name].split(" "):
if s.strip():
- l.append(s.strip())
- return l
+ header_list.append(s.strip())
+ return header_list
def get_friendly_date(date_str):
@@ -205,7 +211,8 @@ def get_friendly_date(date_str):
def make_posts(
- src, src_pattern, dst, layout, category_layout, comment_layout, comment_detail_layout, **params
+ src, src_pattern, dst, layout, category_layout,
+ comment_layout, comment_detail_layout, **params
):
"""Generate posts from posts directory."""
items = []
@@ -224,13 +231,18 @@ def make_posts(
page_params["date_path"] = page_params["date"].replace("-", "/")
page_params["friendly_date"] = get_friendly_date(page_params["date"])
page_params["year"] = page_params["date"].split("-")[0]
- page_params["post_url"] = page_params["year"] + "/" + page_params["slug"] + "/"
+ page_params["post_url"] = \
+ page_params["year"] \
+ + "/" \
+ + page_params["slug"] + "/"
# categories
categories = get_header_list_value("category", page_params)
out_cats = []
for category in categories:
- out_cat = render(category_layout, category=category, url=slugify(category))
+ out_cat = render(category_layout,
+ category=category,
+ url=slugify(category))
out_cats.append(out_cat.strip())
page_params["categories"] = categories
page_params["category_label"] = "".join(out_cats)
@@ -316,12 +328,12 @@ def make_notes(
page_params["header"] = ""
page_params["footer"] = ""
page_params["friendly_date"] = ""
- page_params["category_label"] = ""
+ page_params["category_label"] = ""
page_params["post_url"] = "notes/" + page_params["slug"] + "/"
content["post_url"] = page_params["post_url"]
content["friendly_date"] = page_params["friendly_date"]
- content["category_label"] = page_params["category_label"]
+ content["category_label"] = page_params["category_label"]
items.append(content)
dst_path = render(dst, **page_params)
@@ -334,7 +346,8 @@ def make_notes(
def make_list(
- posts, dst, list_layout, item_layout, header_layout, footer_layout, **params
+ posts, dst, list_layout, item_layout,
+ header_layout, footer_layout, **params
):
"""Generate list page for a blog."""
@@ -375,6 +388,43 @@ def make_list(
fwrite(dst_path, output)
+def generate_rss(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))
+ for filename in ("_site/rss.xml", "_site/index.xml"):
+ make_list(
+ posts[:nb_items],
+ filename,
+ rss_xml,
+ rss_item_xml,
+ None,
+ None,
+ **params
+ )
+
+ # Create RSS feed by tag
+ tag_post = {}
+ for post in posts:
+ for tag in post["tags"]:
+ if tag in tag_post:
+ tag_post[tag].append(post)
+ else:
+ tag_post[tag] = [post]
+ for tag in tag_post.keys():
+ params["tag"] = tag
+ make_list(
+ tag_post[tag],
+ "_site/rss." + slugify(tag) + ".xml",
+ rss_xml,
+ rss_item_xml,
+ None,
+ None,
+ **params
+ )
+
+
def main(param_file):
# Create a new _site directory from scratch.
if os.path.isdir("_site"):
@@ -409,8 +459,6 @@ def main(param_file):
category_layout = fread("layout/category.html")
comment_layout = fread("layout/comment.html")
comment_detail_layout = fread("layout/comment-detail.html")
- rss_xml = fread("layout/rss.xml")
- rss_item_xml = fread("layout/rss_item.xml")
sitemap_xml = fread("layout/sitemap.xml")
sitemap_item_xml = fread("layout/sitemap_item.xml")
note_layout = fread("layout/note.html")
@@ -432,10 +480,11 @@ def main(param_file):
**params
)
- # Create blog list pages.
+ # 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)
+ blog_posts[i: i + page_size]
+ for i in range(0, len(blog_posts), page_size)
]
page = 1
last_page = len(chunk_posts)
@@ -500,38 +549,7 @@ def main(param_file):
**params
)
- # Create main RSS feed for 10 last entries
- nb_items = min(10, len(blog_posts))
- for filename in ("_site/rss.xml", "_site/index.xml"):
- make_list(
- blog_posts[:nb_items],
- filename,
- rss_xml,
- rss_item_xml,
- None,
- None,
- **params
- )
-
- # Create RSS feed by tag
- tag_post = {}
- for post in blog_posts:
- for tag in post["tags"]:
- if tag in tag_post:
- tag_post[tag].append(post)
- else:
- tag_post[tag] = [post]
- for tag in tag_post.keys():
- params["tag"] = tag
- make_list(
- tag_post[tag],
- "_site/rss." + slugify(tag) + ".xml",
- rss_xml,
- rss_item_xml,
- None,
- None,
- **params
- )
+ generate_rss(blog_posts, params)
# Create sitemap
make_list(
@@ -569,6 +587,7 @@ _test = None
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Makesite')
- parser.add_argument('--params', dest='param_file', type=str, default="params.json", help='Custom param file')
+ parser.add_argument('--params', dest='param_file', type=str,
+ default="params.json", help='Custom param file')
args = parser.parse_args()
main(args.param_file)