Files
lrc-backend/api/example_api.py
2019-08-13 15:29:37 +02:00

135 lines
5.0 KiB
Python

import datetime
import ipaddress
import json
import logging
from random import *
from flask import jsonify, Blueprint, request
from flask_restplus import Resource, reqparse
from backend import basic_auth, multi_auth, db, jwt_auth
from backend.api import api_v1, api_bp
@api_bp.route('/random')
def random_number():
"""
:return: a random number
"""
response = {
'randomNumber': randint(1, 100)
}
return jsonify(response)
@api_bp.route('/test_jwt')
@jwt_auth.login_required
def random_number_jwt():
"""
:return: a random number
"""
response = {
'randomNumber': randint(1, 100)
}
return jsonify(response)
class HelloWorld(Resource):
"""
This is a test class.
"""
def get(self):
"""
just a test!
:return: Hello: World
"""
print(str(self))
return {'hello': 'world'}
api_v1.add_resource(HelloWorld, '/')
class SensorData_Handler(Resource):
parser = reqparse.RequestParser()
parser.add_argument('values', type=str, required=True, help="sensor data values are required (as JSON list)")
@basic_auth.login_required
def get(self, mac):
sensor = Sensor.get_by_mac_user(mac, g.user)
if not sensor:
return "sensor not found", 404
return jsonify(sensor.get_sensor_data())
# return {'task': 'id: ' + mac}
@multi_auth.login_required
def post(self, mac):
sensor = Sensor.get_by_mac(mac)
if not sensor:
return "sensor not found", 404
print("JSON")
print(request.json)
print(request.json['values'])
args = SensorData_Handler.parser.parse_args()
print("values...")
print(args['values'])
values = json.loads(args['values'])
app.logger.info("vals: " + str(values) + " (len: " + str(len(values)) + ")")
rough_geo_location = None
try:
rough_geo_location_info = None
ip = ipaddress.ip_address(request.remote_addr)
if request.remote_addr == "127.0.0.1":
ip = ipaddress.ip_address("89.245.37.108")
if isinstance(ip, ipaddress.IPv4Address):
rough_geo_location_info = geoip4.record_by_addr(str(ip))
elif isinstance(ip, ipaddress.IPv6Address):
rough_geo_location_info = geoip6.record_by_addr(str(ip))
if rough_geo_location_info is not None:
rough_geo_location = json.dumps({key: rough_geo_location_info[key] for key in ['country_code',
'country_name',
'postal_code',
'city',
'time_zone',
'latitude',
'longitude']
})
except ValueError:
pass
for values_at_time in values:
wasss_app.logger.info("values_at_time: " + str(values_at_time) + " (len: " + str(len(values_at_time)) + ")")
sensor_data = SensorData(sensor=sensor, rough_geo_location=rough_geo_location)
val_cycle = cycle(values_at_time)
for sensor_data_header in sensor.get_sensor_data_headers():
value = next(val_cycle)
if sensor_data_header == SensorData.HEADER_TIMESTAMP:
sensor_data.timestamp = datetime.strptime(value, "%Y-%m-%dT%H:%M:%S%z")
wasss_app.logger.info(sensor_data.timestamp)
elif sensor_data_header == SensorData.HEADER_VOLTAGE:
sensor_data.voltage = value
elif sensor_data_header == SensorData.HEADER_TEMPERATURE:
sensor_data.temp = value
elif sensor_data_header == SensorData.HEADER_HUMIDITY:
sensor_data.humidity = value
elif sensor_data_header == SensorData.HEADER_PRESSURE:
sensor_data.pressure = value
elif sensor_data_header == SensorData.HEADER_BRIGHTNESS:
sensor_data.brightness = value
elif sensor_data_header == SensorData.HEADER_SPEED:
sensor_data.speed = value
elif sensor_data_header == SensorData.HEADER_MOTION:
sensor_data.motion = value
else:
gen_sen_data = GenericSensorData(sensor=sensor, name=sensor_data_header, value=value)
db.session.add(sensor_data)
db.session.commit()
return jsonify("ok")
api_v1.add_resource(SensorData_Handler, '/sensor/<string:mac>/data')