comparison weather_server/server.py @ 11:52ef21607b31

server: Create endpoint to get some recent readings.
author Paul Fisher <paul@pfish.zone>
date Sun, 06 Oct 2019 13:11:11 -0400
parents d54155a199d8
children 9a609bcf0809
comparison
equal deleted inserted replaced
10:6d59f038a58b 11:52ef21607b31
1 import datetime
1 import hmac 2 import hmac
2 import sys 3 import sys
3 4
4 import bson 5 import bson
5 import flask 6 import flask
46 flask.abort(400) 47 flask.abort(400)
47 logger.write_rows(entries) 48 logger.write_rows(entries)
48 return flask.jsonify({'status': 'OK'}) 49 return flask.jsonify({'status': 'OK'})
49 50
50 @app.route('/<location>') 51 @app.route('/<location>')
51 def show(location): 52 def show(location: str):
52 try: 53 try:
53 loc, logger = locs.get(location) 54 loc, logger = locs.get(location)
54 except KeyError: 55 except KeyError:
55 flask.abort(404) 56 flask.abort(404)
56 data = logger.data 57 data = logger.data
65 'location.html', 66 'location.html',
66 location=loc, 67 location=loc,
67 last_reading=last_reading, 68 last_reading=last_reading,
68 date=date) 69 date=date)
69 70
71 @app.route('/<location>/recent')
72 def recent(location: str):
73 try:
74 loc, logger = locs.get(location)
75 except KeyError:
76 flask.abort(404)
77 req = flask.request
78
79 try:
80 seconds = int(req.args['seconds'])
81 except (KeyError, ValueError):
82 flask.abort(400)
83
84 start = common.utc_now() - datetime.timedelta(seconds=seconds)
85
86 readings = [
87 r.as_dict() for r in logger.data
88 if start < r.sample_time
89 ]
90 resp = flask.Response()
91 resp.content_type = 'application/json'
92 resp.data = common.json_dumps(readings)
93 return resp
94
70 return app 95 return app
71 96
72 97
73 def main(argv): 98 def main(argv):
74 """Main function for a simple local demo.""" 99 """Main function for a simple local demo."""