annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
40
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
1 import calendar
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
2 import datetime
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
3 import itertools
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
4 import sys
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
5
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
6 from htmlgenerator import BODY, H1, HEAD, HTML, SPAN, STYLE, TABLE, TBODY, TD, TH, TR, mark_safe, render
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
7
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
8 c = calendar.TextCalendar(firstweekday=6)
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
9
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
10 start = datetime.date.today()
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
11 start = start - datetime.timedelta(days=start.weekday() + 1)
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
12 offset = itertools.count()
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
13 currentMonth = -1
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
14
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
15
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
16 def nextDayLabel():
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
17 global currentMonth
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
18 thisDay = start + datetime.timedelta(days=next(offset))
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
19 month = ''
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
20 if thisDay.month != currentMonth:
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
21 month = f'{calendar.month_name[thisDay.month]} '
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
22 currentMonth = thisDay.month
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
23 return f'{month}{thisDay.day}'
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
24
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
25
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
26 def weekdayLabels():
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
27 row = [TH(c.formatweekday(i, width=100)) for i in c.iterweekdays()]
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
28 return TR(*row)
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
29
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
30
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
31 def nextWeekDays():
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
32 return TR(*[TD(SPAN(nextDayLabel(), class_="day")) for wd in c.iterweekdays()])
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
33
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
34
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
35 sys.stdout.write(
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
36 render(
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
37 HTML( #
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
38 HEAD(STYLE(mark_safe(open('wall_calendar.css').read()))), #
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
39 BODY(H1("todo"), TABLE(*weekdayLabels(), TBODY(*[nextWeekDays() for week in range(8)])))),
c4e8d697326b wall calendar html generator
drewp@bigasterisk.com
parents:
diff changeset
40 {}))