diff --git a/spaceapi/sensors.py b/spaceapi/sensors.py --- a/spaceapi/sensors.py +++ b/spaceapi/sensors.py @@ -3,7 +3,7 @@ import json from pkg_resources import resource_filename import jsonschema -from flask import Blueprint, jsonify +from flask import Blueprint, jsonify, request, abort, current_app from .auth import httpauth from .active import active_json, save_last_state @@ -22,55 +22,54 @@ IDENTIFICATION_KEYS = ('name', 'location def get_identification_key(data): - return first(data, IDENTIFICATION_KEYS) + return first(data, IDENTIFICATION_KEYS) def set_value(data, key): - try: - subkey = get_identification_key(data) - except ValueError: - return 400 + try: + subkey = get_identification_key(data) + except ValueError: + return abort(400) - try: - index = fuzzy_list_find(active_json['sensors'][key], - key, data[subkey]) - active_json['sensors'][key][index].update(data) - except ValueError: - active_json['sensors'][key].append(data) + try: + index = fuzzy_list_find(active_json['sensors'][key], + subkey, data[subkey]) + active_json['sensors'][key][index].update(data) + except ValueError: + active_json['sensors'][key].append(data) - save_last_state() - return jsonify(active_json) + save_last_state() + return jsonify(active_json) def set_radiation_value(data): - radiation_keys = [k for k in RADIATON_SUBKEYS if k in data] + radiation_keys = [k for k in RADIATON_SUBKEYS if k in data] - if not radiation_keys: - return 400 + if not radiation_keys: + return abort(400) - for first_subkey in radiation_keys: + for first_subkey in radiation_keys: - try: - second_subkey = get_identification_key(data[first_subkey]) - except ValueError: - return 400 + try: + second_subkey = get_identification_key(data[first_subkey]) + except ValueError: + return abort(400) - try: - index = fuzzy_list_find( - active_json['sensors']['radiation'][first_subkey], - second_subkey, - data[first_subkey][second_subkey]) - active_json['sensors'][ - 'radiation' - ][first_subkey][index].update(data) - except ValueError: - active_json['sensors']['radiaton'][first_subkey].append(data) + try: + index = fuzzy_list_find( + active_json['sensors']['radiation'][first_subkey], + second_subkey, + data[first_subkey][second_subkey]) + active_json['sensors']['radiation'][first_subkey][index].update( + data) + except ValueError: + active_json['sensors']['radiaton'][first_subkey].append(data) + save_last_state() + return jsonify(active_json) - save_last_state() - return jsonify(active_json) @sensors_views.route('/set/', methods=['POST']) @httpauth.login_required @@ -79,18 +78,20 @@ def set_sensors(key): if key in ALLOWED_SENSORS_KEYS and key in active_json['sensors']: data = request.data try: - data = json.loads(data) + data = json.loads(data.decode('utf-8')) try: jsonschema.validate(data, ALLOWED_SENSORS_KEYS[key]) except jsonschema.ValidationError: - return 400 + current_app.logger.info('Validation Error') + return abort(400) if key != 'radiation': return set_value(data, key) else: return set_radiation_value(data) + except ValueError: - return 400 + return abort(400) else: - return 400 + return abort(400)