62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
from fastapi import APIRouter, HTTPException, Query
|
|
from pydantic import BaseModel
|
|
from app.api.routes.compile import arduino_cli
|
|
|
|
router = APIRouter()
|
|
|
|
class InstallLibraryRequest(BaseModel):
|
|
name: str
|
|
|
|
class SearchResponse(BaseModel):
|
|
success: bool
|
|
libraries: list = []
|
|
error: str | None = None
|
|
|
|
class InstallResponse(BaseModel):
|
|
success: bool
|
|
stdout: str | None = None
|
|
error: str | None = None
|
|
|
|
@router.get("/search", response_model=SearchResponse)
|
|
async def search_libraries(q: str = Query(..., description="Search query for library")):
|
|
"""
|
|
Search for Arduino libraries by name or topic.
|
|
"""
|
|
try:
|
|
result = await arduino_cli.search_libraries(q)
|
|
if not result["success"]:
|
|
raise HTTPException(status_code=500, detail=result.get("error", "Failed to search libraries"))
|
|
return SearchResponse(success=True, libraries=result.get("libraries", []))
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@router.post("/install", response_model=InstallResponse)
|
|
async def install_library(request: InstallLibraryRequest):
|
|
"""
|
|
Install a specific Arduino library by name.
|
|
"""
|
|
try:
|
|
result = await arduino_cli.install_library(request.name)
|
|
if not result["success"]:
|
|
return InstallResponse(success=False, error=result.get("error"), stdout=result.get("stdout"))
|
|
return InstallResponse(success=True, stdout=result.get("stdout"))
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@router.get("/list", response_model=SearchResponse)
|
|
async def list_libraries():
|
|
"""
|
|
List all installed Arduino libraries.
|
|
"""
|
|
try:
|
|
result = await arduino_cli.list_installed_libraries()
|
|
if not result["success"]:
|
|
raise HTTPException(status_code=500, detail=result.get("error", "Failed to list libraries"))
|
|
return SearchResponse(success=True, libraries=result.get("libraries", []))
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|