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