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 '{text} ({start_date} — {stop_date})'.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'] )