Files
MemoryBear/sandbox/app/controllers/sandbox_controller.py

58 lines
1.7 KiB
Python

"""Sandbox API endpoints"""
from fastapi import APIRouter, Depends
from app.middleware.auth import verify_api_key
from app.middleware.concurrency import concurrency_guard
from app.models import (
RunCodeRequest,
ApiResponse,
UpdateDependencyRequest,
error_response
)
from app.services.nodejs_service import run_nodejs_code
from app.services.python_service import (
run_python_code,
list_python_dependencies,
update_python_dependencies
)
router = APIRouter(
prefix="/v1/sandbox",
tags=["sandbox"],
dependencies=[Depends(verify_api_key)]
)
@router.post(
"/run",
response_model=ApiResponse,
dependencies=[Depends(concurrency_guard)]
)
async def run_code(request: RunCodeRequest):
"""Execute code in sandbox"""
if request.language == "python3":
return await run_python_code(request.code, request.preload, request.options)
elif request.language == "nodejs":
return await run_nodejs_code(request.code, request.preload, request.options)
else:
return error_response(-400, "unsupported language")
@router.get("/dependencies", response_model=ApiResponse)
async def get_dependencies(language: str):
"""Get installed dependencies"""
if language == "python3":
return await list_python_dependencies()
else:
return error_response(-400, "unsupported language")
@router.post("/dependencies/update", response_model=ApiResponse)
async def update_dependencies(request: UpdateDependencyRequest):
"""Update dependencies"""
if request.language == "python3":
return await update_python_dependencies()
else:
return error_response(-400, "unsupported language")