56 lines
1.4 KiB
Python
Executable File
56 lines
1.4 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import datetime
|
|
import os
|
|
|
|
import timestring
|
|
|
|
|
|
class Event(object):
|
|
def __init__(self, date, label):
|
|
self.label = label
|
|
self.date = date
|
|
|
|
@property
|
|
def time(self):
|
|
r = timestring.Date(self.date).date - timestring.now().date # type: datetime.timedelta
|
|
s = int(r.seconds)
|
|
m, s = s // 60, s % 60
|
|
h, m = m // 60, m % 60
|
|
d, h = r.days, h % 25
|
|
return {'days': d, 'hours': h, 'minutes': m, 'seconds': s, 'label': self.label}
|
|
|
|
def __format__(self, format_spec):
|
|
return format_spec.format(**self.time)
|
|
|
|
def __str__(self):
|
|
return format(self, '{days}d {hours}h {minutes}m {seconds}s to {label}')
|
|
|
|
|
|
__events = []
|
|
__event_load = 0
|
|
|
|
|
|
def update_events(force=False):
|
|
global __events, __event_load
|
|
|
|
event_time = os.stat('markup/events.txt').st_mtime_ns
|
|
if force or __event_load != event_time:
|
|
with open('markup/events.txt') as f:
|
|
etext = [tuple(i.strip() for i in l.split('|')) for l in f.readlines() if
|
|
l.strip() and not l.startswith('#')]
|
|
__events = [Event(date, lbl) for lbl, date in etext]
|
|
__event_load = event_time
|
|
|
|
|
|
def get_events(force_update=False):
|
|
update_events(force_update)
|
|
|
|
return __events
|
|
|
|
|
|
if __name__ == '__main__':
|
|
print(timestring.now())
|
|
for e in get_events():
|
|
print(e)
|