Newer
Older
"""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.
"""
import glob
import os
import re
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")
update(new_date)
os.system("git add .")
os.system(
f"git commit -m 'Create journal entry for {new_date}'")
os.system("git push")
def update(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()