scalebox-sdk 0.1.4__py3-none-any.whl → 0.1.25__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scalebox/__init__.py +1 -1
- scalebox/api/__init__.py +128 -128
- scalebox/api/client/__init__.py +8 -8
- scalebox/api/client/api/sandboxes/get_sandboxes.py +5 -3
- scalebox/api/client/api/sandboxes/get_sandboxes_sandbox_id_metrics.py +2 -2
- scalebox/api/client/api/sandboxes/post_sandboxes.py +2 -2
- scalebox/api/client/client.py +288 -288
- scalebox/api/client/models/listed_sandbox.py +11 -9
- scalebox/api/client/models/new_sandbox.py +1 -1
- scalebox/api/client/models/sandbox.py +125 -125
- scalebox/api/client/models/sandbox_state.py +1 -0
- scalebox/api/client/types.py +46 -46
- scalebox/code_interpreter/code_interpreter_async.py +370 -369
- scalebox/code_interpreter/code_interpreter_sync.py +318 -317
- scalebox/connection_config.py +92 -92
- scalebox/csx_desktop/main.py +12 -12
- scalebox/generated/api_pb2_connect.py +17 -66
- scalebox/sandbox_async/commands/command.py +307 -307
- scalebox/sandbox_async/commands/command_handle.py +187 -187
- scalebox/sandbox_async/commands/pty.py +187 -187
- scalebox/sandbox_async/filesystem/filesystem.py +557 -557
- scalebox/sandbox_async/filesystem/watch_handle.py +61 -61
- scalebox/sandbox_async/main.py +647 -646
- scalebox/sandbox_async/sandbox_api.py +365 -365
- scalebox/sandbox_async/utils.py +7 -7
- scalebox/sandbox_sync/__init__.py +2 -2
- scalebox/sandbox_sync/commands/command.py +300 -300
- scalebox/sandbox_sync/commands/command_handle.py +150 -150
- scalebox/sandbox_sync/commands/pty.py +181 -181
- scalebox/sandbox_sync/filesystem/filesystem.py +543 -543
- scalebox/sandbox_sync/filesystem/watch_handle.py +66 -66
- scalebox/sandbox_sync/main.py +789 -790
- scalebox/sandbox_sync/sandbox_api.py +356 -356
- scalebox/test/CODE_INTERPRETER_TESTS_READY.md +256 -256
- scalebox/test/README.md +164 -164
- scalebox/test/aclient.py +72 -72
- scalebox/test/code_interpreter_centext.py +21 -21
- scalebox/test/code_interpreter_centext_sync.py +21 -21
- scalebox/test/code_interpreter_test.py +1 -1
- scalebox/test/code_interpreter_test_sync.py +1 -1
- scalebox/test/run_all_validation_tests.py +334 -334
- scalebox/test/test_basic.py +78 -78
- scalebox/test/test_code_interpreter_async_comprehensive.py +2653 -2653
- scalebox/test/{test_code_interpreter_e2bsync_comprehensive.py → test_code_interpreter_execcode.py} +328 -392
- scalebox/test/test_code_interpreter_sync_comprehensive.py +3416 -3412
- scalebox/test/test_csx_desktop_examples.py +130 -0
- scalebox/test/test_sandbox_async_comprehensive.py +736 -738
- scalebox/test/test_sandbox_stress_and_edge_cases.py +778 -778
- scalebox/test/test_sandbox_sync_comprehensive.py +779 -770
- scalebox/test/test_sandbox_usage_examples.py +987 -987
- scalebox/test/testacreate.py +24 -24
- scalebox/test/testagetinfo.py +18 -18
- scalebox/test/testcodeinterpreter_async.py +508 -508
- scalebox/test/testcodeinterpreter_sync.py +239 -239
- scalebox/test/testcomputeuse.py +2 -2
- scalebox/test/testnovnc.py +12 -12
- scalebox/test/testsandbox_api.py +15 -0
- scalebox/test/testsandbox_async.py +202 -118
- scalebox/test/testsandbox_sync.py +71 -38
- scalebox/version.py +2 -2
- {scalebox_sdk-0.1.4.dist-info → scalebox_sdk-0.1.25.dist-info}/METADATA +104 -103
- {scalebox_sdk-0.1.4.dist-info → scalebox_sdk-0.1.25.dist-info}/RECORD +66 -66
- scalebox/test/test_code_interpreter_e2basync_comprehensive.py +0 -2655
- scalebox/test/test_e2b_first.py +0 -11
- {scalebox_sdk-0.1.4.dist-info → scalebox_sdk-0.1.25.dist-info}/WHEEL +0 -0
- {scalebox_sdk-0.1.4.dist-info → scalebox_sdk-0.1.25.dist-info}/entry_points.txt +0 -0
- {scalebox_sdk-0.1.4.dist-info → scalebox_sdk-0.1.25.dist-info}/licenses/LICENSE +0 -0
- {scalebox_sdk-0.1.4.dist-info → scalebox_sdk-0.1.25.dist-info}/top_level.txt +0 -0
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
import inspect
|
|
3
|
-
from typing import Any, AsyncGenerator, Optional
|
|
4
|
-
|
|
5
|
-
from ...generated.api_pb2 import WatchDirResponse
|
|
6
|
-
from ...generated.rpc import handle_rpc_exception
|
|
7
|
-
from ...sandbox.filesystem.watch_handle import FilesystemEvent, map_event_type
|
|
8
|
-
from ...sandbox_async.utils import OutputHandler
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class AsyncWatchHandle:
|
|
12
|
-
"""
|
|
13
|
-
Handle for watching a directory in the sandbox filesystem.
|
|
14
|
-
|
|
15
|
-
Use `.stop()` to stop watching the directory.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
def __init__(
|
|
19
|
-
self,
|
|
20
|
-
events: AsyncGenerator[WatchDirResponse, Any],
|
|
21
|
-
on_event: OutputHandler[FilesystemEvent],
|
|
22
|
-
on_exit: Optional[OutputHandler[Exception]] = None,
|
|
23
|
-
):
|
|
24
|
-
self._events = events
|
|
25
|
-
self._on_event = on_event
|
|
26
|
-
self._on_exit = on_exit
|
|
27
|
-
|
|
28
|
-
self._wait = asyncio.create_task(self._handle_events())
|
|
29
|
-
|
|
30
|
-
async def stop(self):
|
|
31
|
-
"""
|
|
32
|
-
Stop watching the directory.
|
|
33
|
-
"""
|
|
34
|
-
self._wait.cancel()
|
|
35
|
-
# BUG: In Python 3.8 closing async generator can throw RuntimeError.
|
|
36
|
-
# await self._events.aclose()
|
|
37
|
-
|
|
38
|
-
async def _iterate_events(self):
|
|
39
|
-
try:
|
|
40
|
-
async for event in self._events:
|
|
41
|
-
if event.HasField("filesystem"):
|
|
42
|
-
event_type = map_event_type(event.filesystem.type)
|
|
43
|
-
if event_type:
|
|
44
|
-
yield FilesystemEvent(
|
|
45
|
-
name=event.filesystem.name,
|
|
46
|
-
type=event_type,
|
|
47
|
-
)
|
|
48
|
-
except Exception as e:
|
|
49
|
-
raise handle_rpc_exception(e)
|
|
50
|
-
|
|
51
|
-
async def _handle_events(self):
|
|
52
|
-
try:
|
|
53
|
-
async for event in self._iterate_events():
|
|
54
|
-
cb = self._on_event(event)
|
|
55
|
-
if inspect.isawaitable(cb):
|
|
56
|
-
await cb
|
|
57
|
-
except Exception as e:
|
|
58
|
-
if self._on_exit:
|
|
59
|
-
cb = self._on_exit(e)
|
|
60
|
-
if inspect.isawaitable(cb):
|
|
61
|
-
await cb
|
|
1
|
+
import asyncio
|
|
2
|
+
import inspect
|
|
3
|
+
from typing import Any, AsyncGenerator, Optional
|
|
4
|
+
|
|
5
|
+
from ...generated.api_pb2 import WatchDirResponse
|
|
6
|
+
from ...generated.rpc import handle_rpc_exception
|
|
7
|
+
from ...sandbox.filesystem.watch_handle import FilesystemEvent, map_event_type
|
|
8
|
+
from ...sandbox_async.utils import OutputHandler
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class AsyncWatchHandle:
|
|
12
|
+
"""
|
|
13
|
+
Handle for watching a directory in the sandbox filesystem.
|
|
14
|
+
|
|
15
|
+
Use `.stop()` to stop watching the directory.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
events: AsyncGenerator[WatchDirResponse, Any],
|
|
21
|
+
on_event: OutputHandler[FilesystemEvent],
|
|
22
|
+
on_exit: Optional[OutputHandler[Exception]] = None,
|
|
23
|
+
):
|
|
24
|
+
self._events = events
|
|
25
|
+
self._on_event = on_event
|
|
26
|
+
self._on_exit = on_exit
|
|
27
|
+
|
|
28
|
+
self._wait = asyncio.create_task(self._handle_events())
|
|
29
|
+
|
|
30
|
+
async def stop(self):
|
|
31
|
+
"""
|
|
32
|
+
Stop watching the directory.
|
|
33
|
+
"""
|
|
34
|
+
self._wait.cancel()
|
|
35
|
+
# BUG: In Python 3.8 closing async generator can throw RuntimeError.
|
|
36
|
+
# await self._events.aclose()
|
|
37
|
+
|
|
38
|
+
async def _iterate_events(self):
|
|
39
|
+
try:
|
|
40
|
+
async for event in self._events:
|
|
41
|
+
if event.HasField("filesystem"):
|
|
42
|
+
event_type = map_event_type(event.filesystem.type)
|
|
43
|
+
if event_type:
|
|
44
|
+
yield FilesystemEvent(
|
|
45
|
+
name=event.filesystem.name,
|
|
46
|
+
type=event_type,
|
|
47
|
+
)
|
|
48
|
+
except Exception as e:
|
|
49
|
+
raise handle_rpc_exception(e)
|
|
50
|
+
|
|
51
|
+
async def _handle_events(self):
|
|
52
|
+
try:
|
|
53
|
+
async for event in self._iterate_events():
|
|
54
|
+
cb = self._on_event(event)
|
|
55
|
+
if inspect.isawaitable(cb):
|
|
56
|
+
await cb
|
|
57
|
+
except Exception as e:
|
|
58
|
+
if self._on_exit:
|
|
59
|
+
cb = self._on_exit(e)
|
|
60
|
+
if inspect.isawaitable(cb):
|
|
61
|
+
await cb
|