mirror of
https://github.com/GNS3/gns3-server.git
synced 2025-06-17 06:48:18 +00:00
Complete type annotations for API endpoints.
This commit is contained in:
@ -51,7 +51,7 @@ responses = {404: {"model": schemas.ErrorMessage, "description": "Could not find
|
||||
router = APIRouter(responses=responses)
|
||||
|
||||
|
||||
def dep_project(project_id: UUID):
|
||||
def dep_project(project_id: UUID) -> Project:
|
||||
"""
|
||||
Dependency to retrieve a project.
|
||||
"""
|
||||
@ -64,7 +64,7 @@ CHUNK_SIZE = 1024 * 8 # 8KB
|
||||
|
||||
|
||||
@router.get("", response_model=List[schemas.Project], response_model_exclude_unset=True)
|
||||
def get_projects():
|
||||
def get_projects() -> List[schemas.Project]:
|
||||
"""
|
||||
Return all projects.
|
||||
"""
|
||||
@ -80,7 +80,7 @@ def get_projects():
|
||||
response_model_exclude_unset=True,
|
||||
responses={409: {"model": schemas.ErrorMessage, "description": "Could not create project"}},
|
||||
)
|
||||
async def create_project(project_data: schemas.ProjectCreate):
|
||||
async def create_project(project_data: schemas.ProjectCreate) -> schemas.Project:
|
||||
"""
|
||||
Create a new project.
|
||||
"""
|
||||
@ -91,7 +91,7 @@ async def create_project(project_data: schemas.ProjectCreate):
|
||||
|
||||
|
||||
@router.get("/{project_id}", response_model=schemas.Project)
|
||||
def get_project(project: Project = Depends(dep_project)):
|
||||
def get_project(project: Project = Depends(dep_project)) -> schemas.Project:
|
||||
"""
|
||||
Return a project.
|
||||
"""
|
||||
@ -100,7 +100,10 @@ def get_project(project: Project = Depends(dep_project)):
|
||||
|
||||
|
||||
@router.put("/{project_id}", response_model=schemas.Project, response_model_exclude_unset=True)
|
||||
async def update_project(project_data: schemas.ProjectUpdate, project: Project = Depends(dep_project)):
|
||||
async def update_project(
|
||||
project_data: schemas.ProjectUpdate,
|
||||
project: Project = Depends(dep_project)
|
||||
) -> schemas.Project:
|
||||
"""
|
||||
Update a project.
|
||||
"""
|
||||
@ -110,7 +113,7 @@ async def update_project(project_data: schemas.ProjectUpdate, project: Project =
|
||||
|
||||
|
||||
@router.delete("/{project_id}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def delete_project(project: Project = Depends(dep_project)):
|
||||
async def delete_project(project: Project = Depends(dep_project)) -> None:
|
||||
"""
|
||||
Delete a project.
|
||||
"""
|
||||
@ -121,7 +124,7 @@ async def delete_project(project: Project = Depends(dep_project)):
|
||||
|
||||
|
||||
@router.get("/{project_id}/stats")
|
||||
def get_project_stats(project: Project = Depends(dep_project)):
|
||||
def get_project_stats(project: Project = Depends(dep_project)) -> dict:
|
||||
"""
|
||||
Return a project statistics.
|
||||
"""
|
||||
@ -134,7 +137,7 @@ def get_project_stats(project: Project = Depends(dep_project)):
|
||||
status_code=status.HTTP_204_NO_CONTENT,
|
||||
responses={**responses, 409: {"model": schemas.ErrorMessage, "description": "Could not close project"}},
|
||||
)
|
||||
async def close_project(project: Project = Depends(dep_project)):
|
||||
async def close_project(project: Project = Depends(dep_project)) -> None:
|
||||
"""
|
||||
Close a project.
|
||||
"""
|
||||
@ -148,7 +151,7 @@ async def close_project(project: Project = Depends(dep_project)):
|
||||
response_model=schemas.Project,
|
||||
responses={**responses, 409: {"model": schemas.ErrorMessage, "description": "Could not open project"}},
|
||||
)
|
||||
async def open_project(project: Project = Depends(dep_project)):
|
||||
async def open_project(project: Project = Depends(dep_project)) -> schemas.Project:
|
||||
"""
|
||||
Open a project.
|
||||
"""
|
||||
@ -163,7 +166,7 @@ async def open_project(project: Project = Depends(dep_project)):
|
||||
response_model=schemas.Project,
|
||||
responses={**responses, 409: {"model": schemas.ErrorMessage, "description": "Could not load project"}},
|
||||
)
|
||||
async def load_project(path: str = Body(..., embed=True)):
|
||||
async def load_project(path: str = Body(..., embed=True)) -> schemas.Project:
|
||||
"""
|
||||
Load a project (local server only).
|
||||
"""
|
||||
@ -180,7 +183,7 @@ async def load_project(path: str = Body(..., embed=True)):
|
||||
|
||||
|
||||
@router.get("/{project_id}/notifications")
|
||||
async def notification(project_id: UUID):
|
||||
async def notification(project_id: UUID) -> StreamingResponse:
|
||||
"""
|
||||
Receive project notifications about the controller from HTTP stream.
|
||||
"""
|
||||
@ -211,7 +214,7 @@ async def notification(project_id: UUID):
|
||||
|
||||
|
||||
@router.websocket("/{project_id}/notifications/ws")
|
||||
async def notification_ws(project_id: UUID, websocket: WebSocket):
|
||||
async def notification_ws(project_id: UUID, websocket: WebSocket) -> None:
|
||||
"""
|
||||
Receive project notifications about the controller from WebSocket.
|
||||
"""
|
||||
@ -248,7 +251,7 @@ async def export_project(
|
||||
include_images: bool = False,
|
||||
reset_mac_addresses: bool = False,
|
||||
compression: str = "zip",
|
||||
):
|
||||
) -> StreamingResponse:
|
||||
"""
|
||||
Export a project as a portable archive.
|
||||
"""
|
||||
@ -294,7 +297,12 @@ async def export_project(
|
||||
|
||||
|
||||
@router.post("/{project_id}/import", status_code=status.HTTP_201_CREATED, response_model=schemas.Project)
|
||||
async def import_project(project_id: UUID, request: Request, path: Optional[Path] = None, name: Optional[str] = None):
|
||||
async def import_project(
|
||||
project_id: UUID,
|
||||
request: Request,
|
||||
path: Optional[Path] = None,
|
||||
name: Optional[str] = None
|
||||
) -> schemas.Project:
|
||||
"""
|
||||
Import a project from a portable archive.
|
||||
"""
|
||||
@ -332,7 +340,10 @@ async def import_project(project_id: UUID, request: Request, path: Optional[Path
|
||||
response_model=schemas.Project,
|
||||
responses={**responses, 409: {"model": schemas.ErrorMessage, "description": "Could not duplicate project"}},
|
||||
)
|
||||
async def duplicate_project(project_data: schemas.ProjectDuplicate, project: Project = Depends(dep_project)):
|
||||
async def duplicate_project(
|
||||
project_data: schemas.ProjectDuplicate,
|
||||
project: Project = Depends(dep_project)
|
||||
) -> schemas.Project:
|
||||
"""
|
||||
Duplicate a project.
|
||||
"""
|
||||
@ -352,7 +363,7 @@ async def duplicate_project(project_data: schemas.ProjectDuplicate, project: Pro
|
||||
|
||||
|
||||
@router.get("/{project_id}/files/{file_path:path}")
|
||||
async def get_file(file_path: str, project: Project = Depends(dep_project)):
|
||||
async def get_file(file_path: str, project: Project = Depends(dep_project)) -> FileResponse:
|
||||
"""
|
||||
Return a file from a project.
|
||||
"""
|
||||
@ -371,7 +382,7 @@ async def get_file(file_path: str, project: Project = Depends(dep_project)):
|
||||
|
||||
|
||||
@router.post("/{project_id}/files/{file_path:path}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def write_file(file_path: str, request: Request, project: Project = Depends(dep_project)):
|
||||
async def write_file(file_path: str, request: Request, project: Project = Depends(dep_project)) -> None:
|
||||
"""
|
||||
Write a file from a project.
|
||||
"""
|
||||
|
Reference in New Issue
Block a user