23 lines
915 B
Python
23 lines
915 B
Python
|
from datetime import datetime
|
||
|
from pytz import utc
|
||
|
|
||
|
# scale down coordinates to dx=1 per day to prevent SVG coordinate overflows
|
||
|
scale = 1/60/60/24
|
||
|
|
||
|
def get_date(dtime):
|
||
|
return datetime.fromtimestamp(dtime).astimezone(utc).strftime('%Y-%m-%d %H:%M')
|
||
|
|
||
|
|
||
|
def make_line(event):
|
||
|
evstart = event['period'][0]
|
||
|
evstop = event['period'][1]
|
||
|
return '<line{type} x1="{start}" x2="{stop}" y1="{height}" y2="{height}"><title>{text} ({start_date} — {stop_date})</title></line>'.format(
|
||
|
type = '' if event['status'] == 'online' else ' class="error"',
|
||
|
start = scale*evstart,
|
||
|
stop = scale*evstop,
|
||
|
start_date = get_date(evstart),
|
||
|
stop_date = get_date(evstop),
|
||
|
height = len(event['players']) if 'players' in event else 0,
|
||
|
text = ('no one' if len(event['players']) == 0 else ', '.join(event['players'])) if event['status'] == 'online' else event['status']
|
||
|
)
|