#!/usr/bin/env python3
from pathlib import Path
from datetime import date
from collections import defaultdict
from sys import argv, exit, stderr
from calendar import Calendar, month_name, day_abbr
def HTMLCalendarMonthWithEntries(year, month, entries=[], weekday_start=6):
cal = Calendar(weekday_start)
returnable = [
'
',
"",
'| ', month_name[month], " - ", str(year), " |
\n",
"",
*[
f"| {day_abbr[(i+weekday_start)%7]} | "
for i in range(7)
],
"
\n"
"\n",
"\n",
]
for week in cal.monthdays2calendar(year, month):
returnable.append("")
for day, weekday in week:
returnable.append(
" | "
if day == 0
else f"{day} | "
if (d := date(year, month, day)) not in entries
else f'{day} | '
)
returnable.append("
\n")
returnable.extend([
"\n",
"
",
])
return "".join(returnable)
def generate_index_full(diary_entries):
entries_by_month = defaultdict(list)
for entry in diary_entries:
entries_by_month[(entry.year, entry.month)].append(entry)
months = sorted(entries_by_month.keys(), key=lambda x: "%02d-%02d" % x, reverse=False)
prev_year = None
for month in months:
year, _month = month
if prev_year != year:
print("\n## ", year, "{.calendar-container}\n")
# print("
")
prev_year = year
print(HTMLCalendarMonthWithEntries(*month, entries_by_month[month]))
if __name__ == '__main__':
try:
diary_dir = Path(argv[1])
if not diary_dir.is_dir():
raise Exception()
except:
print("Please provide a valid path for diary source.")
exit(1)
try:
build_dir = Path(argv[2])
if not build_dir.is_dir():
build_dir.mkdir(parents=True)
except:
print("Please provide a valid path for diary build.")
exit(1)
diary_entries = [
date.fromisoformat(p.stem) for p in diary_dir.iterdir()
]
if 'list-months' in argv:
pass
if 'list-weeks' in argv:
pass
if 'index-files' in argv:
targets = set([
"index.html",
*[f"{d.year}.html" for d in diary_entries],
*["%d-%02d.html" % (d.year, d.month) for d in diary_entries],
])
for t in targets:
print(str(build_dir / t))
if 'index-full' in argv:
generate_index_full(diary_entries)
if 'index-years' in argv:
generate_index_years(diary_entries)