def create_reading(sensor_id): data = request.get_json() or {} if "data" not in data: return bad_request("must include data field") if "category" not in data: return bad_request("must include category field") # Check if the category is a valid category, if not return a bad request if not Category.are_valid_categories([data["category"]]): return bad_request("invalid category") # Add a timestamp to the data if one was provided if "timestamp" not in data: data["timestamp"] = datetime.utcnow() # Check if a sensor for the given sensor_id exists and add it to the data if it does sensor = Sensor.query.get_or_404(sensor_id) data["sensor"] = sensor.name reading = Reading() reading.from_dict(data) db.session.add(reading) sensor.last_updated = data["timestamp"] db.session.add(sensor) db.session.commit() response = jsonify(reading.to_dict()) response.status_code = 201 response.headers["Location"] = url_for("api.get_reading", reading_id=reading.id, sensor_id=sensor.id) return response
def remove_sensor_categories(sensor_id): data = request.get_json() or {} if "categories" not in data: return bad_request("must include categories field") if not Category.are_valid_categories(data["categories"]): return bad_request("invalid categor(y)/(ies) in included categories") sensor = Sensor.query.get_or_404(sensor_id) sensor.remove_categories(data["categories"]) db.session.add(sensor) db.session.commit() response = jsonify() response.status_code = 204 response.headers["Location"] = url_for("api.get_sensor_categories", sensor_id=sensor.id) return response
def create_sensor(): data = request.get_json() or {} if "name" not in data: return bad_request("must include name field") if "categories" not in data: return bad_request("must include categories field") if not Category.are_valid_categories(data["categories"]): return bad_request("invalid categor(y)/(ies) in included categories") if Sensor.query.filter_by(name=data["name"]).first(): return bad_request("please use a different name") sensor = Sensor() sensor.from_dict(data) db.session.add(sensor) db.session.commit() response = jsonify(sensor.to_dict()) response.status_code = 201 response.headers["Location"] = url_for("api.get_sensor", sensor_id=sensor.id) return response