from datetime import datetime
import os
from pathlib import Path
from flask import Flask, flash, request, redirect, render_template
from app.text_data import get_text_from_uid, is_valid_uid
UPLOAD_FOLDER = "files"
app = Flask(__name__)
app.config.from_pyfile("config/develop.py")
@app.route("/")
def root():
app.logger.info("static path is " + app.static_url_path)
app.logger.info("files will be uploaded to " + app.config["UPLOAD_FOLDER"])
return app.send_static_file("index.html")
def bad_key():
return "
Key not recognized
"
@app.route("/record-audio", methods=["POST", "GET"])
def record_audio():
key = request.args.get("key")
app.logger.info(f"key is `{key}`")
if is_valid_uid(key):
app.logger.info(f"found valid key `{key}`")
text_to_speak = get_text_from_uid(key)
if not text_to_speak:
raise RuntimeError("This should never happen!")
data = {"text_to_speak": text_to_speak, "text_uid": key}
return render_template("recorder.html", data=data)
# return send_from_directory("static", "recorder.html")
else:
app.logger.info(f"found invalid key `{key}`")
return bad_key()
@app.route("/save-record", methods=["POST"])
def save_record():
# check if the post request has the file part
# import ipdb; ipdb.set_trace()
if "audio_data" not in request.files:
flash("No file part")
return redirect(request.url)
text_uid = request.form.get("text_uid")
if text_uid is None:
return redirect(request.url) # FIXME need better error handling
audio_file = request.files["audio_data"]
app.logger.info(f"File `{audio_file}`, uuid `{text_uid}` found.")
# if user does not select file, browser also
# submit an empty part without filename
if audio_file.filename == "":
flash("No selected file")
return redirect(request.url)
else:
print(audio_file.filename)
date_str = datetime.utcnow().isoformat()[:21] # to the tenth of a second
filename = f"{text_uid}_{date_str}.mp3"
full_file_name = os.path.join(app.config["UPLOAD_FOLDER"], filename)
app.logger.info(f"saving file to {full_file_name}")
audio_file.save(full_file_name)
return "Success
"
if __name__ == "__main__":
Path(app.config["UPLOAD_FOLDER"]).mkdir(parents=True, exist_ok=True)
app.run(debug=True)