add weekcal module (#388)
This commit is contained in:
parent
b686afe42e
commit
cee2860138
70
i3pystatus/weekcal.py
Normal file
70
i3pystatus/weekcal.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
from calendar import Calendar
|
||||||
|
from datetime import date, timedelta
|
||||||
|
|
||||||
|
from i3pystatus import IntervalModule
|
||||||
|
|
||||||
|
|
||||||
|
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,
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user