diff --git a/gns3server/api/routes/compute/atm_switch_nodes.py b/gns3server/api/routes/compute/atm_switch_nodes.py index f7482ab9..0b73b1b3 100644 --- a/gns3server/api/routes/compute/atm_switch_nodes.py +++ b/gns3server/api/routes/compute/atm_switch_nodes.py @@ -30,12 +30,12 @@ from gns3server import schemas from gns3server.compute.dynamips import Dynamips from gns3server.compute.dynamips.nodes.atm_switch import ATMSwitch -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or ATM switch node"} } +router = APIRouter(responses=responses) + async def dep_node(project_id: UUID, node_id: UUID): """ @@ -68,8 +68,7 @@ async def create_atm_switch(project_id: UUID, node_data: schemas.ATMSwitchCreate @router.get("/{node_id}", - response_model=schemas.ATMSwitch, - responses=responses) + response_model=schemas.ATMSwitch) def get_atm_switch(node: ATMSwitch = Depends(dep_node)): """ Return an ATM switch node. @@ -80,8 +79,7 @@ def get_atm_switch(node: ATMSwitch = Depends(dep_node)): @router.post("/{node_id}/duplicate", response_model=schemas.ATMSwitch, - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_atm_switch(destination_node_id: UUID = Body(..., embed=True), node: ATMSwitch = Depends(dep_node)): """ Duplicate an ATM switch node. @@ -92,8 +90,7 @@ async def duplicate_atm_switch(destination_node_id: UUID = Body(..., embed=True) @router.put("/{node_id}", - response_model=schemas.ATMSwitch, - responses=responses) + response_model=schemas.ATMSwitch) async def update_atm_switch(node_data: schemas.ATMSwitchUpdate, node: ATMSwitch = Depends(dep_node)): """ Update an ATM switch node. @@ -109,8 +106,7 @@ async def update_atm_switch(node_data: schemas.ATMSwitchUpdate, node: ATMSwitch @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_atm_switch_node(node: ATMSwitch = Depends(dep_node)): """ Delete an ATM switch node. @@ -120,8 +116,7 @@ async def delete_atm_switch_node(node: ATMSwitch = Depends(dep_node)): @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def start_atm_switch(node: ATMSwitch = Depends(dep_node)): """ Start an ATM switch node. @@ -132,8 +127,7 @@ def start_atm_switch(node: ATMSwitch = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def stop_atm_switch(node: ATMSwitch = Depends(dep_node)): """ Stop an ATM switch node. @@ -144,8 +138,7 @@ def stop_atm_switch(node: ATMSwitch = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def suspend_atm_switch(node: ATMSwitch = Depends(dep_node)): """ Suspend an ATM switch node. @@ -157,8 +150,7 @@ def suspend_atm_switch(node: ATMSwitch = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -174,8 +166,7 @@ async def create_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_nio(adapter_number: int, port_number: int, node: ATMSwitch = Depends(dep_node)): """ Remove a NIO (Network Input/Output) from the node. @@ -186,8 +177,7 @@ async def delete_nio(adapter_number: int, port_number: int, node: ATMSwitch = De await nio.delete() -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -203,8 +193,7 @@ async def start_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop_capture", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_capture(adapter_number: int, port_number: int, node: ATMSwitch = Depends(dep_node)): """ Stop a packet capture on the node. @@ -214,8 +203,7 @@ async def stop_capture(adapter_number: int, port_number: int, node: ATMSwitch = await node.stop_capture(port_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: ATMSwitch = Depends(dep_node)): """ Stream the pcap capture file. diff --git a/gns3server/api/routes/compute/cloud_nodes.py b/gns3server/api/routes/compute/cloud_nodes.py index c7e637d5..e36cc54a 100644 --- a/gns3server/api/routes/compute/cloud_nodes.py +++ b/gns3server/api/routes/compute/cloud_nodes.py @@ -31,12 +31,12 @@ from gns3server import schemas from gns3server.compute.builtin import Builtin from gns3server.compute.builtin.nodes.cloud import Cloud -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or cloud node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -75,8 +75,7 @@ async def create_cloud(project_id: UUID, node_data: schemas.CloudCreate): @router.get("/{node_id}", - response_model=schemas.Cloud, - responses=responses) + response_model=schemas.Cloud) def get_cloud(node: Cloud = Depends(dep_node)): """ Return a cloud node. @@ -86,8 +85,7 @@ def get_cloud(node: Cloud = Depends(dep_node)): @router.put("/{node_id}", - response_model=schemas.Cloud, - responses=responses) + response_model=schemas.Cloud) def update_cloud(node_data: schemas.CloudUpdate, node: Cloud = Depends(dep_node)): """ Update a cloud node. @@ -102,8 +100,7 @@ def update_cloud(node_data: schemas.CloudUpdate, node: Cloud = Depends(dep_node) @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_cloud(node: Cloud = Depends(dep_node)): """ Delete a cloud node. @@ -113,8 +110,7 @@ async def delete_cloud(node: Cloud = Depends(dep_node)): @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_cloud(node: Cloud = Depends(dep_node)): """ Start a cloud node. @@ -124,8 +120,7 @@ async def start_cloud(node: Cloud = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_cloud(node: Cloud = Depends(dep_node)): """ Stop a cloud node. @@ -136,8 +131,7 @@ async def stop_cloud(node: Cloud = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_cloud(node: Cloud = Depends(dep_node)): """ Suspend a cloud node. @@ -149,8 +143,7 @@ async def suspend_cloud(node: Cloud = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], - responses=responses) + response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO]) async def create_cloud_nio(adapter_number: int, port_number: int, nio_data: Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], @@ -167,8 +160,7 @@ async def create_cloud_nio(adapter_number: int, @router.put("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], - responses=responses) + response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO]) async def update_cloud_nio(adapter_number: int, port_number: int, nio_data: Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], @@ -186,8 +178,7 @@ async def update_cloud_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_cloud_nio(adapter_number: int, port_number: int, node: Cloud = Depends(dep_node)): """ Remove a NIO (Network Input/Output) from the node. @@ -197,8 +188,7 @@ async def delete_cloud_nio(adapter_number: int, port_number: int, node: Cloud = await node.remove_nio(port_number) -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_cloud_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -214,8 +204,7 @@ async def start_cloud_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_cloud_capture(adapter_number: int, port_number: int, node: Cloud = Depends(dep_node)): """ Stop a packet capture on the node. @@ -225,8 +214,7 @@ async def stop_cloud_capture(adapter_number: int, port_number: int, node: Cloud await node.stop_capture(port_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/pcap", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/pcap") async def stream_pcap_file(adapter_number: int, port_number: int, node: Cloud = Depends(dep_node)): """ Stream the pcap capture file. diff --git a/gns3server/api/routes/compute/docker_nodes.py b/gns3server/api/routes/compute/docker_nodes.py index 6c6021bf..1284d4ed 100644 --- a/gns3server/api/routes/compute/docker_nodes.py +++ b/gns3server/api/routes/compute/docker_nodes.py @@ -30,12 +30,12 @@ from gns3server import schemas from gns3server.compute.docker import Docker from gns3server.compute.docker.docker_vm import DockerVM -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or Docker node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -85,8 +85,7 @@ async def create_docker_node(project_id: UUID, node_data: schemas.DockerCreate): @router.get("/{node_id}", - response_model=schemas.Docker, - responses=responses) + response_model=schemas.Docker) def get_docker_node(node: DockerVM = Depends(dep_node)): """ Return a Docker node. @@ -96,8 +95,7 @@ def get_docker_node(node: DockerVM = Depends(dep_node)): @router.put("/{node_id}", - response_model=schemas.Docker, - responses=responses) + response_model=schemas.Docker) async def update_docker_node(node_data: schemas.DockerUpdate, node: DockerVM = Depends(dep_node)): """ Update a Docker node. @@ -124,8 +122,7 @@ async def update_docker_node(node_data: schemas.DockerUpdate, node: DockerVM = D @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_docker_node(node: DockerVM = Depends(dep_node)): """ Start a Docker node. @@ -135,8 +132,7 @@ async def start_docker_node(node: DockerVM = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_docker_node(node: DockerVM = Depends(dep_node)): """ Stop a Docker node. @@ -146,8 +142,7 @@ async def stop_docker_node(node: DockerVM = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_docker_node(node: DockerVM = Depends(dep_node)): """ Suspend a Docker node. @@ -157,8 +152,7 @@ async def suspend_docker_node(node: DockerVM = Depends(dep_node)): @router.post("/{node_id}/reload", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reload_docker_node(node: DockerVM = Depends(dep_node)): """ Reload a Docker node. @@ -168,8 +162,7 @@ async def reload_docker_node(node: DockerVM = Depends(dep_node)): @router.post("/{node_id}/pause", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def pause_docker_node(node: DockerVM = Depends(dep_node)): """ Pause a Docker node. @@ -179,8 +172,7 @@ async def pause_docker_node(node: DockerVM = Depends(dep_node)): @router.post("/{node_id}/unpause", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def unpause_docker_node(node: DockerVM = Depends(dep_node)): """ Unpause a Docker node. @@ -190,8 +182,7 @@ async def unpause_docker_node(node: DockerVM = Depends(dep_node)): @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_docker_node(node: DockerVM = Depends(dep_node)): """ Delete a Docker node. @@ -202,8 +193,7 @@ async def delete_docker_node(node: DockerVM = Depends(dep_node)): @router.post("/{node_id}/duplicate", response_model=schemas.Docker, - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_docker_node(destination_node_id: UUID = Body(..., embed=True), node: DockerVM = Depends(dep_node)): """ Duplicate a Docker node. @@ -215,8 +205,7 @@ async def duplicate_docker_node(destination_node_id: UUID = Body(..., embed=True @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_docker_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -233,8 +222,7 @@ async def create_docker_node_nio(adapter_number: int, @router.put("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def update_docker_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, node: DockerVM = Depends(dep_node)): @@ -251,8 +239,7 @@ async def update_docker_node_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_docker_node_nio(adapter_number: int, port_number: int, node: DockerVM = Depends(dep_node)): """ Delete a NIO (Network Input/Output) from the node. @@ -262,8 +249,7 @@ async def delete_docker_node_nio(adapter_number: int, port_number: int, node: Do await node.adapter_remove_nio_binding(adapter_number) -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_docker_node_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -279,8 +265,7 @@ async def start_docker_node_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_docker_node_capture(adapter_number: int, port_number: int, node: DockerVM = Depends(dep_node)): """ Stop a packet capture on the node. @@ -290,8 +275,7 @@ async def stop_docker_node_capture(adapter_number: int, port_number: int, node: await node.stop_capture(adapter_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: DockerVM = Depends(dep_node)): """ Stream the pcap capture file. @@ -313,8 +297,7 @@ async def console_ws(websocket: WebSocket, node: DockerVM = Depends(dep_node)): @router.post("/{node_id}/console/reset", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reset_console(node: DockerVM = Depends(dep_node)): await node.reset_console() diff --git a/gns3server/api/routes/compute/dynamips_nodes.py b/gns3server/api/routes/compute/dynamips_nodes.py index 287cbda4..3ef77a68 100644 --- a/gns3server/api/routes/compute/dynamips_nodes.py +++ b/gns3server/api/routes/compute/dynamips_nodes.py @@ -33,12 +33,14 @@ from gns3server.compute.dynamips.nodes.router import Router from gns3server.compute.dynamips.dynamips_error import DynamipsError from gns3server import schemas -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or Dynamips node"} } +router = APIRouter(responses=responses) + + + DEFAULT_CHASSIS = { "c1700": "1720", "c2600": "2610", @@ -87,8 +89,7 @@ async def create_router(project_id: UUID, node_data: schemas.DynamipsCreate): @router.get("/{node_id}", - response_model=schemas.Dynamips, - responses=responses) + response_model=schemas.Dynamips) def get_router(node: Router = Depends(dep_node)): """ Return Dynamips router. @@ -98,8 +99,7 @@ def get_router(node: Router = Depends(dep_node)): @router.put("/{node_id}", - response_model=schemas.Dynamips, - responses=responses) + response_model=schemas.Dynamips) async def update_router(node_data: schemas.DynamipsUpdate, node: Router = Depends(dep_node)): """ Update a Dynamips router. @@ -111,8 +111,7 @@ async def update_router(node_data: schemas.DynamipsUpdate, node: Router = Depend @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_router(node: Router = Depends(dep_node)): """ Delete a Dynamips router. @@ -122,8 +121,7 @@ async def delete_router(node: Router = Depends(dep_node)): @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_router(node: Router = Depends(dep_node)): """ Start a Dynamips router. @@ -137,8 +135,7 @@ async def start_router(node: Router = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_router(node: Router = Depends(dep_node)): """ Stop a Dynamips router. @@ -148,16 +145,14 @@ async def stop_router(node: Router = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_router(node: Router = Depends(dep_node)): await node.suspend() @router.post("/{node_id}/resume", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def resume_router(node: Router = Depends(dep_node)): """ Resume a suspended Dynamips router. @@ -167,8 +162,7 @@ async def resume_router(node: Router = Depends(dep_node)): @router.post("/{node_id}/reload", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reload_router(node: Router = Depends(dep_node)): """ Reload a suspended Dynamips router. @@ -179,8 +173,7 @@ async def reload_router(node: Router = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, node: Router = Depends(dep_node)): """ Add a NIO (Network Input/Output) to the node. @@ -193,8 +186,7 @@ async def create_nio(adapter_number: int, port_number: int, nio_data: schemas.UD @router.put("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def update_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, node: Router = Depends(dep_node)): """ Update a NIO (Network Input/Output) on the node. @@ -208,8 +200,7 @@ async def update_nio(adapter_number: int, port_number: int, nio_data: schemas.UD @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_nio(adapter_number: int, port_number: int, node: Router = Depends(dep_node)): """ Delete a NIO (Network Input/Output) from the node. @@ -219,8 +210,7 @@ async def delete_nio(adapter_number: int, port_number: int, node: Router = Depen await nio.delete() -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -243,8 +233,7 @@ async def start_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_capture(adapter_number: int, port_number: int, node: Router = Depends(dep_node)): """ Stop a packet capture on the node. @@ -253,8 +242,7 @@ async def stop_capture(adapter_number: int, port_number: int, node: Router = Dep await node.stop_capture(adapter_number, port_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: Router = Depends(dep_node)): """ Stream the pcap capture file. @@ -265,8 +253,7 @@ async def stream_pcap_file(adapter_number: int, port_number: int, node: Router = return StreamingResponse(stream, media_type="application/vnd.tcpdump.pcap") -@router.get("/{node_id}/idlepc_proposals", - responses=responses) +@router.get("/{node_id}/idlepc_proposals") async def get_idlepcs(node: Router = Depends(dep_node)) -> List[str]: """ Retrieve Dynamips idle-pc proposals @@ -276,8 +263,7 @@ async def get_idlepcs(node: Router = Depends(dep_node)) -> List[str]: return await node.get_idle_pc_prop() -@router.get("/{node_id}/auto_idlepc", - responses=responses) +@router.get("/{node_id}/auto_idlepc") async def get_auto_idlepc(node: Router = Depends(dep_node)) -> dict: """ Get an automatically guessed best idle-pc value. @@ -288,8 +274,7 @@ async def get_auto_idlepc(node: Router = Depends(dep_node)) -> dict: @router.post("/{node_id}/duplicate", - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_router(destination_node_id: UUID, node: Router = Depends(dep_node)): """ Duplicate a router. @@ -309,8 +294,7 @@ async def console_ws(websocket: WebSocket, node: Router = Depends(dep_node)): @router.post("/{node_id}/console/reset", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reset_console(node: Router = Depends(dep_node)): await node.reset_console() diff --git a/gns3server/api/routes/compute/ethernet_hub_nodes.py b/gns3server/api/routes/compute/ethernet_hub_nodes.py index 64aca56d..23075741 100644 --- a/gns3server/api/routes/compute/ethernet_hub_nodes.py +++ b/gns3server/api/routes/compute/ethernet_hub_nodes.py @@ -30,12 +30,12 @@ from gns3server.compute.dynamips import Dynamips from gns3server.compute.dynamips.nodes.ethernet_hub import EthernetHub from gns3server import schemas -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or Ethernet hub node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -68,8 +68,7 @@ async def create_ethernet_hub(project_id: UUID, node_data: schemas.EthernetHubCr @router.get("/{node_id}", - response_model=schemas.EthernetHub, - responses=responses) + response_model=schemas.EthernetHub) def get_ethernet_hub(node: EthernetHub = Depends(dep_node)): """ Return an Ethernet hub. @@ -80,8 +79,7 @@ def get_ethernet_hub(node: EthernetHub = Depends(dep_node)): @router.post("/{node_id}/duplicate", response_model=schemas.EthernetHub, - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_ethernet_hub(destination_node_id: UUID = Body(..., embed=True), node: EthernetHub = Depends(dep_node)): """ @@ -93,8 +91,7 @@ async def duplicate_ethernet_hub(destination_node_id: UUID = Body(..., embed=Tru @router.put("/{node_id}", - response_model=schemas.EthernetHub, - responses=responses) + response_model=schemas.EthernetHub) async def update_ethernet_hub(node_data: schemas.EthernetHubUpdate, node: EthernetHub = Depends(dep_node)): """ Update an Ethernet hub. @@ -110,8 +107,7 @@ async def update_ethernet_hub(node_data: schemas.EthernetHubUpdate, node: Ethern @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_ethernet_hub(node: EthernetHub = Depends(dep_node)): """ Delete an Ethernet hub. @@ -121,8 +117,7 @@ async def delete_ethernet_hub(node: EthernetHub = Depends(dep_node)): @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def start_ethernet_hub(node: EthernetHub = Depends(dep_node)): """ Start an Ethernet hub. @@ -133,8 +128,7 @@ def start_ethernet_hub(node: EthernetHub = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def stop_ethernet_hub(node: EthernetHub = Depends(dep_node)): """ Stop an Ethernet hub. @@ -145,8 +139,7 @@ def stop_ethernet_hub(node: EthernetHub = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def suspend_ethernet_hub(node: EthernetHub = Depends(dep_node)): """ Suspend an Ethernet hub. @@ -158,8 +151,7 @@ def suspend_ethernet_hub(node: EthernetHub = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -175,8 +167,7 @@ async def create_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_nio(adapter_number: int, port_number: int, node: EthernetHub = Depends(dep_node)): """ Delete a NIO (Network Input/Output) from the node. @@ -187,8 +178,7 @@ async def delete_nio(adapter_number: int, port_number: int, node: EthernetHub = await nio.delete() -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -204,8 +194,7 @@ async def start_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_capture(adapter_number: int, port_number: int, node: EthernetHub = Depends(dep_node)): """ Stop a packet capture on the node. @@ -215,8 +204,7 @@ async def stop_capture(adapter_number: int, port_number: int, node: EthernetHub await node.stop_capture(port_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: EthernetHub = Depends(dep_node)): """ Stream the pcap capture file. diff --git a/gns3server/api/routes/compute/ethernet_switch_nodes.py b/gns3server/api/routes/compute/ethernet_switch_nodes.py index 60c19851..2021f6fb 100644 --- a/gns3server/api/routes/compute/ethernet_switch_nodes.py +++ b/gns3server/api/routes/compute/ethernet_switch_nodes.py @@ -30,12 +30,12 @@ from gns3server.compute.dynamips import Dynamips from gns3server.compute.dynamips.nodes.ethernet_switch import EthernetSwitch from gns3server import schemas -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or Ethernet switch node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -71,8 +71,7 @@ async def create_ethernet_switch(project_id: UUID, node_data: schemas.EthernetSw @router.get("/{node_id}", - response_model=schemas.EthernetSwitch, - responses=responses) + response_model=schemas.EthernetSwitch) def get_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): return node.__json__() @@ -80,8 +79,7 @@ def get_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): @router.post("/{node_id}/duplicate", response_model=schemas.EthernetSwitch, - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_ethernet_switch(destination_node_id: UUID = Body(..., embed=True), node: EthernetSwitch = Depends(dep_node)): """ @@ -93,8 +91,7 @@ async def duplicate_ethernet_switch(destination_node_id: UUID = Body(..., embed= @router.put("/{node_id}", - response_model=schemas.EthernetSwitch, - responses=responses) + response_model=schemas.EthernetSwitch) async def update_ethernet_switch(node_data: schemas.EthernetSwitchUpdate, node: EthernetSwitch = Depends(dep_node)): """ Update an Ethernet switch. @@ -113,8 +110,7 @@ async def update_ethernet_switch(node_data: schemas.EthernetSwitchUpdate, node: @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): """ Delete an Ethernet switch. @@ -124,8 +120,7 @@ async def delete_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def start_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): """ Start an Ethernet switch. @@ -136,8 +131,7 @@ def start_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def stop_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): """ Stop an Ethernet switch. @@ -148,8 +142,7 @@ def stop_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def suspend_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): """ Suspend an Ethernet switch. @@ -161,8 +154,7 @@ def suspend_ethernet_switch(node: EthernetSwitch = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -174,8 +166,7 @@ async def create_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_nio(adapter_number: int, port_number: int, node: EthernetSwitch = Depends(dep_node)): """ Delete a NIO (Network Input/Output) from the node. @@ -186,8 +177,7 @@ async def delete_nio(adapter_number: int, port_number: int, node: EthernetSwitch await nio.delete() -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -203,8 +193,7 @@ async def start_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_capture(adapter_number: int,port_number: int, node: EthernetSwitch = Depends(dep_node)): """ Stop a packet capture on the node. @@ -214,8 +203,7 @@ async def stop_capture(adapter_number: int,port_number: int, node: EthernetSwitc await node.stop_capture(port_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: EthernetSwitch = Depends(dep_node)): """ Stream the pcap capture file. diff --git a/gns3server/api/routes/compute/frame_relay_switch_nodes.py b/gns3server/api/routes/compute/frame_relay_switch_nodes.py index 727ad8a4..da32e668 100644 --- a/gns3server/api/routes/compute/frame_relay_switch_nodes.py +++ b/gns3server/api/routes/compute/frame_relay_switch_nodes.py @@ -30,12 +30,12 @@ from gns3server import schemas from gns3server.compute.dynamips import Dynamips from gns3server.compute.dynamips.nodes.frame_relay_switch import FrameRelaySwitch -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or Frame Relay switch node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -68,8 +68,7 @@ async def create_frame_relay_switch(project_id: UUID, node_data: schemas.FrameRe @router.get("/{node_id}", - response_model=schemas.FrameRelaySwitch, - responses=responses) + response_model=schemas.FrameRelaySwitch) def get_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): """ Return a Frame Relay switch node. @@ -80,8 +79,7 @@ def get_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): @router.post("/{node_id}/duplicate", response_model=schemas.FrameRelaySwitch, - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_frame_relay_switch(destination_node_id: UUID = Body(..., embed=True), node: FrameRelaySwitch = Depends(dep_node)): """ @@ -93,8 +91,7 @@ async def duplicate_frame_relay_switch(destination_node_id: UUID = Body(..., emb @router.put("/{node_id}", - response_model=schemas.FrameRelaySwitch, - responses=responses) + response_model=schemas.FrameRelaySwitch) async def update_frame_relay_switch(node_data: schemas.FrameRelaySwitchUpdate, node: FrameRelaySwitch = Depends(dep_node)): """ @@ -111,8 +108,7 @@ async def update_frame_relay_switch(node_data: schemas.FrameRelaySwitchUpdate, @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): """ Delete a Frame Relay switch node. @@ -122,8 +118,7 @@ async def delete_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def start_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): """ Start a Frame Relay switch node. @@ -134,8 +129,7 @@ def start_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def stop_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): """ Stop a Frame Relay switch node. @@ -146,8 +140,7 @@ def stop_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def suspend_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): """ Suspend a Frame Relay switch node. @@ -159,8 +152,7 @@ def suspend_frame_relay_switch(node: FrameRelaySwitch = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -176,8 +168,7 @@ async def create_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_nio(adapter_number: int, port_number: int, node: FrameRelaySwitch = Depends(dep_node)): """ Remove a NIO (Network Input/Output) from the node. @@ -188,8 +179,7 @@ async def delete_nio(adapter_number: int, port_number: int, node: FrameRelaySwit await nio.delete() -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -205,8 +195,7 @@ async def start_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_capture(adapter_number: int, port_number: int, node: FrameRelaySwitch = Depends(dep_node)): """ Stop a packet capture on the node. @@ -216,8 +205,7 @@ async def stop_capture(adapter_number: int, port_number: int, node: FrameRelaySw await node.stop_capture(port_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: FrameRelaySwitch = Depends(dep_node)): """ Stream the pcap capture file. diff --git a/gns3server/api/routes/compute/iou_nodes.py b/gns3server/api/routes/compute/iou_nodes.py index 2d576834..98fdb897 100644 --- a/gns3server/api/routes/compute/iou_nodes.py +++ b/gns3server/api/routes/compute/iou_nodes.py @@ -31,12 +31,12 @@ from gns3server import schemas from gns3server.compute.iou import IOU from gns3server.compute.iou.iou_vm import IOUVM -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or IOU node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -82,8 +82,7 @@ async def create_iou_node(project_id: UUID, node_data: schemas.IOUCreate): @router.get("/{node_id}", - response_model=schemas.IOU, - responses=responses) + response_model=schemas.IOU) def get_iou_node(node: IOUVM = Depends(dep_node)): """ Return an IOU node. @@ -93,8 +92,7 @@ def get_iou_node(node: IOUVM = Depends(dep_node)): @router.put("/{node_id}", - response_model=schemas.IOU, - responses=responses) + response_model=schemas.IOU) async def update_iou_node(node_data: schemas.IOUUpdate, node: IOUVM = Depends(dep_node)): """ Update an IOU node. @@ -116,8 +114,7 @@ async def update_iou_node(node_data: schemas.IOUUpdate, node: IOUVM = Depends(de @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_iou_node(node: IOUVM = Depends(dep_node)): """ Delete an IOU node. @@ -128,8 +125,7 @@ async def delete_iou_node(node: IOUVM = Depends(dep_node)): @router.post("/{node_id}/duplicate", response_model=schemas.IOU, - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_iou_node(destination_node_id: UUID = Body(..., embed=True), node: IOUVM = Depends(dep_node)): """ Duplicate an IOU node. @@ -140,8 +136,7 @@ async def duplicate_iou_node(destination_node_id: UUID = Body(..., embed=True), @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_iou_node(start_data: schemas.IOUStart, node: IOUVM = Depends(dep_node)): """ Start an IOU node. @@ -157,8 +152,7 @@ async def start_iou_node(start_data: schemas.IOUStart, node: IOUVM = Depends(dep @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_iou_node(node: IOUVM = Depends(dep_node)): """ Stop an IOU node. @@ -168,8 +162,7 @@ async def stop_iou_node(node: IOUVM = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) def suspend_iou_node(node: IOUVM = Depends(dep_node)): """ Suspend an IOU node. @@ -180,8 +173,7 @@ def suspend_iou_node(node: IOUVM = Depends(dep_node)): @router.post("/{node_id}/reload", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reload_iou_node(node: IOUVM = Depends(dep_node)): """ Reload an IOU node. @@ -192,8 +184,7 @@ async def reload_iou_node(node: IOUVM = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], - responses=responses) + response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO]) async def create_iou_node_nio(adapter_number: int, port_number: int, nio_data: Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], @@ -209,8 +200,7 @@ async def create_iou_node_nio(adapter_number: int, @router.put("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], - responses=responses) + response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO]) async def update_iou_node_nio(adapter_number: int, port_number: int, nio_data: Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], @@ -227,8 +217,7 @@ async def update_iou_node_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_iou_node_nio(adapter_number: int, port_number: int, node: IOUVM = Depends(dep_node)): """ Delete a NIO (Network Input/Output) from the node. @@ -237,8 +226,7 @@ async def delete_iou_node_nio(adapter_number: int, port_number: int, node: IOUVM await node.adapter_remove_nio_binding(adapter_number, port_number) -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_iou_node_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -253,8 +241,7 @@ async def start_iou_node_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_iou_node_capture(adapter_number: int, port_number: int, node: IOUVM = Depends(dep_node)): """ Stop a packet capture on the node. @@ -263,8 +250,7 @@ async def stop_iou_node_capture(adapter_number: int, port_number: int, node: IOU await node.stop_capture(adapter_number, port_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: IOUVM = Depends(dep_node)): """ Stream the pcap capture file. @@ -285,8 +271,7 @@ async def console_ws(websocket: WebSocket, node: IOUVM = Depends(dep_node)): @router.post("/{node_id}/console/reset", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reset_console(node: IOUVM = Depends(dep_node)): await node.reset_console() diff --git a/gns3server/api/routes/compute/nat_nodes.py b/gns3server/api/routes/compute/nat_nodes.py index 2eaa2a6e..3e538815 100644 --- a/gns3server/api/routes/compute/nat_nodes.py +++ b/gns3server/api/routes/compute/nat_nodes.py @@ -31,12 +31,12 @@ from gns3server import schemas from gns3server.compute.builtin import Builtin from gns3server.compute.builtin.nodes.nat import Nat -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or NAT node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -70,8 +70,7 @@ async def create_nat_node(project_id: UUID, node_data: schemas.NATCreate): @router.get("/{node_id}", - response_model=schemas.NAT, - responses=responses) + response_model=schemas.NAT) def get_nat_node(node: Nat = Depends(dep_node)): """ Return a NAT node. @@ -81,8 +80,7 @@ def get_nat_node(node: Nat = Depends(dep_node)): @router.put("/{node_id}", - response_model=schemas.NAT, - responses=responses) + response_model=schemas.NAT) def update_nat_node(node_data: schemas.NATUpdate, node: Nat = Depends(dep_node)): """ Update a NAT node. @@ -97,8 +95,7 @@ def update_nat_node(node_data: schemas.NATUpdate, node: Nat = Depends(dep_node)) @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_nat_node(node: Nat = Depends(dep_node)): """ Delete a cloud node. @@ -108,8 +105,7 @@ async def delete_nat_node(node: Nat = Depends(dep_node)): @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_nat_node(node: Nat = Depends(dep_node)): """ Start a NAT node. @@ -119,8 +115,7 @@ async def start_nat_node(node: Nat = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_nat_node(node: Nat = Depends(dep_node)): """ Stop a NAT node. @@ -131,8 +126,7 @@ async def stop_nat_node(node: Nat = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_nat_node(node: Nat = Depends(dep_node)): """ Suspend a NAT node. @@ -144,8 +138,7 @@ async def suspend_nat_node(node: Nat = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], - responses=responses) + response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO]) async def create_nat_node_nio(adapter_number: int, port_number: int, nio_data: Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], @@ -162,8 +155,7 @@ async def create_nat_node_nio(adapter_number: int, @router.put("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], - responses=responses) + response_model=Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO]) async def update_nat_node_nio(adapter_number: int, port_number: int, nio_data: Union[schemas.EthernetNIO, schemas.TAPNIO, schemas.UDPNIO], @@ -181,8 +173,7 @@ async def update_nat_node_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_nat_node_nio(adapter_number: int, port_number: int, node: Nat = Depends(dep_node)): """ Remove a NIO (Network Input/Output) from the node. @@ -192,8 +183,7 @@ async def delete_nat_node_nio(adapter_number: int, port_number: int, node: Nat = await node.remove_nio(port_number) -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_nat_node_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -209,8 +199,7 @@ async def start_nat_node_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_nat_node_capture(adapter_number: int, port_number: int, node: Nat = Depends(dep_node)): """ Stop a packet capture on the node. @@ -220,8 +209,7 @@ async def stop_nat_node_capture(adapter_number: int, port_number: int, node: Nat await node.stop_capture(port_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: Nat = Depends(dep_node)): """ Stream the pcap capture file. diff --git a/gns3server/api/routes/compute/qemu_nodes.py b/gns3server/api/routes/compute/qemu_nodes.py index 8fb91358..184b2e44 100644 --- a/gns3server/api/routes/compute/qemu_nodes.py +++ b/gns3server/api/routes/compute/qemu_nodes.py @@ -32,12 +32,12 @@ from gns3server.compute.project_manager import ProjectManager from gns3server.compute.qemu import Qemu from gns3server.compute.qemu.qemu_vm import QemuVM -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or Qemu node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -79,8 +79,7 @@ async def create_qemu_node(project_id: UUID, node_data: schemas.QemuCreate): @router.get("/{node_id}", - response_model=schemas.Qemu, - responses=responses) + response_model=schemas.Qemu) def get_qemu_node(node: QemuVM = Depends(dep_node)): """ Return a Qemu node. @@ -90,8 +89,7 @@ def get_qemu_node(node: QemuVM = Depends(dep_node)): @router.put("/{node_id}", - response_model=schemas.Qemu, - responses=responses) + response_model=schemas.Qemu) async def update_qemu_node(node_data: schemas.QemuUpdate, node: QemuVM = Depends(dep_node)): """ Update a Qemu node. @@ -108,8 +106,7 @@ async def update_qemu_node(node_data: schemas.QemuUpdate, node: QemuVM = Depends @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_qemu_node(node: QemuVM = Depends(dep_node)): """ Delete a Qemu node. @@ -120,8 +117,7 @@ async def delete_qemu_node(node: QemuVM = Depends(dep_node)): @router.post("/{node_id}/duplicate", response_model=schemas.Qemu, - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_qemu_node(destination_node_id: UUID = Body(..., embed=True), node: QemuVM = Depends(dep_node)): """ Duplicate a Qemu node. @@ -132,16 +128,14 @@ async def duplicate_qemu_node(destination_node_id: UUID = Body(..., embed=True), @router.post("/{node_id}/resize_disk", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def resize_qemu_node_disk(node_data: schemas.QemuDiskResize, node: QemuVM = Depends(dep_node)): await node.resize_disk(node_data.drive_name, node_data.extend) @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_qemu_node(node: QemuVM = Depends(dep_node)): """ Start a Qemu node. @@ -158,8 +152,7 @@ async def start_qemu_node(node: QemuVM = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_qemu_node(node: QemuVM = Depends(dep_node)): """ Stop a Qemu node. @@ -169,8 +162,7 @@ async def stop_qemu_node(node: QemuVM = Depends(dep_node)): @router.post("/{node_id}/reload", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reload_qemu_node(node: QemuVM = Depends(dep_node)): """ Reload a Qemu node. @@ -180,8 +172,7 @@ async def reload_qemu_node(node: QemuVM = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_qemu_node(node: QemuVM = Depends(dep_node)): """ Suspend a Qemu node. @@ -191,8 +182,7 @@ async def suspend_qemu_node(node: QemuVM = Depends(dep_node)): @router.post("/{node_id}/resume", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def resume_qemu_node(node: QemuVM = Depends(dep_node)): """ Resume a Qemu node. @@ -203,8 +193,7 @@ async def resume_qemu_node(node: QemuVM = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_qemu_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -221,8 +210,7 @@ async def create_qemu_node_nio(adapter_number: int, @router.put("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def update_qemu_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -242,8 +230,7 @@ async def update_qemu_node_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_qemu_node_nio(adapter_number: int, port_number: int, node: QemuVM = Depends(dep_node)): @@ -255,8 +242,7 @@ async def delete_qemu_node_nio(adapter_number: int, await node.adapter_remove_nio_binding(adapter_number) -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_qemu_node_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -272,8 +258,7 @@ async def start_qemu_node_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_qemu_node_capture(adapter_number: int, port_number: int, node: QemuVM = Depends(dep_node)): """ Stop a packet capture on the node. @@ -283,8 +268,7 @@ async def stop_qemu_node_capture(adapter_number: int, port_number: int, node: Qe await node.stop_capture(adapter_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: QemuVM = Depends(dep_node)): """ Stream the pcap capture file. @@ -306,8 +290,7 @@ async def console_ws(websocket: WebSocket, node: QemuVM = Depends(dep_node)): @router.post("/{node_id}/console/reset", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reset_console(node: QemuVM = Depends(dep_node)): await node.reset_console() diff --git a/gns3server/api/routes/compute/virtualbox_nodes.py b/gns3server/api/routes/compute/virtualbox_nodes.py index fa4b8f46..4a80814f 100644 --- a/gns3server/api/routes/compute/virtualbox_nodes.py +++ b/gns3server/api/routes/compute/virtualbox_nodes.py @@ -32,12 +32,12 @@ from gns3server.compute.virtualbox.virtualbox_error import VirtualBoxError from gns3server.compute.project_manager import ProjectManager from gns3server.compute.virtualbox.virtualbox_vm import VirtualBoxVM -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or VirtualBox node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -83,8 +83,7 @@ async def create_virtualbox_node(project_id: UUID, node_data: schemas.VirtualBox @router.get("/{node_id}", - response_model=schemas.VirtualBox, - responses=responses) + response_model=schemas.VirtualBox) def get_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): """ Return a VirtualBox node. @@ -94,8 +93,7 @@ def get_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): @router.put("/{node_id}", - response_model=schemas.VirtualBox, - responses=responses) + response_model=schemas.VirtualBox) async def update_virtualbox_node(node_data: schemas.VirtualBoxUpdate, node: VirtualBoxVM = Depends(dep_node)): """ Update a VirtualBox node. @@ -138,8 +136,7 @@ async def update_virtualbox_node(node_data: schemas.VirtualBoxUpdate, node: Virt @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): """ Delete a VirtualBox node. @@ -149,8 +146,7 @@ async def delete_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): """ Start a VirtualBox node. @@ -165,8 +161,7 @@ async def start_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): """ Stop a VirtualBox node. @@ -176,8 +171,7 @@ async def stop_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): """ Suspend a VirtualBox node. @@ -187,8 +181,7 @@ async def suspend_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): @router.post("/{node_id}/resume", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def resume_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): """ Resume a VirtualBox node. @@ -198,8 +191,7 @@ async def resume_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): @router.post("/{node_id}/reload", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reload_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): """ Reload a VirtualBox node. @@ -210,8 +202,7 @@ async def reload_virtualbox_node(node: VirtualBoxVM = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_virtualbox_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -228,8 +219,7 @@ async def create_virtualbox_node_nio(adapter_number: int, @router.put("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def update_virtualbox_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -249,8 +239,7 @@ async def update_virtualbox_node_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_virtualbox_node_nio(adapter_number: int, port_number: int, node: VirtualBoxVM = Depends(dep_node)): """ Delete a NIO (Network Input/Output) from the node. @@ -260,8 +249,7 @@ async def delete_virtualbox_node_nio(adapter_number: int, port_number: int, node await node.adapter_remove_nio_binding(adapter_number) -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_virtualbox_node_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -277,8 +265,7 @@ async def start_virtualbox_node_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_virtualbox_node_capture(adapter_number: int, port_number: int, node: VirtualBoxVM = Depends(dep_node)): """ Stop a packet capture on the node. @@ -288,8 +275,7 @@ async def stop_virtualbox_node_capture(adapter_number: int, port_number: int, no await node.stop_capture(adapter_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: VirtualBoxVM = Depends(dep_node)): """ Stream the pcap capture file. @@ -311,8 +297,7 @@ async def console_ws(websocket: WebSocket, node: VirtualBoxVM = Depends(dep_node @router.post("/{node_id}/console/reset", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reset_console(node: VirtualBoxVM = Depends(dep_node)): await node.reset_console() diff --git a/gns3server/api/routes/compute/vmware_nodes.py b/gns3server/api/routes/compute/vmware_nodes.py index d5fd6c22..e9df222c 100644 --- a/gns3server/api/routes/compute/vmware_nodes.py +++ b/gns3server/api/routes/compute/vmware_nodes.py @@ -31,12 +31,12 @@ from gns3server.compute.vmware import VMware from gns3server.compute.project_manager import ProjectManager from gns3server.compute.vmware.vmware_vm import VMwareVM -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or VMware node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -76,8 +76,7 @@ async def create_vmware_node(project_id: UUID, node_data: schemas.VMwareCreate): @router.get("/{node_id}", - response_model=schemas.VMware, - responses=responses) + response_model=schemas.VMware) def get_vmware_node(node: VMwareVM = Depends(dep_node)): """ Return a VMware node. @@ -87,8 +86,7 @@ def get_vmware_node(node: VMwareVM = Depends(dep_node)): @router.put("/{node_id}", - response_model=schemas.VMware, - responses=responses) + response_model=schemas.VMware) def update_vmware_node(node_data: schemas.VMwareUpdate, node: VMwareVM = Depends(dep_node)): """ Update a VMware node. @@ -106,8 +104,7 @@ def update_vmware_node(node_data: schemas.VMwareUpdate, node: VMwareVM = Depends @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_vmware_node(node: VMwareVM = Depends(dep_node)): """ Delete a VMware node. @@ -117,8 +114,7 @@ async def delete_vmware_node(node: VMwareVM = Depends(dep_node)): @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_vmware_node(node: VMwareVM = Depends(dep_node)): """ Start a VMware node. @@ -133,8 +129,7 @@ async def start_vmware_node(node: VMwareVM = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_vmware_node(node: VMwareVM = Depends(dep_node)): """ Stop a VMware node. @@ -144,8 +139,7 @@ async def stop_vmware_node(node: VMwareVM = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_vmware_node(node: VMwareVM = Depends(dep_node)): """ Suspend a VMware node. @@ -155,8 +149,7 @@ async def suspend_vmware_node(node: VMwareVM = Depends(dep_node)): @router.post("/{node_id}/resume", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def resume_vmware_node(node: VMwareVM = Depends(dep_node)): """ Resume a VMware node. @@ -166,8 +159,7 @@ async def resume_vmware_node(node: VMwareVM = Depends(dep_node)): @router.post("/{node_id}/reload", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reload_vmware_node(node: VMwareVM = Depends(dep_node)): """ Reload a VMware node. @@ -178,8 +170,7 @@ async def reload_vmware_node(node: VMwareVM = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_vmware_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -196,8 +187,7 @@ async def create_vmware_node_nio(adapter_number: int, @router.put("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def update_vmware_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, node: VMwareVM = Depends(dep_node)): @@ -214,8 +204,7 @@ async def update_vmware_node_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_vmware_node_nio(adapter_number: int, port_number: int, node: VMwareVM = Depends(dep_node)): """ Delete a NIO (Network Input/Output) from the node. @@ -225,8 +214,7 @@ async def delete_vmware_node_nio(adapter_number: int, port_number: int, node: VM await node.adapter_remove_nio_binding(adapter_number) -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_vmware_node_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -242,8 +230,7 @@ async def start_vmware_node_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_vmware_node_capture(adapter_number: int, port_number: int, node: VMwareVM = Depends(dep_node)): """ Stop a packet capture on the node. @@ -253,8 +240,7 @@ async def stop_vmware_node_capture(adapter_number: int, port_number: int, node: await node.stop_capture(adapter_number) -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: VMwareVM = Depends(dep_node)): """ Stream the pcap capture file. @@ -267,8 +253,7 @@ async def stream_pcap_file(adapter_number: int, port_number: int, node: VMwareVM @router.post("/{node_id}/interfaces/vmnet", - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) def allocate_vmnet(node: VMwareVM = Depends(dep_node)) -> dict: """ Allocate a VMware VMnet interface on the server. @@ -291,8 +276,7 @@ async def console_ws(websocket: WebSocket, node: VMwareVM = Depends(dep_node)): @router.post("/{node_id}/console/reset", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reset_console(node: VMwareVM = Depends(dep_node)): await node.reset_console() diff --git a/gns3server/api/routes/compute/vpcs_nodes.py b/gns3server/api/routes/compute/vpcs_nodes.py index 0f643f14..89281143 100644 --- a/gns3server/api/routes/compute/vpcs_nodes.py +++ b/gns3server/api/routes/compute/vpcs_nodes.py @@ -30,12 +30,12 @@ from gns3server import schemas from gns3server.compute.vpcs import VPCS from gns3server.compute.vpcs.vpcs_vm import VPCSVM -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or VMware node"} } +router = APIRouter(responses=responses) + def dep_node(project_id: UUID, node_id: UUID): """ @@ -69,8 +69,7 @@ async def create_vpcs_node(project_id: UUID, node_data: schemas.VPCSCreate): @router.get("/{node_id}", - response_model=schemas.VPCS, - responses=responses) + response_model=schemas.VPCS) def get_vpcs_node(node: VPCSVM = Depends(dep_node)): """ Return a VPCS node. @@ -80,8 +79,7 @@ def get_vpcs_node(node: VPCSVM = Depends(dep_node)): @router.put("/{node_id}", - response_model=schemas.VPCS, - responses=responses) + response_model=schemas.VPCS) def update_vpcs_node(node_data: schemas.VPCSUpdate, node: VPCSVM = Depends(dep_node)): """ Update a VPCS node. @@ -96,8 +94,7 @@ def update_vpcs_node(node_data: schemas.VPCSUpdate, node: VPCSVM = Depends(dep_n @router.delete("/{node_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_vpcs_node(node: VPCSVM = Depends(dep_node)): """ Delete a VPCS node. @@ -108,8 +105,7 @@ async def delete_vpcs_node(node: VPCSVM = Depends(dep_node)): @router.post("/{node_id}/duplicate", response_model=schemas.VPCS, - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_vpcs_node(destination_node_id: UUID = Body(..., embed=True), node: VPCSVM = Depends(dep_node)): """ Duplicate a VPCS node. @@ -120,8 +116,7 @@ async def duplicate_vpcs_node(destination_node_id: UUID = Body(..., embed=True), @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_vpcs_node(node: VPCSVM = Depends(dep_node)): """ Start a VPCS node. @@ -131,8 +126,7 @@ async def start_vpcs_node(node: VPCSVM = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_vpcs_node(node: VPCSVM = Depends(dep_node)): """ Stop a VPCS node. @@ -142,8 +136,7 @@ async def stop_vpcs_node(node: VPCSVM = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_vpcs_node(node: VPCSVM = Depends(dep_node)): """ Suspend a VPCS node. @@ -154,8 +147,7 @@ async def suspend_vpcs_node(node: VPCSVM = Depends(dep_node)): @router.post("/{node_id}/reload", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reload_vpcs_node(node: VPCSVM = Depends(dep_node)): """ Reload a VPCS node. @@ -166,8 +158,7 @@ async def reload_vpcs_node(node: VPCSVM = Depends(dep_node)): @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def create_vpcs_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -184,8 +175,7 @@ async def create_vpcs_node_nio(adapter_number: int, @router.put("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", status_code=status.HTTP_201_CREATED, - response_model=schemas.UDPNIO, - responses=responses) + response_model=schemas.UDPNIO) async def update_vpcs_node_nio(adapter_number: int, port_number: int, nio_data: schemas.UDPNIO, @@ -203,8 +193,7 @@ async def update_vpcs_node_nio(adapter_number: int, @router.delete("/{node_id}/adapters/{adapter_number}/ports/{port_number}/nio", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_vpcs_node_nio(adapter_number: int, port_number: int, node: VPCSVM = Depends(dep_node)): @@ -216,8 +205,7 @@ async def delete_vpcs_node_nio(adapter_number: int, await node.port_remove_nio_binding(port_number) -@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start", - responses=responses) +@router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/start") async def start_vpcs_node_capture(adapter_number: int, port_number: int, node_capture_data: schemas.NodeCapture, @@ -233,8 +221,7 @@ async def start_vpcs_node_capture(adapter_number: int, @router.post("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_vpcs_node_capture(adapter_number: int, port_number: int, node: VPCSVM = Depends(dep_node)): """ Stop a packet capture on the node. @@ -245,15 +232,13 @@ async def stop_vpcs_node_capture(adapter_number: int, port_number: int, node: VP @router.post("/{node_id}/console/reset", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reset_console(node: VPCSVM = Depends(dep_node)): await node.reset_console() -@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream", - responses=responses) +@router.get("/{node_id}/adapters/{adapter_number}/ports/{port_number}/capture/stream") async def stream_pcap_file(adapter_number: int, port_number: int, node: VPCSVM = Depends(dep_node)): """ Stream the pcap capture file. diff --git a/gns3server/api/routes/controller/drawings.py b/gns3server/api/routes/controller/drawings.py index de217bfd..bb4b3ec7 100644 --- a/gns3server/api/routes/controller/drawings.py +++ b/gns3server/api/routes/controller/drawings.py @@ -27,12 +27,12 @@ from uuid import UUID from gns3server.controller import Controller from gns3server import schemas -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Project or drawing not found"} } +router = APIRouter(responses=responses) + @router.get("", response_model=List[schemas.Drawing], @@ -48,8 +48,7 @@ async def get_drawings(project_id: UUID): @router.post("", status_code=status.HTTP_201_CREATED, - response_model=schemas.Drawing, - responses=responses) + response_model=schemas.Drawing) async def create_drawing(project_id: UUID, drawing_data: schemas.Drawing): """ Create a new drawing. @@ -62,8 +61,7 @@ async def create_drawing(project_id: UUID, drawing_data: schemas.Drawing): @router.get("/{drawing_id}", response_model=schemas.Drawing, - response_model_exclude_unset=True, - responses=responses) + response_model_exclude_unset=True) async def get_drawing(project_id: UUID, drawing_id: UUID): """ Return a drawing. @@ -76,8 +74,7 @@ async def get_drawing(project_id: UUID, drawing_id: UUID): @router.put("/{drawing_id}", response_model=schemas.Drawing, - response_model_exclude_unset=True, - responses=responses) + response_model_exclude_unset=True) async def update_drawing(project_id: UUID, drawing_id: UUID, drawing_data: schemas.Drawing): """ Update a drawing. @@ -90,8 +87,7 @@ async def update_drawing(project_id: UUID, drawing_id: UUID, drawing_data: schem @router.delete("/{drawing_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_drawing(project_id: UUID, drawing_id: UUID): """ Delete a drawing. diff --git a/gns3server/api/routes/controller/links.py b/gns3server/api/routes/controller/links.py index 11050bde..b02ff5f2 100644 --- a/gns3server/api/routes/controller/links.py +++ b/gns3server/api/routes/controller/links.py @@ -37,12 +37,12 @@ from gns3server import schemas import logging log = logging.getLogger(__name__) -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or link"} } +router = APIRouter(responses=responses) + async def dep_link(project_id: UUID, link_id: UUID): """ @@ -95,8 +95,7 @@ async def create_link(project_id: UUID, link_data: schemas.Link): return link.__json__() -@router.get("/{link_id}/available_filters", - responses=responses) +@router.get("/{link_id}/available_filters") async def get_filters(link: Link = Depends(dep_link)): """ Return all filters available for a given link. @@ -107,8 +106,7 @@ async def get_filters(link: Link = Depends(dep_link)): @router.get("/{link_id}", response_model=schemas.Link, - response_model_exclude_unset=True, - responses=responses) + response_model_exclude_unset=True) async def get_link(link: Link = Depends(dep_link)): """ Return a link. @@ -119,8 +117,7 @@ async def get_link(link: Link = Depends(dep_link)): @router.put("/{link_id}", response_model=schemas.Link, - response_model_exclude_unset=True, - responses=responses) + response_model_exclude_unset=True) async def update_link(link_data: schemas.Link, link: Link = Depends(dep_link)): """ Update a link. @@ -137,8 +134,7 @@ async def update_link(link_data: schemas.Link, link: Link = Depends(dep_link)): @router.delete("/{link_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_link(project_id: UUID, link: Link = Depends(dep_link)): """ Delete a link. @@ -149,8 +145,7 @@ async def delete_link(project_id: UUID, link: Link = Depends(dep_link)): @router.post("/{link_id}/reset", - response_model=schemas.Link, - responses=responses) + response_model=schemas.Link) async def reset_link(link: Link = Depends(dep_link)): """ Reset a link. @@ -162,8 +157,7 @@ async def reset_link(link: Link = Depends(dep_link)): @router.post("/{link_id}/capture/start", status_code=status.HTTP_201_CREATED, - response_model=schemas.Link, - responses=responses) + response_model=schemas.Link) async def start_capture(capture_data: dict, link: Link = Depends(dep_link)): """ Start packet capture on the link. @@ -175,8 +169,7 @@ async def start_capture(capture_data: dict, link: Link = Depends(dep_link)): @router.post("/{link_id}/capture/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_capture(link: Link = Depends(dep_link)): """ Stop packet capture on the link. @@ -185,8 +178,7 @@ async def stop_capture(link: Link = Depends(dep_link)): await link.stop_capture() -@router.get("/{link_id}/capture/stream", - responses=responses) +@router.get("/{link_id}/capture/stream") async def stream_pcap(request: Request, link: Link = Depends(dep_link)): """ Stream the PCAP capture file from compute. diff --git a/gns3server/api/routes/controller/nodes.py b/gns3server/api/routes/controller/nodes.py index 9572b774..cd2dd9b8 100644 --- a/gns3server/api/routes/controller/nodes.py +++ b/gns3server/api/routes/controller/nodes.py @@ -76,12 +76,12 @@ class NodeConcurrency(APIRoute): return custom_route_handler -router = APIRouter(route_class=NodeConcurrency) - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or node"} } +router = APIRouter(route_class=NodeConcurrency, responses=responses) + async def dep_project(project_id: UUID): """ @@ -133,8 +133,7 @@ async def get_nodes(project: Project = Depends(dep_project)): @router.post("/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_all_nodes(project: Project = Depends(dep_project)): """ Start all nodes belonging to a given project. @@ -144,8 +143,7 @@ async def start_all_nodes(project: Project = Depends(dep_project)): @router.post("/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_all_nodes(project: Project = Depends(dep_project)): """ Stop all nodes belonging to a given project. @@ -155,8 +153,7 @@ async def stop_all_nodes(project: Project = Depends(dep_project)): @router.post("/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_all_nodes(project: Project = Depends(dep_project)): """ Suspend all nodes belonging to a given project. @@ -166,8 +163,7 @@ async def suspend_all_nodes(project: Project = Depends(dep_project)): @router.post("/reload", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reload_all_nodes(project: Project = Depends(dep_project)): """ Reload all nodes belonging to a given project. @@ -178,8 +174,7 @@ async def reload_all_nodes(project: Project = Depends(dep_project)): @router.get("/{node_id}", - response_model=schemas.Node, - responses=responses) + response_model=schemas.Node) def get_node(node: Node = Depends(dep_node)): """ Return a node from a given project. @@ -190,8 +185,7 @@ def get_node(node: Node = Depends(dep_node)): @router.put("/{node_id}", response_model=schemas.Node, - response_model_exclude_unset=True, - responses=responses) + response_model_exclude_unset=True) async def update_node(node_data: schemas.NodeUpdate, node: Node = Depends(dep_node)): """ Update a node. @@ -222,8 +216,7 @@ async def delete_node(node_id: UUID, project: Project = Depends(dep_project)): @router.post("/{node_id}/duplicate", response_model=schemas.Node, - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def duplicate_node(duplicate_data: schemas.NodeDuplicate, node: Node = Depends(dep_node)): """ Duplicate a node. @@ -237,8 +230,7 @@ async def duplicate_node(duplicate_data: schemas.NodeDuplicate, node: Node = Dep @router.post("/{node_id}/start", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def start_node(start_data: dict, node: Node = Depends(dep_node)): """ Start a node. @@ -248,8 +240,7 @@ async def start_node(start_data: dict, node: Node = Depends(dep_node)): @router.post("/{node_id}/stop", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def stop_node(node: Node = Depends(dep_node)): """ Stop a node. @@ -259,8 +250,7 @@ async def stop_node(node: Node = Depends(dep_node)): @router.post("/{node_id}/suspend", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def suspend_node(node: Node = Depends(dep_node)): """ Suspend a node. @@ -270,8 +260,7 @@ async def suspend_node(node: Node = Depends(dep_node)): @router.post("/{node_id}/reload", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reload_node(node: Node = Depends(dep_node)): """ Reload a node. @@ -294,8 +283,7 @@ async def get_node_links(node: Node = Depends(dep_node)): return links -@router.get("/{node_id}/dynamips/auto_idlepc", - responses=responses) +@router.get("/{node_id}/dynamips/auto_idlepc") async def auto_idlepc(node: Node = Depends(dep_node)): """ Compute an Idle-PC value for a Dynamips node @@ -304,8 +292,7 @@ async def auto_idlepc(node: Node = Depends(dep_node)): return await node.dynamips_auto_idlepc() -@router.get("/{node_id}/dynamips/idlepc_proposals", - responses=responses) +@router.get("/{node_id}/dynamips/idlepc_proposals") async def idlepc_proposals(node: Node = Depends(dep_node)): """ Compute a list of potential idle-pc values for a Dynamips node @@ -315,8 +302,7 @@ async def idlepc_proposals(node: Node = Depends(dep_node)): @router.post("/{node_id}/resize_disk", - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def resize_disk(resize_data: dict, node: Node = Depends(dep_node)): """ Resize a disk image. @@ -324,8 +310,7 @@ async def resize_disk(resize_data: dict, node: Node = Depends(dep_node)): await node.post("/resize_disk", **resize_data) -@router.get("/{node_id}/files/{file_path:path}", - responses=responses) +@router.get("/{node_id}/files/{file_path:path}") async def get_file(file_path: str, node: Node = Depends(dep_node)): """ Return a file in the node directory @@ -347,8 +332,7 @@ async def get_file(file_path: str, node: Node = Depends(dep_node)): @router.post("/{node_id}/files/{file_path:path}", - status_code=status.HTTP_201_CREATED, - responses=responses) + status_code=status.HTTP_201_CREATED) async def post_file(file_path: str, request: Request, node: Node = Depends(dep_node)): """ Write a file in the node directory. @@ -414,8 +398,7 @@ async def ws_console(websocket: WebSocket, node: Node = Depends(dep_node)): @router.post("/console/reset", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def reset_console_all_nodes(project: Project = Depends(dep_project)): """ Reset console for all nodes belonging to the project. @@ -425,8 +408,7 @@ async def reset_console_all_nodes(project: Project = Depends(dep_project)): @router.post("/{node_id}/console/reset", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def console_reset(node: Node = Depends(dep_node)): await node.post("/console/reset")#, request.json) diff --git a/gns3server/api/routes/controller/projects.py b/gns3server/api/routes/controller/projects.py index b30c1eec..d565e75f 100644 --- a/gns3server/api/routes/controller/projects.py +++ b/gns3server/api/routes/controller/projects.py @@ -46,13 +46,12 @@ from gns3server.controller.export_project import export_project as export_contro from gns3server.utils.asyncio import aiozipstream from gns3server.config import Config - -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project"} } +router = APIRouter(responses=responses) + def dep_project(project_id: UUID): """ @@ -94,8 +93,7 @@ async def create_project(project_data: schemas.ProjectCreate): @router.get("/{project_id}", - response_model=schemas.Project, - responses=responses) + response_model=schemas.Project) def get_project(project: Project = Depends(dep_project)): """ Return a project. @@ -106,8 +104,7 @@ def get_project(project: Project = Depends(dep_project)): @router.put("/{project_id}", response_model=schemas.Project, - response_model_exclude_unset=True, - responses=responses) + response_model_exclude_unset=True) async def update_project(project_data: schemas.ProjectUpdate, project: Project = Depends(dep_project)): """ Update a project. @@ -118,8 +115,7 @@ async def update_project(project_data: schemas.ProjectUpdate, project: Project = @router.delete("/{project_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_project(project: Project = Depends(dep_project)): """ Delete a project. @@ -130,8 +126,7 @@ async def delete_project(project: Project = Depends(dep_project)): controller.remove_project(project) -@router.get("/{project_id}/stats", - responses=responses) +@router.get("/{project_id}/stats") def get_project_stats(project: Project = Depends(dep_project)): """ Return a project statistics. @@ -253,8 +248,7 @@ async def notification_ws(project_id: UUID, websocket: WebSocket): await project.close() -@router.get("/{project_id}/export", - responses=responses) +@router.get("/{project_id}/export") async def export_project(project: Project = Depends(dep_project), include_snapshots: bool = False, include_images: bool = False, @@ -304,8 +298,7 @@ async def export_project(project: Project = Depends(dep_project), @router.post("/{project_id}/import", status_code=status.HTTP_201_CREATED, - response_model=schemas.Project, - responses=responses) + response_model=schemas.Project) async def import_project(project_id: UUID, request: Request, path: Optional[Path] = None, name: Optional[str] = None): """ Import a project from a portable archive. diff --git a/gns3server/api/routes/controller/snapshots.py b/gns3server/api/routes/controller/snapshots.py index 33bc87d0..d5ecf2fc 100644 --- a/gns3server/api/routes/controller/snapshots.py +++ b/gns3server/api/routes/controller/snapshots.py @@ -30,12 +30,12 @@ from gns3server.controller.project import Project from gns3server import schemas from gns3server.controller import Controller -router = APIRouter() - responses = { 404: {"model": schemas.ErrorMessage, "description": "Could not find project or snapshot"} } +router = APIRouter(responses=responses) + def dep_project(project_id: UUID): """ @@ -48,8 +48,7 @@ def dep_project(project_id: UUID): @router.post("", status_code=status.HTTP_201_CREATED, - response_model=schemas.Snapshot, - responses=responses) + response_model=schemas.Snapshot) async def create_snapshot(snapshot_data: schemas.SnapshotCreate, project: Project = Depends(dep_project)): """ Create a new snapshot of a project. @@ -61,8 +60,7 @@ async def create_snapshot(snapshot_data: schemas.SnapshotCreate, project: Projec @router.get("", response_model=List[schemas.Snapshot], - response_model_exclude_unset=True, - responses=responses) + response_model_exclude_unset=True) def get_snapshots(project: Project = Depends(dep_project)): """ Return all snapshots belonging to a given project. @@ -73,8 +71,7 @@ def get_snapshots(project: Project = Depends(dep_project)): @router.delete("/{snapshot_id}", - status_code=status.HTTP_204_NO_CONTENT, - responses=responses) + status_code=status.HTTP_204_NO_CONTENT) async def delete_snapshot(snapshot_id: UUID, project: Project = Depends(dep_project)): """ Delete a snapshot. @@ -85,8 +82,7 @@ async def delete_snapshot(snapshot_id: UUID, project: Project = Depends(dep_proj @router.post("/{snapshot_id}/restore", status_code=status.HTTP_201_CREATED, - response_model=schemas.Project, - responses=responses) + response_model=schemas.Project) async def restore_snapshot(snapshot_id: UUID, project: Project = Depends(dep_project)): """ Restore a snapshot.