#!/usr/bin/env python # -*- coding: utf-8 -*- import os, time import itty from werkzeug.contrib.cache import SimpleCache from simplejson import dumps as dump_json from sqlalchemy.orm import sessionmaker from ebus.web import model Session = sessionmaker() class CacheDecorator(object): def __init__(self,key,timeout=20): self.cache = SimpleCache(default_timeout=timeout) self.func = None self.key = key def cachedFunc(self, *args, **kwargs): key = self.key(args, kwargs) ret = self.cache.get(key) if ret is None: ret = self.func(*args, **kwargs) self.cache.set(key, ret) return ret def __call__(self, func): self.func = func return self.cachedFunc def data(sensor, from_date=None, till_date=None): session = Session() values = session.query(model.Value)\ .join(model.Sensor)\ .filter(model.Sensor.name == sensor)\ .all() return {"sensor":sensor, "from_date":from_date, "till_date":till_date, "values":values} @itty.get("/") def index(req): filename=os.path.join(os.path.dirname(__file__), "static", "index.html") return open(filename,"r").read() @itty.get('/json/(?P[^/]+)') @itty.get('/json/(?P[^/]+)/from_date/(?P[^/]+)') @itty.get('/json/(?P[^/]+)/from_date/(?P[^/]+)/till_date/(?P[^/]+)') @CacheDecorator(key=lambda args,kwargs: tuple(kwargs.keys()) + tuple(kwargs.values()), timeout=20) def json(req,sensor=None,from_date=None,till_date=None): print "name=%s from_date=%s" % (name,from_date) return itty.Response(dump_json(data(sensor)), content_type="application/json") @itty.get("/static/(?P.+)") def static(request,filename): file = itty.static_file(filename, root=os.path.join(os.path.dirname(__file__), 'static')) return itty.Response(file, content_type=itty.content_type(file)) def run(db_engine,host="0.0.0.0",port=5000): Session.configure(bind=db_engine) return itty.run_itty(host=host,port=port)