pdf / app.py
aniket9909's picture
Update app.py
2ea8bc2 verified
from flask import Flask, request, jsonify, send_file
from analysis import get_comprehensive_analysis, generate_html_report
from pdf_generator import generate_pdf
import os
import uuid
import json
app = Flask(__name__)
@app.route("/")
def home():
return "YOUV.AI Flask Skin Analysis API is running!", 200
# ---------------------------------------------------------
# 1️⃣ STEP ONE: ANALYSIS ONLY (returns JSON, no PDF)
# ---------------------------------------------------------
@app.route("/analyze", methods=["POST"])
def analyze():
if "image" not in request.files:
return jsonify({"success": False, "error": "No image uploaded"}), 400
image = request.files["image"]
temp_name = f"upload_{uuid.uuid4().hex}.jpg"
image.save(temp_name)
# Optional: Enable multi-pass via query parameter
# Example: /analyze?multipass=true
enable_multipass = request.args.get("multipass", "false").lower() == "true"
analysis = get_comprehensive_analysis(temp_name, enable_multipass=enable_multipass)
os.remove(temp_name)
if not analysis:
return jsonify({"success": False, "error": "Analysis failed"}), 500
return jsonify({
"success": True,
"analysis": analysis
}), 200
# ---------------------------------------------------------
# 2️⃣ STEP TWO: PDF GENERATION (frontend sends JSON here)
# ---------------------------------------------------------
@app.route("/generate_pdf", methods=["POST"])
def generate_pdf_endpoint():
try:
# Case 1: JSON in body
data = request.get_json(silent=True)
# Case 2: JSON string inside form-data
if not data and "json_data" in request.form:
try:
data = json.loads(request.form["json_data"])
except:
return jsonify({
"success": False,
"error": "Invalid JSON inside 'json_data'"
}), 400
if not data or "analysis" not in data:
return jsonify({
"success": False,
"error": "Missing 'analysis' JSON"
}), 400
analysis = data["analysis"]
user_info = {
"name": data.get("name", ""),
"age": data.get("age", ""),
"gender": data.get("gender", ""),
"email": data.get("email", ""),
"phone": data.get("phone", "")
}
# Generate HTML + PDF
html_path = os.path.abspath(f"report_{uuid.uuid4().hex}.html")
pdf_path = os.path.abspath(f"report_{uuid.uuid4().hex}.pdf")
generate_html_report(analysis, user_info, html_path)
generate_pdf(html_path, pdf_path)
return send_file(pdf_path, mimetype="application/pdf", as_attachment=True)
except Exception as e:
return jsonify({"success": False, "error": str(e)}), 500
# HuggingFace entrypoint
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)