diff --git a/server/download.py b/server/download.py index 5ad784b..b72b748 100644 --- a/server/download.py +++ b/server/download.py @@ -18,10 +18,10 @@ def download(ip, dest): for f in files: source_file = '/3dscan/' + f - dest_file = dest + f + dest_file = dest / f print('Grabbing file', source_file) sftp.get(source_file, dest_file) - sftp.remove(source_file) + #sftp.remove(source_file) if sftp: sftp.close() if transport: transport.close() @@ -29,10 +29,7 @@ def download(ip, dest): print('Finished downloading from', ip) def download_all_photos(dest): - if not dest.endswith('/'): - raise Exception('Destination must end with /') - - if not os.path.exists(dest): + if not dest.exists(): raise Exception('Destination does not exist') print('Downloading all photos to', dest) @@ -40,3 +37,7 @@ def download_all_photos(dest): for ip in settings.RASPBERRY_IPS: t = threading.Thread(target=download, args=(ip, dest)) t.start() + +if __name__ == '__main__': + from pathlib import Path + download_all_photos(Path('test/')) diff --git a/server/main.py b/server/main.py index cc77a02..b9dae17 100644 --- a/server/main.py +++ b/server/main.py @@ -1,16 +1,19 @@ import os import json +import time from pathlib import Path -from flask import Flask, request +from flask import Flask, request, abort, send_from_directory from flask_cors import CORS +import power, capture, download + build_folder = Path('../client/build') output_folder = Path('./output') app = Flask(__name__, static_folder=str(build_folder), static_url_path='') CORS(app) @app.route('/api/clients', methods=['POST']) -def clients(): +def clients_post(): content = request.json print('Recieved:', content) @@ -32,8 +35,89 @@ def clients(): return {'client_id': client_id} +@app.route('/api/clients/', methods=['GET']) +def clients_get(cid): + folder = cid + path = output_folder / cid + + if not path.exists(): + abort(404) + + info_file = path / 'info.json' + info_text = info_file.read_text() + res = json.loads(info_text) + photo_glob = path.glob('*.jpg') + res['has_photos'] = bool(list(photo_glob)) + + return res + +@app.route('/api/clients//session', methods=['GET']) +def session_get(cid): + folder = cid + path = output_folder / cid + + if not path.exists(): + abort(404) + + photo_glob = path.glob('*.jpg') + res = {} + res['photos'] = [x.name for x in photo_glob] + + return res + +@app.route('/api/clients//session', methods=['DELETE']) +def session_delete(cid): + folder = cid + path = output_folder / cid + + if not path.exists(): + abort(404) + + photo_glob = path.glob('*.jpg') + + for p in photo_glob: + p.unlink() + + return '' + +@app.route('/api/clients//session', methods=['POST']) +def session_post(cid): + folder = cid + path = output_folder / cid + + if not path.exists(): + abort(404) + + # go through the photo taking process + + # warmup + power.lights_on() + time.sleep(4) + power.lights_off() + time.sleep(0.5) + + # capture + power.lights_on() + time.sleep(0.25) + capture.trigger_capture() + time.sleep(1) + power.grid_on() + time.sleep(0.25) + capture.trigger_capture() + time.sleep(1) + power.grid_off() + power.lights_off() + + download.download_all_photos(path) + + return '' + @app.route('/') def index(): return app.send_static_file('index.html') -app.run() +@app.route('/output/') +def output(filename): + return send_from_directory('output/', filename) + +app.run(host='0.0.0.0')