76 lines
1.8 KiB
Python
76 lines
1.8 KiB
Python
from flask import Flask, request, jsonify
|
|
from flask_cors import CORS
|
|
import traceback
|
|
|
|
from cad_vector_area import calculate_pdf_vector_area
|
|
|
|
app = Flask(__name__)
|
|
CORS(app)
|
|
|
|
|
|
@app.route("/health", methods=["GET"])
|
|
def health():
|
|
return jsonify({
|
|
"success": True,
|
|
"message": "Python CAD Area service is running"
|
|
})
|
|
|
|
|
|
@app.route("/calculate", methods=["POST"])
|
|
def calculate():
|
|
try:
|
|
if "file" not in request.files:
|
|
return jsonify({
|
|
"success": False,
|
|
"message": "No PDF file received"
|
|
}), 400
|
|
|
|
uploaded_file = request.files["file"]
|
|
|
|
if uploaded_file.filename == "":
|
|
return jsonify({
|
|
"success": False,
|
|
"message": "Empty filename"
|
|
}), 400
|
|
|
|
if not uploaded_file.filename.lower().endswith(".pdf"):
|
|
return jsonify({
|
|
"success": False,
|
|
"message": "Only PDF files are allowed"
|
|
}), 400
|
|
|
|
pdf_bytes = uploaded_file.read()
|
|
|
|
scale_ratio = request.form.get("scale_ratio", "1")
|
|
|
|
try:
|
|
scale_ratio = float(scale_ratio)
|
|
if scale_ratio <= 0:
|
|
scale_ratio = 1.0
|
|
except ValueError:
|
|
scale_ratio = 1.0
|
|
|
|
result = calculate_pdf_vector_area(
|
|
pdf_bytes=pdf_bytes,
|
|
filename=uploaded_file.filename,
|
|
scale_ratio=scale_ratio
|
|
)
|
|
|
|
status_code = 200 if result.get("success") else 422
|
|
|
|
return jsonify(result), status_code
|
|
|
|
except Exception as e:
|
|
return jsonify({
|
|
"success": False,
|
|
"message": str(e),
|
|
"trace": traceback.format_exc()
|
|
}), 500
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app.run(
|
|
host="127.0.0.1",
|
|
port=5055,
|
|
debug=True
|
|
) |