flask_tools_api.py•1.88 kB
"""
Flask-based API for FreeCAD AI tools endpoint (migration template)
"""
from dataclasses import asdict, dataclass
from typing import Any, Dict
from flask import Blueprint, Flask, abort, jsonify, request
# Example dataclass for request/response (replace with real logic as needed)
@dataclass
class ToolRequest:
parameters: Dict[str, Any]
@dataclass
class ToolResponse:
tool_id: str
status: str
result: Dict[str, Any]
tools_bp = Blueprint("tools", __name__, url_prefix="/tools")
# Assume server.tools['primitives'] is available in the global context or via dependency injection
def get_tool_provider():
# Replace with actual tool provider lookup
from freecad_ai_workbench import MCPServer
server = MCPServer()
return server.tools.get("primitives")
@tools_bp.route("/primitives.<tool_id>", methods=["POST"])
def execute_primitive_tool(tool_id):
if not request.is_json:
abort(400, description="Request must be JSON")
data = request.get_json()
parameters = data.get("parameters", {})
tool_provider = get_tool_provider()
if not tool_provider:
abort(404, description="Primitive tool provider not found")
try:
# Replace with actual async/sync call as needed
result = tool_provider.execute_tool(tool_id, parameters)
response = ToolResponse(tool_id=tool_id, status="success", result=result)
return jsonify(asdict(response)), 200
except Exception as e:
abort(500, description=f"Error executing primitive tool: {str(e)}")
from flask_events_api import events_bp
from flask_resources_api import resources_bp
from flask_tools_api import tools_bp
# Flask app setup
app = Flask(__name__)
app.register_blueprint(tools_bp)
app.register_blueprint(resources_bp)
app.register_blueprint(events_bp)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)