diff options
author | yvesf <yvesf-git@xapek.org> | 2011-06-25 17:14:05 +0200 |
---|---|---|
committer | yvesf <yvesf-git@xapek.org> | 2011-06-25 17:14:05 +0200 |
commit | a85541d9f7622813ec98bf042164414edc1fb366 (patch) | |
tree | 8041b06bb1681642777244d1955356bd63af25b7 /ebus | |
parent | c15f4a600ddc3155b761230b84d78458e08bdc40 (diff) | |
download | ebus-alt-a85541d9f7622813ec98bf042164414edc1fb366.tar.gz ebus-alt-a85541d9f7622813ec98bf042164414edc1fb366.zip |
web -> bottle
Diffstat (limited to 'ebus')
-rw-r--r-- | ebus/sql/__init__.py | 0 | ||||
-rw-r--r-- | ebus/sql/model.py (renamed from ebus/web/model.py) | 0 | ||||
-rw-r--r-- | ebus/web/__init__.py | 67 | ||||
-rw-r--r-- | ebus/web/controller.py | 17 |
4 files changed, 80 insertions, 4 deletions
diff --git a/ebus/sql/__init__.py b/ebus/sql/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ebus/sql/__init__.py diff --git a/ebus/web/model.py b/ebus/sql/model.py index 7e21e82..7e21e82 100644 --- a/ebus/web/model.py +++ b/ebus/sql/model.py diff --git a/ebus/web/__init__.py b/ebus/web/__init__.py index e69de29..cfec3f0 100644 --- a/ebus/web/__init__.py +++ b/ebus/web/__init__.py @@ -0,0 +1,67 @@ +# coding: utf-8 +import os +import time +import datetime +import calendar + +import bottle +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from ebus.sql import model + +app = bottle.Bottle("ebus") +bottle.debug() + +engine = create_engine("postgresql://jack:jack@10.2.2.22:5432/ebus",echo=True) +Session = sessionmaker() +Session.configure(bind=engine) + +@app.route("/") +def do_index(): + return serve_static("index.html") + +@app.route('/static/:filename') +def serve_static(filename): + return bottle.static_file(filename, + root=os.path.join(os.path.dirname(__file__),"static")) + +@app.route("/list") +def list(): + sensors = Session().query(model.Sensor).all() + return {"type":"list","data":map(lambda sensor: sensor.name, sensors)} + +@app.route("/:when#today|yesterday|week|month#/:sensor") +def get_value(when,sensor): + s = Session() + sensor = s.query(model.Sensor).filter(model.Sensor.name == sensor).first() + values = Session().query(model.Value).add_columns("value_float","value_string","value_int") + values = values.filter(model.Value.sensor == sensor) + + now = datetime.datetime.now() + f,t = None, None + if when == "today": + f = now.date() + t = now.date() + datetime.timedelta(1) + elif when == "yesterday": + f = now.date() - datetime.timedelta(1) + t = now + elif when == "week": + f = now.date() - datetime.timedelta(now.isoweekday()) + t = now.date() + datetime.timedelta(7-now.isoweekday()) + elif when == "month": + f = now.date() - datetime.timedelta(now.day) + t = f + datetime.timedelta( calendar.monthrange(f.year, f.month)[1] ) + else: + raise Exception("illegal timerange") + + values = values.filter(model.Value.timestamp.between(f,t)) + x = values.all() + + v=[] + for value in values.all(): + v.append(value.value()) + return {"type":when,"data":v} + + + diff --git a/ebus/web/controller.py b/ebus/web/controller.py index 683bb6c..99d7053 100644 --- a/ebus/web/controller.py +++ b/ebus/web/controller.py @@ -6,7 +6,7 @@ from werkzeug.contrib.cache import SimpleCache from simplejson import dumps as dump_json from sqlalchemy.orm import sessionmaker -from ebus import model +from ebus.web import model Session = sessionmaker() @@ -35,13 +35,14 @@ def index(req): filename=os.path.join(os.path.dirname(__file__), "static", "index.html") return open(filename,"r").read() -@itty.get('/json/(?P<sensor>[^/]+)') -@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)') -@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)/till_date/(?P<till_date>[^/]+)') +#@itty.get('/json/(?P<sensor>[^/]+)') +#@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)') +#@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)/till_date/(?P<till_date>[^/]+)') @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 "sensor=%s from_date=%s till_date=%s" % (sensor,from_date,till_date) + """ values = Session().query(model.Value).join(model.Sensor) if sensor: @@ -56,9 +57,17 @@ def json(req,sensor=None,from_date=None,till_date=None): response = {"sensor":sensor, "from_date":from_date, "till_date":till_date, "values":values.all()} return itty.Response(dump_json(response), content_type="application/json") + """ + return itty.Response("") + +@itty.get('/json/list') +def list(req): + sensors = Session().query(model.Sensor) + return str(sensors.all()) @itty.get("/static/(?P<filename>.+)") def static(request,filename): + return "" file = itty.static_file(filename, root=os.path.join(os.path.dirname(__file__), 'static')) return itty.Response(file, content_type=itty.content_type(file)) |