diff options
author | Navan Chauhan <navanchauhan@gmail.com> | 2021-05-26 23:58:29 +0530 |
---|---|---|
committer | Navan Chauhan <navanchauhan@gmail.com> | 2021-05-26 23:58:29 +0530 |
commit | bfd3a825c2d73bd842769cdfaf11ad0319a3bd6e (patch) | |
tree | 7b2c052bdf539f433ed3ab6bd133b6d46c7ff7e5 /generate_me.py | |
parent | 2cb28c0dd749611e6edd4688955769bda3381453 (diff) |
added code and content
Diffstat (limited to 'generate_me.py')
-rw-r--r-- | generate_me.py | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/generate_me.py b/generate_me.py new file mode 100644 index 0000000..200da8e --- /dev/null +++ b/generate_me.py @@ -0,0 +1,105 @@ +from markdown2 import Markdown +import os +from jinja2 import Environment, FileSystemLoader +from distutils.dir_util import copy_tree +import datetime +import email.utils + +templates = Environment(loader=FileSystemLoader("templates")) +src_folder = "Content" +out_folder = "docs" +resources_folder = "Resources" +base_link = "https://web.navan.dev/" +f_title = "Navan's Archive" +f_description = "Rare Tips, Tricks and Posts" +f_date = email.utils.format_datetime(datetime.datetime.now()) + +md = Markdown(extras=["fenced-code-blocks","metadata","task_list","tables","target-blank-links"]) + +def render_markdown_post(html,metadata=None,template="post.html",posts=[]): + global templates + + if len(posts) != 0: + posts = sorted(posts,key=lambda i:i["date"],reverse=True) + return templates.get_template(template).render(content=html,posts=posts) + +def create_folder_ifnot(folder_name): + if not os.path.exists(folder_name): + os.mkdir(folder_name) + +post_collection_dict = {} +post_collection = [] +post_collection_html = [] +index_pages_to_generate = [] + +create_folder_ifnot(out_folder) +copy_tree(resources_folder,out_folder) + +first_run = True +for x in os.walk(src_folder): + #print(x) + if first_run: + for y in x[-1]: + if y != ".DS_Store": + fpath = os.path.join(x[0],y) + with open(fpath) as f: + index_pages_to_generate.append(fpath) + first_run = False + else: + if len(x[1]) == 0: + create_folder_ifnot(x[0].replace(src_folder,out_folder)) + print("No sub folder") + print("Posts in {}".format(x[0])) + tmp_array = [] + for y in x[2]: + if y not in ("index.md",".DS_Store"): + fpath = os.path.join(x[0],y) + with open(fpath) as f: + _html = md.convert(f.read()) + _post_title = _html[4:_html.find("</h1>")] + _post = _html.metadata + _post["title"] = _post_title + _post["link"] = fpath.replace(src_folder,"").replace("md","html") + _post["tags"] = [x.strip() for x in _post["tags"].split(",")] + + tmp_array.append(_post) + post_collection.append(_post) + _html.metadata = _post + post_collection_html.append(_html) + #print(fpath) + #print(render_markdown_post(fpath)) + with open(fpath.replace(src_folder,out_folder).replace("md","html"),"w") as f: + f.write(render_markdown_post(_html)) + elif y=="index.md": + fpath = os.path.join(x[0],y) + with open(fpath) as f: + index_pages_to_generate.append(fpath) + + post_collection_dict[x[0].replace("{}/".format(src_folder),"")] = tmp_array + else: + print("Multiple Sub-Folders not Supported") + +#print(sorted(post_collection,key=lambda i:i["date"])) + +for fpath in index_pages_to_generate: + with open(fpath) as f: + _html = md.convert(f.read()) + try: + page = render_markdown_post(_html,template="section.html",posts=post_collection_dict[ + fpath.replace("{}/".format(src_folder),"").replace("/index.md","") + ]) + except KeyError: + page = render_markdown_post(_html, template="index.html",posts=post_collection) + + with open(fpath.replace(src_folder,out_folder).replace("md","html"),"w") as f: + f.write(page) + +for post in post_collection_html: + post.metadata["link"] = "https://web.navan.dev" + post.metadata["link"] + post.metadata["date"] = email.utils.format_datetime(datetime.datetime.strptime(post.metadata["date"],"%Y-%m-%d %H:%M")) + + +with open(os.path.join(out_folder,"feed.rss"),"w") as f: + f.write(templates.get_template("feed.rss").render(feed={ + "title":f_title,"date":f_date,"description":f_description,"link":base_link + },posts=post_collection_html))
\ No newline at end of file |