#!/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 = [ '', "", '\n", "", *[ f"" 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"" if (d := date(year, month, day)) not in entries else f'' ) returnable.append("\n") returnable.extend([ "\n", "
', month_name[month], " - ", str(year), "
{day_abbr[(i+weekday_start)%7]}
{day}{day}
", ]) 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)