Using Blog Titles for Filenames

by Mike Levin

Tuesday, April 26, 2022

Made a lot of good progress yesterday on the blog slice & dice system. Just have to get that title stuff down. Okay, got it done. There are little concessions here and there because I’m keeping my blogging format mostly intact.

import dateutil
from slugify import slugify
from IPython.display import display, Markdown


h1 = lambda text: display(Markdown(f"# {text}"))
h2 = lambda text: display(Markdown(f"## {text}"))
h3 = lambda text: display(Markdown(f"### {text}"))

site_base = "https://pythonically.com"
slicer = "-" * 80

dates = []
counter = -1
date_next = False
with open("./index.md", "r") as fh:
    for line in fh:
        line = line.rstrip()
        if date_next:
            adate = line[3:]
            date_next = False
            adatetime = dateutil.parser.parse(adate).date()
            dates.append(adatetime)
            date_next = False
        if line == slicer:
            date_next = True
            counter = counter + 1
dates.reverse()

h1(f"There Are {counter} Posts:")

table = []
at_top = True
with open("./index.md", "r") as fh:
    for i, line in enumerate(fh):
        line = line.rstrip()
        if line == slicer:
            if at_top:
                at_top = False
                table = []
                continue
            adatetime = dates[counter - 1]
            filename = f"./_posts/{adatetime}-post-{counter}.md"
            h3(f"FILE: {filename}")
            with open(filename, "w") as fw:
                title = f"Post {counter}"
                if table[0] == slicer:
                    table = table[1:]
                maybe = table[1]
                has_title = False
                if table and maybe and maybe[0] == "#":
                    title = maybe[maybe.find(" ") + 1 :]
                    title = slugify(title)
                    has_title = True
                top = []
                top.append("---\n")
                top.append("layout: post\n")
                top.append(f'title: "{title}"\n')
                top.append("categories: blog\n")
                slug = title.lower().replace(" ", "-")
                top.append(f"slug: {slug}\n")
                top.append("---\n")
                top.append("\n")
                top_chop = 2
                if has_title:
                    top_chop = 3
                table = [f"{x}\n" for x in table[top_chop:]]
                table = top + table
                # display(Markdown(''.join(table)))
                print("".join(table))
                fw.writelines(table)
            counter = counter - 1
            table = []
        table.append(line)