Changeset - 76bc951639c1
[Not reviewed]
default
0 1 0
Dennis Fink - 10 years ago 2015-07-07 19:20:24
dennis.fink@c3l.lu
Fixed sensors.py
1 file changed with 39 insertions and 38 deletions:
0 comments (0 inline, 0 general)
spaceapi/sensors.py
Show inline comments
 
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
 
from .utils import first, fuzzy_list_find
 

	
 
sensors_views = Blueprint('sensors', __name__)
 
@@ -19,78 +19,79 @@ ALLOWED_SENSORS_KEYS = json.load(
 
RADIATON_SUBKEYS = ('alpha', 'beta', 'gamma', 'beta_gamma')
 

	
 
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/<key>', methods=['POST'])
 
@httpauth.login_required
 
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)
0 comments (0 inline, 0 general)