Source code for i3pystatus.weekcal
from calendar import Calendar
from datetime import date, timedelta
from i3pystatus import IntervalModule
[docs]class WeekCal(IntervalModule):
"""
Displays the days of the current week as they would be represented on a calendar sheet,
with the current day highlighted.
By default, the current day of week is displayed in the front, and the month and year are
displayed in the back.
Example: ``Sat 16 17 18 19 20[21]22 May 2016``
"""
settings = (
("startofweek", "First day of the week (0 = Monday, 6 = Sunday), defaults to 0."),
("prefixformat", "Prefix in strftime-format"),
("suffixformat", "Suffix in strftime-format"),
("todayhighlight", "Characters to highlight today's date"),
)
startofweek = 0
interval = 30
prefixformat = "%a"
suffixformat = "%b %Y"
todayhighlight = ("[", "]")
def __init__(self, *args, **kwargs):
IntervalModule.__init__(self, *args, **kwargs)
self.cal = Calendar(self.startofweek)
def run(self):
today = date.today()
yesterday = today - timedelta(days=1)
outstr = today.strftime(self.prefixformat) + " "
weekdays = self.cal.iterweekdays()
if today.weekday() == self.startofweek:
outstr += self.todayhighlight[0]
else:
outstr += " "
nextweek = False # keep track of offset if week doesn't start on monday
for w in weekdays:
if w == 0 and self.startofweek != 0:
nextweek = True
if nextweek and today.weekday() >= self.startofweek:
w += 7
elif not nextweek and today.weekday() < self.startofweek:
w -= 7
weekday_offset = today.weekday() - w
weekday_delta = timedelta(days=weekday_offset)
weekday = today - weekday_delta
if weekday == yesterday:
outstr += weekday.strftime("%d") + self.todayhighlight[0]
elif weekday == today:
outstr += weekday.strftime("%d") + self.todayhighlight[1]
else:
outstr += weekday.strftime("%d ")
outstr += " " + today.strftime(self.suffixformat)
self.output = {
"full_text": outstr,
"urgent": False,
}