import time
import configparser
import os
-from flask import Flask, render_template, jsonify
+from flask import Flask, render_template, jsonify, request
import flask.json
from sqlalchemy import create_engine
return super().default(object)
+def parse_datetime(date_str):
+ return datetime.datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%S')
+
+
app = Flask(__name__)
app.json_encoder = JSONEncoder
config = configparser.ConfigParser()
@app.route('/api/<version>/sensor/<sensor_id>')
def sensor(version, sensor_id):
- """Return all sensor data"""
+ """Return all sensor data
+
+ URL parameters:
+ begin=<datetime>, optional, format like "2018-05-19T21:07:53"
+ end=<datetime>, optional, format like "2018-05-19T21:07:53"
+ """
engine = open_engine(config)
with engine.connect() as conn:
- cursor = conn.execute('select * from sensors where sensor_id=%s order by id', sensor_id)
+ where = ['sensor_id=%s']
+ sql_args = [sensor_id]
+ if 'begin' in request.args:
+ where.append('timestamp>=%s')
+ sql_args.append(request.args.get('begin', None, parse_datetime))
+ if 'end' in request.args:
+ where.append('timestamp<=%s')
+ sql_args.append(request.args.get('end', None, parse_datetime))
+ sql = 'select * from sensors where {} order by id'.format(' and '.join(where))
+ cursor = conn.execute(sql, *sql_args)
result = [dict(row) for row in cursor]
return jsonify(result)