Skip to content
Snippets Groups Projects
journal_entry.py 2.4 KiB
Newer Older
#! /usr/bin/env python3
"""Utility tool to add a new Journal entry to the wiki.

Usage: The script can be used with or without arguments.
    ./journal_entry.py                  New entry for today
    ./journal_entry.py "YYYY-MM-DD"     New entry for specified date

Note that a new entry always points to the newest previously created
entry.
"""
from datetime import date, datetime


def main():
    # The wikifolder for `<repo>` should be located in `../<repo>.wiki`.
    reponame = os.path.basename(os.getcwd())
    wikifolder = "../" + reponame + ".wiki"

    if sys.argv[1:]:
        new_date = datetime.strptime(sys.argv[1], "%Y-%m-%d").date()
    else:
        new_date = date.today()

    os.chdir(wikifolder)
    os.system("git pull")
    os.system("git add .")
    os.system(
        f"git commit -m 'Create journal entry for {new_date}'")
    """Update previous entry, MoC, and _sidebar, and create new entry."""

    # Read previous entry
    previous = glob.glob("./journal/2*")[-1]
    with open(previous, "r") as file:
        lines = file.readlines()
    lines[2] = re.sub(
        r'next',
        r'[next](' + f'journal/{new_date}' + ')',
        lines[2]
    )
    # Modify previous entry
    with open(previous, "w") as file:
        file.writelines(lines)

    # Create new entry
    create_entry(previous, lines[lines.index(
        "## Upcoming Tasks\n")+1:], new_date)

    # Modify MoC
    with open("./journal/map-of-contents.md", "a") as moc:
        moc.write(f"- [{new_date}](journal/{new_date})\n")

    # Modify sidebar
    os.system("head -n -1 ./_sidebar.md > temp.md; mv temp.md ./_sidebar.md")
    with open("./_sidebar.md", "a") as file:
        file.write("[View all pages](https://gitlab1.ptb.de/graefl01/thesis/-/wikis/pages) "
                   f"– [Journal](journal/{new_date})\n")
def create_entry(previous, prev_tasks, day):
    weekday = day.strftime("%A")
    week = day.strftime("%W")

    print(previous)
    lines = [f"# {day} Journal\n\n",
             f"[previous]({previous[2:-3]}) – {weekday}, week {week} – next\n\n",
             "## Tasks\n",
             ]
    lines.extend(prev_tasks)
    lines.extend(("\n", "## Upcoming Tasks\n\n", "- [ ]\n\n"))

    with open(f"./journal/{day}.md", 'w') as file:
        file.writelines(lines)


if __name__ == '__main__':
    main()