From 63f89941305cf82b31c6cb4a6d08b459d2a45681 Mon Sep 17 00:00:00 2001 From: "a.zhuravlov" Date: Mon, 2 Sep 2024 14:38:18 +0300 Subject: [PATCH] unneld added consistent responses for REST API --- pymobiledevice3/tunneld.py | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/pymobiledevice3/tunneld.py b/pymobiledevice3/tunneld.py index 3dc0fbf68..c757fb876 100644 --- a/pymobiledevice3/tunneld.py +++ b/pymobiledevice3/tunneld.py @@ -368,34 +368,43 @@ async def list_tunnels() -> Mapping[str, List[Mapping]]: async def shutdown() -> fastapi.Response: """ Shutdown Tunneld """ os.kill(os.getpid(), signal.SIGINT) - return fastapi.Response(status_code=200, content='Server shutting down...') + data = json.dumps({'operation': 'shutdown', 'data': True, 'message': 'Server shutting down...'}) + return generate_http_response(data) @self._app.get('/clear_tunnels') async def clear_tunnels() -> fastapi.Response: self._tunneld_core.clear() - return fastapi.Response(status_code=200, content='Cleared tunnels...') + data = json.dumps({'operation': 'clear_tunnels', 'data': True, 'message': 'Cleared tunnels...'}) + return generate_http_response(data) @self._app.get('/cancel') async def cancel_tunnel(udid: str) -> fastapi.Response: self._tunneld_core.cancel(udid=udid) - return fastapi.Response(status_code=200, content=f'tunnel {udid} Canceled ...') + data = json.dumps({'operation': 'cancel', 'udid': udid, 'data': True, 'message': f'tunnel {udid} Canceled ...'}) + return generate_http_response(data) @self._app.get('/hello') async def hello() -> fastapi.Response: - response = {'message': 'Hello, I\'m alive'} - return fastapi.Response(status_code=200, media_type="application/json", content=json.dumps(response)) + data = {'message': 'Hello, I\'m alive'} + return generate_http_response(data) - def generate_tunnel_response(tunnel: TunnelResult) -> fastapi.Response: + def generate_http_response(data: dict, status_code: int = 200, media_type = 'application/json') -> fastapi.Response: return fastapi.Response( - status_code=200, - content=json.dumps({'interface': tunnel.interface, 'port': tunnel.port, 'address': tunnel.address})) + status_code=status_code, + media_type=media_type, + content=json.dumps(data)) @self._app.get('/start-tunnel') async def start_tunnel( udid: str, ip: Optional[str] = None, connection_type: Optional[str] = None) -> fastapi.Response: udid_tunnels = [t.tunnel for t in self._tunneld_core.tunnel_tasks.values() if t.udid == udid] if len(udid_tunnels) > 0: - return generate_tunnel_response(udid_tunnels[0]) + data = { + 'interface': udid_tunnels[0].interface, + 'port': udid_tunnels[0].port, + 'address': udid_tunnels[0].address + } + return generate_http_response(data) queue = asyncio.Queue() created_task = False @@ -450,7 +459,12 @@ async def start_tunnel( tunnel: Optional[TunnelResult] = await queue.get() if tunnel is not None: - return generate_tunnel_response(tunnel) + data = { + 'interface': tunnel.interface, + 'port': tunnel.port, + 'address': tunnel.address + } + return generate_http_response(data) else: return fastapi.Response(status_code=404, content=json.dumps({'error': 'something went wrong during tunnel creation'}))