11from __future__ import annotations
22
3- from datetime import datetime , timezone
43from typing import Any , Generic , Literal , Optional , TypedDict , TypeVar , cast
54import httpx
65
76from .api_types_generated import (
87 RevisionWithoutTimelines ,
9- SandboxListOptions ,
10- SandboxMeta ,
118 Timeline ,
129)
1310from .bridge import AsyncBridge
@@ -29,10 +26,6 @@ class ExposeSSHResult(TypedDict):
2926 port : int
3027
3128
32- class ExposeHTTPResult (TypedDict ):
33- domain : str
34-
35-
3629class AsyncPaginatedList (Generic [T , O ]):
3730 def __init__ (
3831 self ,
@@ -218,82 +211,5 @@ async def __aenter__(self):
218211 async def __aexit__ (self , exc_type , exc_val , exc_tb ):
219212 await self .close ()
220213
221- # Sandbox-related methods (used by sandbox.py)
222- async def _sandboxes_list (
223- self , options : Optional [SandboxListOptions ] = None
224- ) -> AsyncPaginatedList [SandboxMeta , SandboxListOptions ]:
225- sandboxes : AsyncPaginatedList [
226- SandboxMeta , SandboxListOptions
227- ] = await self .get_paginated (
228- path = "/api/v3/sandboxes" , cursor = None , params = options
229- )
230- return sandboxes
231-
232- async def _kill_sandbox (self , sandbox_id : str ) -> None :
233- await self .delete (f"/api/v3/sandboxes/{ sandbox_id } " )
234-
235- async def _extend_timeout (self , sandbox_id : str , stop_at_ms : int ) -> datetime :
236- url = self ._options ["sandbox_url" ].join (f"/api/v3/sandbox/{ sandbox_id } " )
237-
238- result = await self ._request ("PATCH" , url , {"stop_at_ms" : stop_at_ms })
239-
240- data = result .json ()
241-
242- return datetime .fromtimestamp (data ["stop_at_ms" ] / 1000 , tz = timezone .utc )
243-
244- async def _expose_http (self , sandbox_id : str , params : dict [str , int ]) -> str :
245- url = self ._options ["sandbox_url" ].join (
246- f"/api/v3/sandbox/{ sandbox_id } /expose/http"
247- )
248-
249- result = await self ._request ("POST" , url , params )
250-
251- data = cast (ExposeHTTPResult , result .json ())
252- return data ["domain" ]
253-
254- async def _expose_ssh (self , sandbox_id : str ) -> ExposeSSHResult :
255- url = self ._options ["sandbox_url" ].join (
256- f"/api/v3/sandbox/{ sandbox_id } /expose/ssh"
257- )
258- response = await self ._request ("POST" , url , {})
259-
260- return cast (ExposeSSHResult , response .json ())
261-
262-
263- class ConsoleClient :
264- def __init__ (self , options : InternalOptions , bridge : AsyncBridge ):
265- self ._async = AsyncConsoleClient (options )
266- self ._bridge = bridge
267-
268- def close (self ):
269- self ._bridge .run (self ._async .close ())
270-
271- def __enter__ (self ):
272- return self
273-
274- def __exit__ (self , exc_type , exc_val , exc_tb ):
275- self ._bridge .run (self ._async .__aexit__ (exc_type , exc_val , exc_tb ))
276-
277- # Sandbox-related methods (used by sandbox.py)
278- def _sandboxes_list (
279- self , options : Optional [SandboxListOptions ] = None
280- ) -> PaginatedList [SandboxMeta , SandboxListOptions ]:
281- paginated : AsyncPaginatedList [SandboxMeta , SandboxListOptions ] = (
282- self ._bridge .run (self ._async ._sandboxes_list (options ))
283- )
284- return PaginatedList (self ._bridge , paginated )
285-
286- def _kill_sandbox (self , sandbox_id : str ) -> None :
287- self ._bridge .run (self ._async ._kill_sandbox (sandbox_id ))
288-
289- def _extend_timeout (self , sandbox_id : str , stop_at_ms : int ) -> None :
290- self ._bridge .run (self ._async ._extend_timeout (sandbox_id , stop_at_ms ))
291-
292- def _expose_http (self , sandbox_id : str , params : dict [str , int ]) -> str :
293- return self ._bridge .run (self ._async ._expose_http (sandbox_id , params ))
294-
295- def _expose_ssh (self , sandbox_id : str ) -> ExposeSSHResult :
296- return self ._bridge .run (self ._async ._expose_ssh (sandbox_id ))
297-
298214
299- __all__ = ["AsyncConsoleClient" , "ConsoleClient" ]
215+ __all__ = ["AsyncConsoleClient" ]
0 commit comments