Добавлен workspace API для файлового менеджера
Этот коммит содержится в:
@@ -0,0 +1,62 @@
|
|||||||
|
from fastapi import APIRouter, HTTPException
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from backend.file_workspace import (
|
||||||
|
WorkspaceSecurityError,
|
||||||
|
build_tree,
|
||||||
|
read_file,
|
||||||
|
save_file,
|
||||||
|
)
|
||||||
|
|
||||||
|
router = APIRouter(prefix='/api/files', tags=['workspace'])
|
||||||
|
|
||||||
|
|
||||||
|
class FilePathRequest(BaseModel):
|
||||||
|
path: str
|
||||||
|
|
||||||
|
|
||||||
|
class SaveFileRequest(BaseModel):
|
||||||
|
path: str
|
||||||
|
content: str
|
||||||
|
|
||||||
|
|
||||||
|
@router.post('/tree')
|
||||||
|
async def workspace_tree(payload: FilePathRequest):
|
||||||
|
try:
|
||||||
|
tree = build_tree(payload.path)
|
||||||
|
except WorkspaceSecurityError as exc:
|
||||||
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
||||||
|
except Exception as exc:
|
||||||
|
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||||
|
|
||||||
|
return {
|
||||||
|
'success': True,
|
||||||
|
'tree': tree,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@router.post('/read')
|
||||||
|
async def workspace_read(payload: FilePathRequest):
|
||||||
|
try:
|
||||||
|
content = read_file(payload.path)
|
||||||
|
except WorkspaceSecurityError as exc:
|
||||||
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
||||||
|
except Exception as exc:
|
||||||
|
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||||
|
|
||||||
|
return {
|
||||||
|
'success': True,
|
||||||
|
'content': content,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@router.post('/save')
|
||||||
|
async def workspace_save(payload: SaveFileRequest):
|
||||||
|
try:
|
||||||
|
result = save_file(payload.path, payload.content)
|
||||||
|
except WorkspaceSecurityError as exc:
|
||||||
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
||||||
|
except Exception as exc:
|
||||||
|
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||||
|
|
||||||
|
return result
|
||||||
Ссылка в новой задаче
Block a user