62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
import pathlib
|
|
import sys
|
|
|
|
from flask import Flask, Response, jsonify, request
|
|
|
|
try:
|
|
from .freecad_worker import FreeCADWorker
|
|
from .step_tree import load_deleted_paths
|
|
except ImportError:
|
|
repo_root = pathlib.Path(__file__).resolve().parents[2]
|
|
if str(repo_root) not in sys.path:
|
|
sys.path.insert(0, str(repo_root))
|
|
from tools.step_service.freecad_worker import FreeCADWorker
|
|
from tools.step_service.step_tree import load_deleted_paths
|
|
|
|
|
|
def create_app(worker=None):
|
|
app = Flask(__name__)
|
|
step_worker = worker or FreeCADWorker()
|
|
|
|
@app.after_request
|
|
def add_cors_headers(response):
|
|
response.headers["Access-Control-Allow-Origin"] = "*"
|
|
response.headers["Access-Control-Allow-Methods"] = "POST, OPTIONS"
|
|
response.headers["Access-Control-Allow-Headers"] = "Content-Type"
|
|
return response
|
|
|
|
@app.route("/save-step", methods=["OPTIONS"])
|
|
def save_step_options():
|
|
return ("", 204)
|
|
|
|
@app.post("/save-step")
|
|
def save_step():
|
|
uploaded_file = request.files.get("file")
|
|
if uploaded_file is None or uploaded_file.filename == "":
|
|
return jsonify({"message": "Missing STEP file."}), 400
|
|
|
|
raw_deleted_paths = request.form.get("deletedPaths", "[]")
|
|
try:
|
|
deleted_paths = load_deleted_paths(raw_deleted_paths)
|
|
except ValueError as err:
|
|
return jsonify({"message": str(err)}), 400
|
|
|
|
output_bytes, output_name = step_worker.trim_step_file(
|
|
uploaded_file.filename,
|
|
uploaded_file.read(),
|
|
deleted_paths,
|
|
)
|
|
return Response(
|
|
output_bytes,
|
|
mimetype="application/step",
|
|
headers={
|
|
"Content-Disposition": f'attachment; filename="{output_name}"'
|
|
},
|
|
)
|
|
|
|
return app
|
|
|
|
|
|
if __name__ == "__main__":
|
|
create_app().run(host="127.0.0.1", port=17890, debug=False)
|