Mercurial > code > home > repos > gcalendarwatch
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)])))), + {}))