Changeset - 2fd1be8b4f56
[Not reviewed]
default
0 3 0
Dennis Fink - 3 years ago 2022-03-06 11:01:38
dennis.fink@c3l.lu
We now use only v14
3 files changed with 10 insertions and 54 deletions:
0 comments (0 inline, 0 general)
spaceapi/sensors.py
Show inline comments
 
@@ -12,57 +12,47 @@ sensors_views = Blueprint("sensors", __n
 

	
 
ALLOWED_SENSORS_KEYS = json.load(
 
    open(resource_filename("spaceapi", "schema/sensors.json"), encoding="utf-8")
 
)
 

	
 
RADIATON_SUBKEYS = frozenset(("alpha", "beta", "gamma", "beta_gamma"))
 

	
 
get_identification_key = partial(first, keys=frozenset(("name", "location")))
 

	
 

	
 
def set_value(data, key):
 

	
 
    active = ActiveStatus()
 
    active_v14 = ActiveStatusv14()
 
    active = ActiveStatusv14()
 

	
 
    try:
 
        subkey = get_identification_key(data)
 
    except ValueError:
 
        current_app.logger.error("Subkey Error")
 
        return abort(400)
 

	
 
    try:
 
        index = fuzzy_list_find(active["sensors"][key], subkey, data[subkey])
 
        if key == "barometer":
 
            data["unit"] == "hPA"
 
            data["unit"] == "hPa"
 
        active["sensors"][key][index].update(data)
 
    except ValueError:
 
        active["sensors"][key].append(data)
 

	
 
    try:
 
        index_v14 = fuzzy_list_find(active_v14["sensors"][key], subkey, data[subkey])
 
        if key == "barometer":
 
            data["unit"] = "hPa"
 
        active_v14["sensors"][key][index].update(data)
 
    except ValueError:
 
        active_v14["sensors"][key].append(data)
 

	
 
    active.save_last_state()
 
    active_v14.save_last_state()
 
    return jsonify(active)
 

	
 

	
 
def set_radiation_value(data):
 

	
 
    active = ActiveStatus()
 
    active = ActiveStatusv14()
 

	
 
    radiation_keys = [k for k in RADIATON_SUBKEYS if k in data]
 

	
 
    if not radiation_keys:
 
        return abort(400)
 

	
 
    for first_subkey in radiation_keys:
 

	
 
        try:
 
            second_subkey = get_identification_key(data[first_subkey])
 
        except ValueError:
 
            return abort(400)
 
@@ -76,25 +66,25 @@ def set_radiation_value(data):
 
            active["sensors"]["radiation"][first_subkey][index].update(data)
 
        except ValueError:
 
            active["sensors"]["radiaton"][first_subkey].append(data)
 

	
 
    active.save_last_state()
 
    return jsonify(active)
 

	
 

	
 
@sensors_views.route("/set/<key>", methods=["POST"])
 
@httpauth.login_required
 
def set_sensors(key):
 

	
 
    active = ActiveStatus()
 
    active = ActiveStatusv14()
 

	
 
    if key in ALLOWED_SENSORS_KEYS and key in active["sensors"]:
 
        data = request.json
 
        try:
 
            try:
 
                jsonschema.validate(data, ALLOWED_SENSORS_KEYS[key])
 
            except jsonschema.ValidationError:
 
                current_app.logger.error("Validation Error")
 
                return abort(400)
 

	
 
            if key != "radiation":
 
                return set_value(data, key)
spaceapi/utils.py
Show inline comments
 
@@ -204,27 +204,24 @@ class ActiveStatus(Singleton, dict):
 

	
 
            self["state"]["lastchange"] = int(time())
 

	
 
        if message is not None and message:
 
            self["state"]["message"] = message
 

	
 

	
 
class ActiveStatusv14(ActiveStatus):
 
    def __init__(self):
 
        self.default_json_file = default_json_file_v14
 
        self.last_state_file = last_state_file_v14
 

	
 
    def send_tweet(self, value):
 
        pass
 

	
 

	
 
def request_wants_json():
 
    best = request.accept_mimetypes.best_match(["application/json", "text/html"])
 
    return (
 
        best == "application/json"
 
        and request.accept_mimetypes[best] > request.accept_mimetypes["text/html"]
 
    )
 

	
 

	
 
def fuzzy_list_find(lst, key, value):
 

	
 
    for i, dic in enumerate(lst):
 
@@ -236,18 +233,18 @@ def fuzzy_list_find(lst, key, value):
 

	
 
def first(iterable, keys):
 
    for key in keys:
 
        if key in iterable:
 
            return key
 

	
 
    raise ValueError
 

	
 

	
 
def pass_active_status(f):
 
    @wraps(f)
 
    def wrapper(*args, **kwargs):
 
        status = ActiveStatus()
 
        status = ActiveStatusv14()
 
        rv = f(status, *args, **kwargs)
 
        status.save_last_state()
 
        return rv
 

	
 
    return wrapper
spaceapi/views.py
Show inline comments
 
@@ -9,60 +9,46 @@ from flask import (
 
    url_for,
 
)
 

	
 
from .auth import basicauth, httpauth
 
from .utils import ActiveStatus, ActiveStatusv14, request_wants_json
 

	
 
root_views = Blueprint("root", __name__)
 

	
 

	
 
@root_views.route("/")
 
def index():
 
    if request_wants_json():
 
        return jsonify(ActiveStatus())
 
        return jsonify(ActiveStatusv14())
 
    return render_template("index.html", status=ActiveStatus())
 

	
 

	
 
@root_views.route("/status.json")
 
def status_json():
 
    return jsonify(ActiveStatus())
 

	
 

	
 
@root_views.route("/v14/status.json")
 
def v14_json():
 
    return jsonify(ActiveStatusv14())
 

	
 

	
 
@root_views.route("/reload")
 
@httpauth.login_required
 
def reload():
 
    active = ActiveStatus()
 
    active.reload()
 
    return jsonify(active)
 

	
 

	
 
@root_views.route("/v14/reload")
 
@httpauth.login_required
 
def v14_reload():
 
    active = ActiveStatusv14()
 
    active.reload()
 
    return jsonify(active)
 

	
 

	
 
@root_views.route("/open", methods=("GET", "POST"))
 
@httpauth.login_required
 
def open():
 
    if request.method == "POST":
 
        active = ActiveStatus()
 
        activev14 = ActiveStatusv14()
 
        active = ActiveStatusv14()
 

	
 
        try:
 
            if (
 
                httpauth.username()
 
                in current_app.config["STATE_TRIGGER_PERSON_ALLOWED"]
 
            ):
 
                trigger_person = httpauth.username()
 
            else:
 
                trigger_person = None
 
        except KeyError:
 
            trigger_person = None
 

	
 
@@ -70,71 +56,62 @@ def open():
 
            new_state = False
 
        elif "open" in request.form:
 
            new_state = True
 

	
 
        if "message" in request.form:
 
            message = request.form.get("message")
 
        else:
 
            message = None
 

	
 
        active.set_new_state(
 
            value=new_state, trigger_person=trigger_person, message=message
 
        )
 
        activev14.set_new_state(
 
            value=new_state, trigger_person=trigger_person, message=message
 
        )
 
        active.save_last_state()
 
        activev14.save_last_state()
 
        return redirect(url_for("root.index"))
 

	
 
    return render_template("open.html")
 

	
 

	
 
@root_views.route("/present", methods=("GET", "POST"))
 
@httpauth.login_required
 
def present():
 
    if request.method == "POST":
 

	
 
        active = ActiveStatus()
 
        activev14 = ActiveStatusv14()
 
        active = ActiveStatusv14()
 

	
 
        if active["state"]["open"]:
 
            user = (
 
                httpauth.username()
 
                if "user" not in request.form
 
                else request.form["user"]
 
            )
 
            if "present" in request.form:
 
                active.add_user_present(user)
 
                activev14.add_user_present(user)
 
            elif "leave" in request.form:
 
                active.remove_user_present(user)
 
                activev14.remove_user_present(user)
 
            else:
 
                return redirect(url_for("root.index"))
 

	
 
            active.save_last_state()
 
            activev14.save_last_state()
 

	
 
        return redirect(url_for("root.index"))
 

	
 
    return render_template("present.html")
 

	
 

	
 
@root_views.route("/basicopen", methods=("GET", "POST"))
 
@basicauth.login_required
 
def basicopen():
 
    if request.method == "POST":
 
        active = ActiveStatus()
 
        activev14 = ActiveStatusv14()
 
        active = ActiveStatusv14()
 

	
 
        try:
 
            if (
 
                httpauth.username()
 
                in current_app.config["STATE_TRIGGER_PERSON_ALLOWED"]
 
            ):
 
                trigger_person = httpauth.username()
 
            else:
 
                trigger_person = None
 
        except KeyError:
 
            trigger_person = None
 

	
 
@@ -142,51 +119,43 @@ def basicopen():
 
            new_state = False
 
        elif "open" in request.form:
 
            new_state = True
 

	
 
        if "message" in request.form:
 
            message = request.form.get("message")
 
        else:
 
            message = None
 

	
 
        active.set_new_state(
 
            value=new_state, trigger_person=trigger_person, message=message
 
        )
 
        activev14.set_new_state(
 
            value=new_state, trigger_person=trigger_person, message=message
 
        )
 
        active.save_last_state()
 
        activev14.save_last_state()
 
        return redirect(url_for("root.index"))
 

	
 
    return render_template("open.html")
 

	
 

	
 
@root_views.route("/basicpresent", methods=("GET", "POST"))
 
@basicauth.login_required
 
def basicpresent():
 
    if request.method == "POST":
 

	
 
        active = ActiveStatus()
 
        activev14 = ActiveStatusv14()
 
        active = ActiveStatusv14()
 

	
 
        if active["state"]["open"]:
 
            user = (
 
                httpauth.username()
 
                if "user" not in request.form
 
                else request.form["user"]
 
            )
 
            if "present" in request.form:
 
                active.add_user_present(user)
 
                activev14.add_user_present(user)
 
            elif "leave" in request.form:
 
                active.remove_user_present(user)
 
                activev14.remove_user_present(user)
 
            else:
 
                return redirect(url_for("root.index"))
 

	
 
            active.save_last_state()
 
            activev14.save_last_state()
 

	
 
        return redirect(url_for("root.index"))
 

	
 
    return render_template("present.html")
0 comments (0 inline, 0 general)