app/api_0_1/samples.py
"""
Endpoints:
----------
- **/api/1.0/samples/ - **GET** List all samples
- **/api/1.0/samples/<id> - **GET** Detailed information about sample *id*
"""
from flask import jsonify, request, url_for, current_app
from ..models import Sample
from .blueprint import api
@api.route('/samples/')
def get_samples():
"""
List all samples
Example response: ::
{ "count": 10696,
"next": "http://riverflo.ws/api/1.0/samples/?page=2",
"prev": null,
"samples": [
{ "datetime": "Thu, 05 Jun 2014 13:50:27 GMT",
"id": 52,
"sensor": {
"gage": {
"id": 2,
"location": "Wild River near RT 2 in Gilead Maine",
"name": "Wild River at Gilead",
"url": "http://riverflo.ws/api/1.0/gages/2"
},
"id": 5,
"type": "level",
"url": "http://riverflo.ws/api/1.0/sensors/5"
},
"url": "http://riverflo.ws/api/1.0/samples/52",
"value": 24.0
},
{ "datetime": "Thu, 05 Jun 2014 13:50:27 GMT",
"id": 53,
"sensor": {
"gage": {
"id": 2,
"location": "Wild River near RT 2 in Gilead Maine",
"name": "Wild River at Gilead",
"url": "http://127.0.0.1:5000/api/1.0/gages/2"
},
"id": 8,
"type": "volts",
"url": "http://riverflo.ws/api/1.0/sensors/8"
},
"url": "http://riverflo.ws/api/1.0/samples/53",
"value": 4.096
}
]
}
"""
page = request.args.get('page', 1, type=int)
pagination = Sample.query.paginate(page,
per_page=current_app.config['API_GAGES_PER_PAGE'], # noqa
error_out=False)
samples = pagination.items
prev = None
if pagination.has_prev:
prev = url_for('.get_samples', page=page-1, _external=True)
next_p = None
if pagination.has_next:
next_p = url_for('.get_samples', page=page+1, _external=True)
return jsonify({
'samples': [sample.to_json() for sample in samples],
'prev': prev,
'next': next_p,
'count': pagination.total
})
@api.route('/samples/<int:sid>')
def get_sample(sid):
"""
Detailed information about sample *id*
Parameters:
id (int): Primary id key of sample
Example response: ::
{ "datetime": "Thu, 05 Jun 2014 13:50:27 GMT",
"id": 52,
"sensor": {
"gage": {
"id": 2,
"location": "Wild River near RT 2 in Gilead Maine",
"name": "Wild River at Gilead",
"url": "http://riverflo.ws/api/1.0/gages/2"
},
"id": 5,
"type": "level",
"url": "http://riverflo.ws/api/1.0/sensors/5"
},
"url": "http://riverflo.ws/api/1.0/samples/52",
"value": 24.0
}
"""
sample = Sample.query.get_or_404(sid)
return jsonify(sample.to_json())