diff --git a/.gitignore b/.gitignore index 2ea9cc8..a79263f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ db.sqlite .device data +data-keep node_modules static/calibration-visualiser.* diff --git a/app.py b/app.py index 7082dd2..173026f 100755 --- a/app.py +++ b/app.py @@ -21,6 +21,12 @@ def get_calibration(conn: sqlite3.Connection) -> Optional[db.Calibration]: return db.Calibration.get_from_id(calibration_id, conn) +@app.context_processor +def inject_stage_and_region(): + conn = db.get() + return dict(calibration=get_calibration(conn)) + + @app.route("/") def hello_world(): conn = db.get() @@ -40,7 +46,7 @@ def create_object(): def object(id: int): conn = db.get() object = db.Object.get_from_id(id, conn) - return render_template('object.html', object=object, calibration=get_calibration(conn)) + return render_template('object.html', object=object) @app.route('/scan/') @@ -90,10 +96,17 @@ def scan_calibration(id: int): @app.route("/api/calibrate/") def run_calibration(id: int): conn = db.get() - db.Calibration.get_from_id(id, conn) + calib = db.Calibration.get_from_id(id, conn) + if calib is None: + return 'oops', 404 + calibration_json = calibration.calibrate(join(config.CALIBRATION_DIR, str(id))) with open(join(config.CALIBRATION_DIR, str(id), 'calibration.json'), 'w') as f: json.dump(calibration_json, f, indent=4) + with conn: + calib.state = db.CalibrationState.IsComputed + calib.save(conn) + return 'ok' diff --git a/config.py b/config.py index 010fdca..7374ea5 100644 --- a/config.py +++ b/config.py @@ -1,7 +1,9 @@ from os.path import join +MODE = 'debug' DATA_DIR = 'data' -CALIBRATION_DIR = join(DATA_DIR, 'calibration') +CALIBRATION_DIR = join(DATA_DIR, 'calibrations') +OBJECT_DIR = join(DATA_DIR, 'objects') LEDS_UUIDS = [ 'ac59350e-3787-46d2-88fa-743c1d34fe86', diff --git a/db.py b/db.py index d75745d..d7d439b 100755 --- a/db.py +++ b/db.py @@ -3,9 +3,17 @@ from enum import IntEnum from flask import g import os +from os.path import join +import shutil import sqlite3 +import sys from typing import Optional +if __name__ != '__main__': + from . import config +else: + import config + def get() -> sqlite3.Connection: if 'db' not in g: @@ -40,7 +48,8 @@ def init_app(app): class CalibrationState(IntEnum): Empty = 0 HasData = 1 - IsValidated = 2 + IsComputed = 2 + IsValidated = 3 class Calibration: @@ -59,7 +68,9 @@ class Calibration: 'INSERT INTO calibration(state) VALUES (?) RETURNING ' + Calibration.select_args() + ';', [int(CalibrationState.Empty)] ) - return Calibration.from_row(response.fetchone()) + calibration = Calibration.from_row(response.fetchone()) + os.makedirs(join(config.CALIBRATION_DIR, str(calibration.id))) + return calibration @staticmethod def from_row(row: sqlite3.Row) -> 'Calibration': @@ -96,7 +107,7 @@ class Acquisition: cur = db.cursor() cur.execute( 'UPDATE acquisition SET calibration_id = ?, object_id = ? WHERE id = ?', - [self.calibration_id, self.objct_id, self.id] + [self.calibration_id, self.object_id, self.id] ) @staticmethod @@ -146,7 +157,9 @@ class Object: 'INSERT INTO object(name) VALUES (?) RETURNING ' + Object.select_args() + ';', [name] ) - return Object.from_row(response.fetchone()) + object = Object.from_row(response.fetchone()) + os.makedirs(join(config.OBJECT_DIR, str(object.id))) + return object @staticmethod def get_from_id(object_id: int, db: sqlite3.Connection) -> Optional['Object']: @@ -176,6 +189,10 @@ class Object: def main(): + if config.MODE != 'debug': + print('Can only reset db in debug mode') + sys.exit(1) + db = sqlite3.connect( os.environ.get('DATABASE_PATH', 'db.sqlite'), detect_types=sqlite3.PARSE_DECLTYPES, @@ -183,28 +200,32 @@ def main(): db.row_factory = sqlite3.Row init(db) + if os.path.isdir(config.DATA_DIR): + shutil.rmtree(config.DATA_DIR) + # Create a new object with db: - object = Object.create('Mon premier objet', db) - calibration = Calibration.create(db) - object.add_acquisition(calibration.id, db) - object.add_acquisition(calibration.id, db) - object.add_acquisition(calibration.id, db) - calibration = Calibration.create(db) - object.add_acquisition(calibration.id, db) - object.add_acquisition(calibration.id, db) - object.add_acquisition(calibration.id, db) + Object.create('Mon premier objet', db) + # calibration = Calibration.create(db) + # object.add_acquisition(calibration.id, db) + # object.add_acquisition(calibration.id, db) + # object.add_acquisition(calibration.id, db) + # calibration = Calibration.create(db) + # object.add_acquisition(calibration.id, db) + # object.add_acquisition(calibration.id, db) + # object.add_acquisition(calibration.id, db) - object = Object.create('Mon deuxième objet', db) - calibration = Calibration.create(db) - object.add_acquisition(calibration.id, db) - object.add_acquisition(calibration.id, db) - object.add_acquisition(calibration.id, db) - calibration = Calibration.create(db) - object.add_acquisition(calibration.id, db) - object.add_acquisition(calibration.id, db) - object.add_acquisition(calibration.id, db) + Object.create('Mon deuxième objet', db) + # calibration = Calibration.create(db) + # object.add_acquisition(calibration.id, db) + # object.add_acquisition(calibration.id, db) + # object.add_acquisition(calibration.id, db) + # calibration = Calibration.create(db) + # object.add_acquisition(calibration.id, db) + # object.add_acquisition(calibration.id, db) + # object.add_acquisition(calibration.id, db) if __name__ == '__main__': - main() + if len(sys.argv) > 1 and sys.argv[1] == 'reset': + main() diff --git a/scanner.py b/scanner.py index 5cf7cc9..3cbf673 100644 --- a/scanner.py +++ b/scanner.py @@ -35,7 +35,7 @@ def scan(output_dir: str): # capture(img) # For debug purposes - shutil.copyfile(join(config.DATA_DIR, 'small', led + '.jpg'), img) + shutil.copyfile(join('data-keep/small', led + '.jpg'), img) delta = time.time() - start diff --git a/templates/base.html b/templates/base.html index 1b62d72..5c097b8 100644 --- a/templates/base.html +++ b/templates/base.html @@ -22,8 +22,28 @@ diff --git a/templates/calibrate.html b/templates/calibrate.html index 184c808..b2977ee 100644 --- a/templates/calibrate.html +++ b/templates/calibrate.html @@ -30,8 +30,8 @@ -