#!/usr/bin/env python # -*- coding: utf-8 -*- import datetime import math import cairo import pickle import genshi.template import os.path try: from dbsettings import * except ImportError: db_conn = None # name, test # Test gets dictionary d = {'min': float, 'max': float, 'avg': float} daytests = [ ('tyhja', lambda d: d['avg'] is None), ('helle', lambda d: d['max'] >= 25.1), ('kovapakkas', lambda d: d['min'] <= -15.0), ('pakkas', lambda d: d['max'] < 0.0), ('suoja', lambda d: d['max'] <= 1.0 and d['max'] >= 0.0), ('yopakkas', lambda d: d['min'] < 0.0), ('lammin', lambda d: d['avg'] > 15.0), ('kylma', lambda d: d['avg'] < 10.0) ] # name, description, color daytypes = { 'helle': (u"Hellepäivä", "s", (255, 69, 0)), 'pakkas': (u"Pakkaspäivä", "w", (129, 145, 210)), 'kovapakkas': (u"Kova pakkanen", "w", (240, 255, 255)), 'yopakkas': (u"Yöpakkanen", "w", (147, 196, 171)), 'suoja': (u"Suojakeli", "w", (0, 255, 255)), 'lammin': (u"Lämmin päivä", "s", (255, 165, 0)), 'kylma': (u"Kylmä päivä", "s", (0, 255, 160)), 'perus': (u"Peruspäivä", "s", (30, 230, 0)), 'tyhja': (u"Ei tietoa", "w", (127, 127, 127)) } typeorder = ['helle', 'lammin', 'perus', 'kylma', 'yopakkas', 'suoja', 'pakkas', 'kovapakkas', 'tyhja'] def getdata(): if db_conn: cursor = db_conn.cursor() cursor.execute("SELECT time, u_min, u_max, u_avg FROM longtime ORDER BY time ASC") result = cursor.fetchall() else: result = pickle.load(open("daypie_testdata.pickle")) # Fill in the blanks filled = [] prev = result[0][0] for row in result[1:]: for i in range((row[0] - prev).days - 1): filled.append((prev + datetime.timedelta(days = i + 1), None, None, None)) filled.append(row) prev = row[0] return filled def getdays(data): result = [] for day, u_min, u_max, u_avg in data: d = {'min': u_min, 'max': u_max, 'avg': u_avg} for name, test in daytests: if test(d): d['cls'] = name break else: d['cls'] = 'perus' d['date'] = day d['color'] = '#%02x%02x%02x' % daytypes[d['cls']][2] result.append(d) return result def render(days): loader = genshi.template.TemplateLoader(os.path.dirname(os.path.abspath(__file__))) template = loader.load('daypie_template.svg') result = template.generate(days = days, daytypes = daytypes) return result.render('xml') if __name__ == '__main__': data = getdata() days = getdays(data) svg = render(days) open('daypie.svg', 'w').write(svg)