import os import json import time from pathlib import Path 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) status = 'Standby' @app.route('/api/status', methods=['GET']) def status_get(): return {'status': status} @app.route('/api/clients', methods=['POST']) def clients_post(): content = request.json print('Recieved:', content) phone = str(content['phone']) for i in range(1, 100): suffix = str(i).zfill(2) folder = phone + '_' + suffix path = output_folder / folder if not path.exists(): break path.mkdir() info_file = path / 'info.json' info_file.touch() info_file.write_text(json.dumps(content, indent=4)) client_id = folder 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'] = sorted([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): global status folder = cid path = output_folder / cid if not path.exists(): abort(404) # go through the photo taking process status = 'Warming up' try: # warmup power.lights_on() time.sleep(4) power.lights_off() time.sleep(0.5) except BaseException as e: print('Problem with lights: {} - {}'.format(e.__class__.__name__, str(e))) print() print('Are you sure the system is connected?') print() abort(500) status = 'Capturing' # 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() status = 'Writing to files' time.sleep(3) status = 'Downloading' download.download_all_photos(path) status = 'Standby' return '' @app.route('/') def index(): return app.send_static_file('index.html') @app.errorhandler(404) def not_found(e): return app.send_static_file('index.html') @app.route('/output/') def output(filename): return send_from_directory('output/', filename) app.run(host='0.0.0.0')