diff wall_calendar.py @ 40:c4e8d697326b

wall calendar html generator
author drewp@bigasterisk.com
date Mon, 27 Nov 2023 12:04:28 -0800
parents
children ab54c9f65f76
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wall_calendar.py	Mon Nov 27 12:04:28 2023 -0800
@@ -0,0 +1,40 @@
+import calendar
+import datetime
+import itertools
+import sys
+
+from htmlgenerator import BODY, H1, HEAD, HTML, SPAN, STYLE, TABLE, TBODY, TD, TH, TR, mark_safe, render
+
+c = calendar.TextCalendar(firstweekday=6)
+
+start = datetime.date.today()
+start = start - datetime.timedelta(days=start.weekday() + 1)
+offset = itertools.count()
+currentMonth = -1
+
+
+def nextDayLabel():
+    global currentMonth
+    thisDay = start + datetime.timedelta(days=next(offset))
+    month = ''
+    if thisDay.month != currentMonth:
+        month = f'{calendar.month_name[thisDay.month]} '
+        currentMonth = thisDay.month
+    return f'{month}{thisDay.day}'
+
+
+def weekdayLabels():
+    row = [TH(c.formatweekday(i, width=100)) for i in c.iterweekdays()]
+    return TR(*row)
+
+
+def nextWeekDays():
+    return TR(*[TD(SPAN(nextDayLabel(), class_="day")) for wd in c.iterweekdays()])
+
+
+sys.stdout.write(
+    render(
+        HTML(  #
+            HEAD(STYLE(mark_safe(open('wall_calendar.css').read()))),  #
+            BODY(H1("todo"), TABLE(*weekdayLabels(), TBODY(*[nextWeekDays() for week in range(8)])))),
+        {}))