diff --git a/app.py b/app.py index 173026f..f113cad 100755 --- a/app.py +++ b/app.py @@ -5,7 +5,6 @@ import json import os from os.path import join import sqlite3 -from typing import Optional import uuid from . import db, config, scanner, calibration @@ -13,10 +12,10 @@ app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(20).hex() -def get_calibration(conn: sqlite3.Connection) -> Optional[db.Calibration]: +def get_calibration(conn: sqlite3.Connection) -> db.Calibration: calibration_id = session.get('calibration_id', None) if calibration_id is None: - return None + return db.Calibration.Dummy return db.Calibration.get_from_id(calibration_id, conn) @@ -24,7 +23,7 @@ def get_calibration(conn: sqlite3.Connection) -> Optional[db.Calibration]: @app.context_processor def inject_stage_and_region(): conn = db.get() - return dict(calibration=get_calibration(conn)) + return dict(calibration=get_calibration(conn), CalibrationState=db.CalibrationState) @app.route("/") @@ -58,11 +57,13 @@ def scan(id: int): @app.route("/calibrate/") def calibrate(): + print(session) conn = db.get() - with conn: - calibration = db.Calibration.create(conn) - session['calibration_id'] = calibration.id - return render_template('calibrate.html', calibration=calibration) + if 'calibration_id' not in session: + with conn: + calibration = db.Calibration.create(conn) + session['calibration_id'] = calibration.id + return render_template('calibrate.html', leds=config.LEDS_UUIDS) @app.route("/api/preview/") @@ -76,14 +77,22 @@ def preview(id: int): return "Impossible de capturer l'image.", 500 -@app.route("/api/scan-for-calibration/") -def scan_calibration(id: int): +@app.route("/api/scan-for-calibration") +def scan_calibration(): conn = db.get() - calibration = db.Calibration.get_from_id(id, conn) + + if 'calibration_id' not in session: + with conn: + calibration = db.Calibration.create(conn) + calibration_id = str(calibration.id) + session['calibration_id'] = calibration.id + else: + calibration_id = str(session['calibration_id']) + calibration = get_calibration(conn) def generate(): length = len(config.LEDS_UUIDS) - for index, led_uuid in enumerate(scanner.scan(join(config.CALIBRATION_DIR, id))): + for index, led_uuid in enumerate(scanner.scan(join(config.CALIBRATION_DIR, calibration_id))): yield f"{led_uuid},{(index+1)/length}\n" with conn: @@ -110,6 +119,20 @@ def run_calibration(id: int): return 'ok' +@app.route('/validate-calibration') +def validate_calibration(): + conn = db.get() + calib = get_calibration(conn) + if calib is None: + return 'oops', 404 + + calib.state = db.CalibrationState.IsValidated + with conn: + calib.save(conn) + + return redirect('/') + + @app.route("/calibration/") def calibration_page(id: int): conn = db.get() diff --git a/db.py b/db.py index d7d439b..29878d4 100755 --- a/db.py +++ b/db.py @@ -93,6 +93,9 @@ class Calibration: return Calibration.from_row(response.fetchone()) +Calibration.Dummy = Calibration(-1, CalibrationState.Empty) + + class Acquisition: @staticmethod def select_args() -> str: diff --git a/templates/base.html b/templates/base.html index 5c097b8..1604ba3 100644 --- a/templates/base.html +++ b/templates/base.html @@ -22,29 +22,30 @@ diff --git a/templates/calibrate.html b/templates/calibrate.html index b2977ee..cffeb68 100644 --- a/templates/calibrate.html +++ b/templates/calibrate.html @@ -82,7 +82,7 @@ cell.classList.add('cell'); img = document.createElement('img'); img.classList.add('is-loading'); - img.src = '/data/calibration/{{ calibration.id }}/{{ led }}.jpg?v=0'; + img.src = '/data/calibrations/{{ calibration.id }}/{{ led }}.jpg?v=0'; cell.appendChild(img); grid.appendChild(cell); {% endfor %} @@ -98,7 +98,7 @@ progressBar.style.display = "block"; grid.innerHTML = ''; - let response = await fetch('/api/scan-for-calibration/{{ calibration.id }}'); + let response = await fetch('/api/scan-for-calibration'); let reader = response.body.pipeThrough(new TextDecoderStream()).getReader(); while (true) { @@ -108,6 +108,11 @@ buttons.forEach(x => x.removeAttribute('disabled')); scanButton.classList.remove('is-loading'); calibrateDiv.style.display = "block"; + + for (let elt of document.getElementsByClassName('calibration-tag')) { + elt.style.display = "none"; + } + document.getElementById('calibration-tag-1').style.display = null; break; } diff --git a/templates/calibration.html b/templates/calibration.html index 6f8c6f6..776a7b0 100644 --- a/templates/calibration.html +++ b/templates/calibration.html @@ -38,6 +38,19 @@ + +
+ +
{% endblock content %} {% block extracss %} diff --git a/templates/object.html b/templates/object.html index 3ed6e44..8806557 100644 --- a/templates/object.html +++ b/templates/object.html @@ -4,7 +4,7 @@

{{ object.name }}

- {% if calibration %} + {% if calibration.state == CalibrationState.IsValidated %} Faire un scan {% else %} @@ -30,7 +30,7 @@
{% endblock content %} -{% block extrajs %}{% if not calibration %} +{% block extrajs %}{% if calibration.state < CalibrationState.IsValidated %}