scalebox-sdk 1.0.1__py3-none-any.whl → 1.0.3__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/client/api/sandboxes/get_sandboxes.py +1 -1
- scalebox/api/client/models/error.py +1 -1
- scalebox/api/client/models/listed_sandbox.py +6 -3
- scalebox/api/client/models/sandbox.py +2 -2
- scalebox/code_interpreter/code_interpreter_async.py +3 -1
- scalebox/code_interpreter/code_interpreter_sync.py +3 -1
- scalebox/connection_config.py +2 -0
- scalebox/generated/api_pb2_connect.py +3 -3
- scalebox/sandbox/main.py +1 -1
- scalebox/sandbox_async/main.py +1 -1
- scalebox/sandbox_sync/main.py +1 -1
- scalebox/test/bedrock_openai_adapter.py +8 -2
- scalebox/test/run_stress_code_interpreter_sync.py +18 -6
- scalebox/test/simple_upload_example.py +39 -31
- scalebox/test/stabitiy_test.py +82 -69
- scalebox/test/test_browser_use.py +4 -2
- scalebox/test/test_browser_use_scalebox.py +5 -4
- scalebox/test/test_code_interpreter_execcode.py +289 -211
- scalebox/test/test_code_interpreter_sync_comprehensive.py +2 -5
- scalebox/test/test_connect_pause_async.py +34 -11
- scalebox/test/test_connect_pause_sync.py +49 -16
- scalebox/test/test_csx_desktop_examples.py +3 -3
- scalebox/test/test_desktop_sandbox_sf.py +18 -23
- scalebox/test/test_download_url.py +6 -14
- scalebox/test/test_existing_sandbox.py +1037 -0
- scalebox/test/test_sandbox_async_comprehensive.py +4 -2
- scalebox/test/test_sandbox_object_storage_example.py +14 -9
- scalebox/test/test_sandbox_object_storage_example_async.py +6 -3
- scalebox/test/test_sandbox_sync_comprehensive.py +1 -1
- scalebox/test/test_sf.py +12 -8
- scalebox/test/test_watch_dir_async.py +6 -4
- scalebox/test/testagetinfo.py +1 -3
- scalebox/test/testsandbox_api.py +5 -3
- scalebox/test/testsandbox_async.py +17 -47
- scalebox/test/testsandbox_sync.py +18 -14
- scalebox/test/upload_100mb_example.py +77 -55
- scalebox/version.py +2 -2
- {scalebox_sdk-1.0.1.dist-info → scalebox_sdk-1.0.3.dist-info}/METADATA +1 -1
- {scalebox_sdk-1.0.1.dist-info → scalebox_sdk-1.0.3.dist-info}/RECORD +44 -43
- {scalebox_sdk-1.0.1.dist-info → scalebox_sdk-1.0.3.dist-info}/WHEEL +0 -0
- {scalebox_sdk-1.0.1.dist-info → scalebox_sdk-1.0.3.dist-info}/entry_points.txt +0 -0
- {scalebox_sdk-1.0.1.dist-info → scalebox_sdk-1.0.3.dist-info}/licenses/LICENSE +0 -0
- {scalebox_sdk-1.0.1.dist-info → scalebox_sdk-1.0.3.dist-info}/top_level.txt +0 -0
|
@@ -17,55 +17,63 @@ from scalebox.sandbox_sync.main import Sandbox
|
|
|
17
17
|
from scalebox.connection_config import ConnectionConfig
|
|
18
18
|
|
|
19
19
|
# 配置日志
|
|
20
|
-
logging.basicConfig(
|
|
20
|
+
logging.basicConfig(
|
|
21
|
+
level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
|
|
22
|
+
)
|
|
21
23
|
logger = logging.getLogger(__name__)
|
|
22
24
|
|
|
25
|
+
|
|
23
26
|
def create_100mb_test_file(file_path: str = "/home/test_100mb.bin") -> str:
|
|
24
27
|
"""
|
|
25
28
|
创建一个 100MB 的测试文件
|
|
26
|
-
|
|
29
|
+
|
|
27
30
|
Args:
|
|
28
31
|
file_path: 本地文件路径
|
|
29
|
-
|
|
32
|
+
|
|
30
33
|
Returns:
|
|
31
34
|
创建的文件路径
|
|
32
35
|
"""
|
|
33
36
|
logger.info(f"开始创建 100MB 测试文件: {file_path}")
|
|
34
37
|
start_time = time.time()
|
|
35
|
-
|
|
38
|
+
|
|
36
39
|
# 创建 100MB 的数据 (100 * 1024 * 1024 字节)
|
|
37
40
|
file_size = 1000 * 1024 * 1024 # 100MB
|
|
38
41
|
chunk_size = 1024 * 1024 # 1MB 块大小
|
|
39
|
-
|
|
40
|
-
with open(file_path,
|
|
42
|
+
|
|
43
|
+
with open(file_path, "wb") as f:
|
|
41
44
|
written = 0
|
|
42
45
|
while written < file_size:
|
|
43
46
|
# 生成 1MB 的数据块,包含一些模式以便验证
|
|
44
47
|
chunk_data = bytes([(i + written) % 256 for i in range(chunk_size)])
|
|
45
48
|
f.write(chunk_data)
|
|
46
49
|
written += chunk_size
|
|
47
|
-
|
|
50
|
+
|
|
48
51
|
# 显示进度
|
|
49
52
|
if written % (10 * 1024 * 1024) == 0: # 每 10MB 显示一次
|
|
50
53
|
progress = (written / file_size) * 100
|
|
51
54
|
logger.info(f"创建进度: {progress:.1f}% ({written // (1024*1024)}MB)")
|
|
52
|
-
|
|
55
|
+
|
|
53
56
|
creation_time = time.time() - start_time
|
|
54
57
|
actual_size = os.path.getsize(file_path)
|
|
55
|
-
logger.info(
|
|
56
|
-
|
|
58
|
+
logger.info(
|
|
59
|
+
f"文件创建完成: {actual_size / (1024*1024):.2f}MB, 耗时: {creation_time:.2f}秒"
|
|
60
|
+
)
|
|
61
|
+
|
|
57
62
|
return file_path
|
|
58
63
|
|
|
59
|
-
|
|
64
|
+
|
|
65
|
+
def upload_file_to_sandbox(
|
|
66
|
+
local_file_path: str, sandbox_path: str = "/tmp/uploaded_100mb.bin"
|
|
67
|
+
):
|
|
60
68
|
"""
|
|
61
69
|
将本地文件上传到沙箱
|
|
62
|
-
|
|
70
|
+
|
|
63
71
|
Args:
|
|
64
72
|
local_file_path: 本地文件路径
|
|
65
73
|
sandbox_path: 沙箱中的目标路径
|
|
66
74
|
"""
|
|
67
75
|
logger.info("开始连接沙箱...")
|
|
68
|
-
|
|
76
|
+
|
|
69
77
|
# 创建沙箱连接配置
|
|
70
78
|
sandbox = Sandbox.create(
|
|
71
79
|
timeout=3600,
|
|
@@ -79,70 +87,74 @@ def upload_file_to_sandbox(local_file_path: str, sandbox_path: str = "/tmp/uploa
|
|
|
79
87
|
if not sandbox.is_running():
|
|
80
88
|
logger.error("沙箱未运行,无法上传文件")
|
|
81
89
|
return False
|
|
82
|
-
|
|
90
|
+
|
|
83
91
|
logger.info(f"沙箱连接成功,ID: {sandbox.sandbox_id}")
|
|
84
|
-
|
|
92
|
+
|
|
85
93
|
# 读取本地文件
|
|
86
94
|
logger.info(f"读取本地文件: {local_file_path}")
|
|
87
95
|
start_time = time.time()
|
|
88
|
-
|
|
89
|
-
with open(local_file_path,
|
|
96
|
+
|
|
97
|
+
with open(local_file_path, "rb") as f:
|
|
90
98
|
file_data = f.read()
|
|
91
|
-
|
|
99
|
+
|
|
92
100
|
read_time = time.time() - start_time
|
|
93
|
-
logger.info(
|
|
94
|
-
|
|
101
|
+
logger.info(
|
|
102
|
+
f"文件读取完成: {len(file_data) / (1024*1024):.2f}MB, 耗时: {read_time:.2f}秒"
|
|
103
|
+
)
|
|
104
|
+
|
|
95
105
|
# 上传文件到沙箱
|
|
96
106
|
logger.info(f"开始上传文件到沙箱: {sandbox_path}")
|
|
97
107
|
upload_start = time.time()
|
|
98
|
-
|
|
108
|
+
|
|
99
109
|
# 使用 filesystem.write 方法上传文件
|
|
100
|
-
result = sandbox.files.write(sandbox_path, file_data,"root",3600)
|
|
101
|
-
|
|
110
|
+
result = sandbox.files.write(sandbox_path, file_data, "root", 3600)
|
|
111
|
+
|
|
102
112
|
upload_time = time.time() - upload_start
|
|
103
113
|
logger.info(f"文件上传完成: {result.path}, 耗时: {upload_time:.2f}秒")
|
|
104
114
|
logger.info(f"上传速度: {len(file_data) / (1024*1024) / upload_time:.2f} MB/s")
|
|
105
|
-
|
|
115
|
+
|
|
106
116
|
# 验证上传结果
|
|
107
117
|
logger.info("验证上传结果...")
|
|
108
118
|
verify_start = time.time()
|
|
109
|
-
|
|
119
|
+
|
|
110
120
|
# 检查文件是否存在
|
|
111
121
|
if sandbox.files.exists(sandbox_path):
|
|
112
122
|
logger.info("✅ 文件在沙箱中存在")
|
|
113
|
-
|
|
123
|
+
|
|
114
124
|
# 获取文件信息
|
|
115
125
|
file_info = sandbox.files.get_info(sandbox_path)
|
|
116
126
|
logger.info(f"文件信息: {file_info}")
|
|
117
|
-
|
|
127
|
+
|
|
118
128
|
# 读取文件内容进行验证(只读取前1MB进行快速验证)
|
|
119
129
|
logger.info("验证文件内容...")
|
|
120
|
-
with open(local_file_path,
|
|
130
|
+
with open(local_file_path, "rb") as f:
|
|
121
131
|
local_sample = f.read(1024 * 1024) # 读取前1MB
|
|
122
|
-
|
|
123
|
-
sandbox_sample = sandbox.files.read(sandbox_path, format="bytes")[
|
|
124
|
-
|
|
132
|
+
|
|
133
|
+
sandbox_sample = sandbox.files.read(sandbox_path, format="bytes")[
|
|
134
|
+
: 1024 * 1024
|
|
135
|
+
]
|
|
136
|
+
|
|
125
137
|
if local_sample == sandbox_sample:
|
|
126
138
|
logger.info("✅ 文件内容验证成功")
|
|
127
139
|
else:
|
|
128
140
|
logger.error("❌ 文件内容验证失败")
|
|
129
141
|
return False
|
|
130
|
-
|
|
142
|
+
|
|
131
143
|
else:
|
|
132
144
|
logger.error("❌ 文件在沙箱中不存在")
|
|
133
145
|
return False
|
|
134
|
-
|
|
146
|
+
|
|
135
147
|
verify_time = time.time() - verify_start
|
|
136
148
|
total_time = time.time() - upload_start
|
|
137
149
|
logger.info(f"验证完成,耗时: {verify_time:.2f}秒")
|
|
138
150
|
logger.info(f"总上传时间: {total_time:.2f}秒")
|
|
139
|
-
|
|
151
|
+
|
|
140
152
|
return True
|
|
141
|
-
|
|
153
|
+
|
|
142
154
|
except Exception as e:
|
|
143
155
|
logger.error(f"上传过程中发生错误: {e}")
|
|
144
156
|
return False
|
|
145
|
-
|
|
157
|
+
|
|
146
158
|
finally:
|
|
147
159
|
# 清理沙箱
|
|
148
160
|
try:
|
|
@@ -151,7 +163,10 @@ def upload_file_to_sandbox(local_file_path: str, sandbox_path: str = "/tmp/uploa
|
|
|
151
163
|
except Exception as e:
|
|
152
164
|
logger.warning(f"清理沙箱时发生错误: {e}")
|
|
153
165
|
|
|
154
|
-
|
|
166
|
+
|
|
167
|
+
def upload_file_streaming(
|
|
168
|
+
local_file_path: str, sandbox_path: str = "/tmp/uploaded_100mb_streaming.bin"
|
|
169
|
+
):
|
|
155
170
|
"""
|
|
156
171
|
使用真正的流式方式上传文件(不将整个文件读入内存)。
|
|
157
172
|
|
|
@@ -184,7 +199,7 @@ def upload_file_streaming(local_file_path: str, sandbox_path: str = "/tmp/upload
|
|
|
184
199
|
start_time = time.time()
|
|
185
200
|
|
|
186
201
|
with open(local_file_path, "rb") as f:
|
|
187
|
-
sandbox.files.write(sandbox_path, f,"root",3600)
|
|
202
|
+
sandbox.files.write(sandbox_path, f, "root", 3600)
|
|
188
203
|
|
|
189
204
|
upload_time = time.time() - start_time
|
|
190
205
|
logger.info(f"流式上传完成,总耗时: {upload_time:.2f}秒")
|
|
@@ -210,7 +225,10 @@ def upload_file_streaming(local_file_path: str, sandbox_path: str = "/tmp/upload
|
|
|
210
225
|
except Exception as e:
|
|
211
226
|
logger.warning(f"清理沙箱时发生错误: {e}")
|
|
212
227
|
|
|
213
|
-
|
|
228
|
+
|
|
229
|
+
def upload_file_chunked_32m(
|
|
230
|
+
local_file_path: str, sandbox_path: str = "/tmp/uploaded_100mb_chunked_32m.bin"
|
|
231
|
+
):
|
|
214
232
|
"""
|
|
215
233
|
使用客户端 32MB 分片方式上传:
|
|
216
234
|
- 本地读取 32MB 分片,逐片上传为临时文件 {sandbox_path}.partXXXXXX
|
|
@@ -267,9 +285,7 @@ def upload_file_chunked_32m(local_file_path: str, sandbox_path: str = "/tmp/uplo
|
|
|
267
285
|
|
|
268
286
|
# 在沙箱中合并分片,确保按编号顺序连接
|
|
269
287
|
logger.info("开始在沙箱内合并分片...")
|
|
270
|
-
concat_cmd = (
|
|
271
|
-
f"bash -lc 'cat {' '.join(uploaded_parts)} > {sandbox_path}'"
|
|
272
|
-
)
|
|
288
|
+
concat_cmd = f"bash -lc 'cat {' '.join(uploaded_parts)} > {sandbox_path}'"
|
|
273
289
|
proc = sandbox.commands.run(concat_cmd)
|
|
274
290
|
if proc.exit_code != 0:
|
|
275
291
|
logger.error(f"合并失败: exit={proc.exit_code}, stderr=\n{proc.stderr}")
|
|
@@ -278,9 +294,7 @@ def upload_file_chunked_32m(local_file_path: str, sandbox_path: str = "/tmp/uplo
|
|
|
278
294
|
# 校验合并后的文件大小
|
|
279
295
|
info = sandbox.files.get_info(sandbox_path)
|
|
280
296
|
if info.size != file_size:
|
|
281
|
-
logger.error(
|
|
282
|
-
f"合并后大小不一致: 期望={file_size}, 实际={info.size}"
|
|
283
|
-
)
|
|
297
|
+
logger.error(f"合并后大小不一致: 期望={file_size}, 实际={info.size}")
|
|
284
298
|
return False
|
|
285
299
|
|
|
286
300
|
# 删除分片
|
|
@@ -288,7 +302,9 @@ def upload_file_chunked_32m(local_file_path: str, sandbox_path: str = "/tmp/uplo
|
|
|
288
302
|
rm_cmd = f"bash -lc 'rm -f {sandbox_path}.part*'"
|
|
289
303
|
rm_proc = sandbox.commands.run(rm_cmd)
|
|
290
304
|
if rm_proc.exit_code != 0:
|
|
291
|
-
logger.warning(
|
|
305
|
+
logger.warning(
|
|
306
|
+
f"删除分片警告: exit={rm_proc.exit_code}, stderr=\n{rm_proc.stderr}"
|
|
307
|
+
)
|
|
292
308
|
|
|
293
309
|
total_time = time.time() - start_time
|
|
294
310
|
logger.info(
|
|
@@ -306,13 +322,14 @@ def upload_file_chunked_32m(local_file_path: str, sandbox_path: str = "/tmp/uplo
|
|
|
306
322
|
except Exception as e:
|
|
307
323
|
logger.warning(f"清理沙箱时发生错误: {e}")
|
|
308
324
|
|
|
325
|
+
|
|
309
326
|
def main():
|
|
310
327
|
"""主函数"""
|
|
311
328
|
logger.info("=== 100MB 文件上传示例 ===")
|
|
312
|
-
|
|
329
|
+
|
|
313
330
|
# 1. 创建 100MB 测试文件
|
|
314
331
|
local_file = create_100mb_test_file()
|
|
315
|
-
|
|
332
|
+
|
|
316
333
|
try:
|
|
317
334
|
# 2. 方式一:直接上传整个文件
|
|
318
335
|
logger.info("\n=== 方式一:直接上传 ===")
|
|
@@ -322,25 +339,29 @@ def main():
|
|
|
322
339
|
logger.info("✅ 直接上传成功")
|
|
323
340
|
else:
|
|
324
341
|
logger.error("❌ 直接上传失败")
|
|
325
|
-
|
|
342
|
+
|
|
326
343
|
# 3. 方式二:流式分块上传
|
|
327
344
|
logger.info("\n=== 方式二:流式上传 ===")
|
|
328
|
-
success2 = upload_file_streaming(
|
|
329
|
-
|
|
345
|
+
success2 = upload_file_streaming(
|
|
346
|
+
local_file, "/home/uploaded_100mb_streaming.bin"
|
|
347
|
+
)
|
|
348
|
+
|
|
330
349
|
if success2:
|
|
331
350
|
logger.info("✅ 流式上传成功")
|
|
332
351
|
else:
|
|
333
352
|
logger.error("❌ 流式上传失败")
|
|
334
|
-
|
|
353
|
+
|
|
335
354
|
# 4. 方式三:32MB 分片上传(客户端分片 + 服务器端合并)
|
|
336
355
|
logger.info("\n=== 方式三:32MB 分片上传 ===")
|
|
337
|
-
success3 = upload_file_chunked_32m(
|
|
356
|
+
success3 = upload_file_chunked_32m(
|
|
357
|
+
local_file, "/tmp/uploaded_100mb_chunked_32m.bin"
|
|
358
|
+
)
|
|
338
359
|
|
|
339
360
|
if success3:
|
|
340
361
|
logger.info("✅ 32MB 分片上传成功")
|
|
341
362
|
else:
|
|
342
363
|
logger.error("❌ 32MB 分片上传失败")
|
|
343
|
-
|
|
364
|
+
|
|
344
365
|
finally:
|
|
345
366
|
# 4. 清理本地测试文件
|
|
346
367
|
try:
|
|
@@ -348,8 +369,9 @@ def main():
|
|
|
348
369
|
logger.info(f"本地测试文件已删除: {local_file}")
|
|
349
370
|
except Exception as e:
|
|
350
371
|
logger.warning(f"删除本地文件时发生错误: {e}")
|
|
351
|
-
|
|
372
|
+
|
|
352
373
|
logger.info("=== 示例完成 ===")
|
|
353
374
|
|
|
375
|
+
|
|
354
376
|
if __name__ == "__main__":
|
|
355
377
|
main()
|
scalebox/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: scalebox-sdk
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.3
|
|
4
4
|
Summary: ScaleBox Python SDK - A multi-language code execution sandbox with Python, R, Node.js, Deno/TypeScript, Java, and Bash support
|
|
5
5
|
Author-email: ScaleBox Team <dev@scalebox.dev>
|
|
6
6
|
Maintainer-email: ScaleBox Team <dev@scalebox.dev>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
scalebox/__init__.py,sha256=
|
|
1
|
+
scalebox/__init__.py,sha256=OhML14L8AAZZILh00_1fovSAdVmXHu3Gb4fdaZEh48c,1813
|
|
2
2
|
scalebox/cli.py,sha256=nLOcdzb1UdeSXVKlCoJg7w66HV59oig22IKbGxcV1kM,4029
|
|
3
|
-
scalebox/connection_config.py,sha256=
|
|
3
|
+
scalebox/connection_config.py,sha256=vAbtZH4428x8FV4WRqbJRjFeh1k5aXbUxgZZXp9VZao,3934
|
|
4
4
|
scalebox/exceptions.py,sha256=DIvbcSMpPY3LtcNxPFYwHyqCm6eCewzI63rb_RCoYw4,2136
|
|
5
5
|
scalebox/requirements.txt,sha256=LEYsk2VzoxKR-V44Y6qJuJ3vKdTYS79f1Gv1Ajleifo,567
|
|
6
|
-
scalebox/version.py,sha256=
|
|
6
|
+
scalebox/version.py,sha256=EkrnOReaxEEyYYOALdYj1iQ7_Farp0S3e7e6en-zRys,321
|
|
7
7
|
scalebox/api/__init__.py,sha256=DhDrZ0oc9Ms1NMOWNy3NmhHrnafwFG-29rPgbJjovu8,4392
|
|
8
8
|
scalebox/api/metadata.py,sha256=lg5ekfnFZYZoCoJxIPo961HEGVg_rLLRJBbw4ZApM_Y,512
|
|
9
9
|
scalebox/api/client/__init__.py,sha256=HzKIvZRZ7K4vQZKmBQXWh7CdmavSWi49NPaOAQdjdvs,163
|
|
@@ -14,7 +14,7 @@ scalebox/api/client/types.py,sha256=4Noqx0va9oEOqpp6miwyq9Y-nW4lGrd_ClvJbEXi5To,
|
|
|
14
14
|
scalebox/api/client/api/__init__.py,sha256=zTSiG_ujSjAqWPyc435YXaX9XTlpMjiJWBbV-f-YtdA,45
|
|
15
15
|
scalebox/api/client/api/sandboxes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
16
|
scalebox/api/client/api/sandboxes/delete_sandboxes_sandbox_id.py,sha256=exBkD4FP0t730uuuKvNPWwm9PMOE68BDeaKmt98gPlg,3945
|
|
17
|
-
scalebox/api/client/api/sandboxes/get_sandboxes.py,sha256=
|
|
17
|
+
scalebox/api/client/api/sandboxes/get_sandboxes.py,sha256=0dJMMwsXSxXK14eddofO1ZVVcf2acv54DMcpelbNKT4,4879
|
|
18
18
|
scalebox/api/client/api/sandboxes/get_sandboxes_metrics.py,sha256=7vchRZZhVqT2TJDq_P1PZ6xcb6A-bvYmfq8swCEuVw4,4581
|
|
19
19
|
scalebox/api/client/api/sandboxes/get_sandboxes_sandbox_id.py,sha256=M4a8lrM0NgaIF4G6rMw2LcoLs2FK6b4Dfc15JoroSkc,4133
|
|
20
20
|
scalebox/api/client/api/sandboxes/get_sandboxes_sandbox_id_logs.py,sha256=EQmwi1HGcadWZOCSQ3UrtrT3quNHnJkPnanvd-gW0sM,5217
|
|
@@ -31,9 +31,9 @@ scalebox/api/client/models/build_log_entry.py,sha256=eCLxmK8cWMYo0RAfQjWT0zcN2a2
|
|
|
31
31
|
scalebox/api/client/models/connect_sandbox.py,sha256=FVB8Jd6PzBZbVn37Nqz5B1icbHDRwtKCOxQNzPEppiM,1620
|
|
32
32
|
scalebox/api/client/models/created_access_token.py,sha256=VjU_tuW67zrtc3V1po-MVtPo8J1dtRkwy-6uTe2AEf0,2639
|
|
33
33
|
scalebox/api/client/models/created_team_api_key.py,sha256=QO2jAIR8u1Xxn26jnftkDNYCI1mEqDMt-ZUIQS1y1NU,5040
|
|
34
|
-
scalebox/api/client/models/error.py,sha256=
|
|
34
|
+
scalebox/api/client/models/error.py,sha256=4QEPd15N5xnfmaOm-Wcrvl-x7ZO_5V5N8sBLBvXC0LM,1595
|
|
35
35
|
scalebox/api/client/models/identifier_masking_details.py,sha256=97xSg4Nr3D5xbjGDuZ16doEMOlck0EtyjMxtHQR9TKk,2496
|
|
36
|
-
scalebox/api/client/models/listed_sandbox.py,sha256=
|
|
36
|
+
scalebox/api/client/models/listed_sandbox.py,sha256=wnJRNquu5VNPr_OTABJ0oIifumV2ZEJWIUqd3TRqSm4,4804
|
|
37
37
|
scalebox/api/client/models/log_level.py,sha256=uv6u1nkqfzdxTjJAxLZdWuH5goVI_g-ULLhh6TU5dw8,189
|
|
38
38
|
scalebox/api/client/models/new_access_token.py,sha256=sjlQ7dEj4ByCgwud750SbxwyjggAKB1s-o_N7dRCo7s,1480
|
|
39
39
|
scalebox/api/client/models/new_sandbox.py,sha256=xjAxkxpOTCv_fLKHrMdcC4tGSjUoX5FIWXB7HsB_bc4,4457
|
|
@@ -45,7 +45,7 @@ scalebox/api/client/models/node_status_change.py,sha256=gJJWj3-8AaHkjli_KMcBLu4V
|
|
|
45
45
|
scalebox/api/client/models/post_sandboxes_sandbox_id_refreshes_body.py,sha256=VwMoBB9y2vFP7kcLDJ0Q9kVGOBqD2W3VvAEKv_XHd2Y,1763
|
|
46
46
|
scalebox/api/client/models/post_sandboxes_sandbox_id_timeout_body.py,sha256=iay4pLjwIryb6J8fjx3UjThsNJ5AvqArzAwr5K8LnNs,1668
|
|
47
47
|
scalebox/api/client/models/resumed_sandbox.py,sha256=2xD811-BnABH7M9vceACDucdASx0pwpxxoBGzTtxMns,1980
|
|
48
|
-
scalebox/api/client/models/sandbox.py,sha256=
|
|
48
|
+
scalebox/api/client/models/sandbox.py,sha256=auaQsKKExpbm-3VFYLyNhjTZ7aCYNR84PuHoDZd2mF0,4471
|
|
49
49
|
scalebox/api/client/models/sandbox_detail.py,sha256=GXJV0YHZQQdy3JMf7q_l-VhwR0YiM_CjplVvPcggxx8,6196
|
|
50
50
|
scalebox/api/client/models/sandbox_log.py,sha256=tXw35j3poz7DMJrLeoxr4oYdbcYJV5ep3E0bVdQsS2o,1806
|
|
51
51
|
scalebox/api/client/models/sandbox_logs.py,sha256=zpQbPAmdrQoUexnwobzljOYcairMmK6sUHVyM1n2Ix0,1894
|
|
@@ -73,8 +73,8 @@ scalebox/client/client.py,sha256=oduFu3HgkeHXPzWHhnlLjPjagfPdqX_nU6YP4Dv9Adc,352
|
|
|
73
73
|
scalebox/client/requirements.txt,sha256=wKvAVEljSzYT7t1PFWlsWHR9I47sAYjx97xU51NvAPw,94
|
|
74
74
|
scalebox/code_interpreter/__init__.py,sha256=aRozFXYJiqtzgEDkZBaCktYhEWGiRQFB5-L5oq7E9bY,250
|
|
75
75
|
scalebox/code_interpreter/charts.py,sha256=vsGRhl_6Yo9rl8eDBRMct-4ExWW08sYqpSFwRooXS64,5741
|
|
76
|
-
scalebox/code_interpreter/code_interpreter_async.py,sha256=
|
|
77
|
-
scalebox/code_interpreter/code_interpreter_sync.py,sha256=
|
|
76
|
+
scalebox/code_interpreter/code_interpreter_async.py,sha256=EDg-C8ogMVKOARXdHUhs0OdDh3iK7uooHxDMYsQv2GE,13462
|
|
77
|
+
scalebox/code_interpreter/code_interpreter_sync.py,sha256=fLLMSNBn_m1PCTOB5VIb5pFrIF4LkHANMj-ms6NCv9A,11924
|
|
78
78
|
scalebox/code_interpreter/constants.py,sha256=h8yTW0Scglq7kGE30hxWyL2VBAXsWLW4rklCZBARQOg,84
|
|
79
79
|
scalebox/code_interpreter/exceptions.py,sha256=EeiimLZwST422fFzDxFDUOzAaKTvziQI4bWNcsqLPE8,423
|
|
80
80
|
scalebox/code_interpreter/models.py,sha256=udA-ZtS2fe_8elzzcctuVs8H-iKr7KhiAzFvh_hO2aY,14504
|
|
@@ -86,11 +86,11 @@ scalebox/generated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
|
86
86
|
scalebox/generated/api.py,sha256=AxdkIC4-tKRlzixXtMFDmo8-gck2NwzD8rflyxcAIlc,1619
|
|
87
87
|
scalebox/generated/api_pb2.py,sha256=P02Cun4acvUNEZIqwK0c0ofpF3m6d10bgksrrw5_Yo4,26144
|
|
88
88
|
scalebox/generated/api_pb2.pyi,sha256=uqBUXljcl0WyTn_y2-thacJWOpjsTUOSoBMBWz6S4vg,31114
|
|
89
|
-
scalebox/generated/api_pb2_connect.py,sha256=
|
|
89
|
+
scalebox/generated/api_pb2_connect.py,sha256=p4EaCB67QooflVRaeivj1CqXFEY3MjV0Th-2aEgGnrA,53225
|
|
90
90
|
scalebox/generated/rpc.py,sha256=mxO3XOq9kQCpxZqpRZN_sMadabzTNCL1BhjaqjKZ_TM,2048
|
|
91
91
|
scalebox/generated/versions.py,sha256=rBZ4T4ZxsrP7LVnWU-E9r_yN-x8qJXyR2q-EU-bFEMo,87
|
|
92
92
|
scalebox/sandbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
|
-
scalebox/sandbox/main.py,sha256=
|
|
93
|
+
scalebox/sandbox/main.py,sha256=nL9m4RlWspr18SnppnTIZt-wjyS0UqHEjVRhq2tik4g,4588
|
|
94
94
|
scalebox/sandbox/sandbox_api.py,sha256=0fTjp5tHZn74hOj4BASn7NQ62GGjq51er4tjNjrmMN0,2525
|
|
95
95
|
scalebox/sandbox/signature.py,sha256=OABXXFHep_DbH62tu6_TReVLrNlPd9xMdFS29XuAH5Q,1137
|
|
96
96
|
scalebox/sandbox/utils.py,sha256=ow_L3dP1qF6AQrcTrOhNtx2Wq5989EMI6rVc-9o5c50,1334
|
|
@@ -101,7 +101,7 @@ scalebox/sandbox/filesystem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
|
|
|
101
101
|
scalebox/sandbox/filesystem/filesystem.py,sha256=d3R6jp1Gn3cEdKpzB3I2P3ECQCkktBa2AfRCZZwzA08,1833
|
|
102
102
|
scalebox/sandbox/filesystem/watch_handle.py,sha256=vLVy366IIQaNKqlGIWyURou3OCSSJb9m-NpfP8kqXGw,1372
|
|
103
103
|
scalebox/sandbox_async/__init__.py,sha256=D8A0Asb6TNwtm9vdGx-hHCMxEUUHq_Iosi7iaaO9pmc,30
|
|
104
|
-
scalebox/sandbox_async/main.py,sha256=
|
|
104
|
+
scalebox/sandbox_async/main.py,sha256=HeA0fxsWqGq42Hsl1bBfzZ1nzTBUuQbi9qHdSZN18wU,29266
|
|
105
105
|
scalebox/sandbox_async/sandbox_api.py,sha256=glXMZ3xmvfGkgP5E4E3RbxTDFr6J7ONDSYtsZpyKW70,17569
|
|
106
106
|
scalebox/sandbox_async/utils.py,sha256=-KkAt7kwI4i9NJJ-0cSmrABnT3C4H4R7Bx2JH1LlBmc,166
|
|
107
107
|
scalebox/sandbox_async/commands/command.py,sha256=eA4Q2TM4ZFmoVs6r8Nq9qm2CUUgggnBOKG7nJ_qx-vk,11336
|
|
@@ -110,7 +110,7 @@ scalebox/sandbox_async/commands/pty.py,sha256=DnIhzZrLZc-0-0L-rc1dbcVPZdi541Ftnl
|
|
|
110
110
|
scalebox/sandbox_async/filesystem/filesystem.py,sha256=EIZLb3d-FJNhEpmovoRkQzxJVYsV3Jy-lL45m6KCFQQ,19629
|
|
111
111
|
scalebox/sandbox_async/filesystem/watch_handle.py,sha256=PRBUPaQFKQw-iFQM1Hv5GDnnEJvzkjBGGUKA0A7jezg,2013
|
|
112
112
|
scalebox/sandbox_sync/__init__.py,sha256=kb9Pmj_h-RzsZe9rbU_VBd1tY1tTKdyJUYMbI8qq2Ss,116
|
|
113
|
-
scalebox/sandbox_sync/main.py,sha256=
|
|
113
|
+
scalebox/sandbox_sync/main.py,sha256=jpeZZheMEGLHxk7yFCu-wqJp3q5BNXcchrFGRGCJ--A,30694
|
|
114
114
|
scalebox/sandbox_sync/sandbox_api.py,sha256=P5y83Ux32SC5PtO_zEdOeBKYgz6PJRXBinpiVDLKXF4,16952
|
|
115
115
|
scalebox/sandbox_sync/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
116
116
|
scalebox/sandbox_sync/commands/command.py,sha256=XB_MTIlqECKQStsDDV7sHgT3gB_VMu9rYtGqr8kC8Xc,10477
|
|
@@ -123,52 +123,53 @@ scalebox/test/CODE_INTERPRETER_TESTS_READY.md,sha256=qbYoXoNhKeZSQAEB801H7027BEG
|
|
|
123
123
|
scalebox/test/README.md,sha256=Tvdkfz_0jYbLDoUX3BR_HdPFeD7CKpzyZ1H2UZ2TFTQ,9458
|
|
124
124
|
scalebox/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
125
125
|
scalebox/test/aclient.py,sha256=hCZAs2X1AwRHevexdbH0Z2MdahSczjvRglnyb1WFrV4,2335
|
|
126
|
-
scalebox/test/bedrock_openai_adapter.py,sha256=
|
|
126
|
+
scalebox/test/bedrock_openai_adapter.py,sha256=zhwQ2K6y73cIIz8J7XT1maIoIso87KaYb5y195ly6BA,2020
|
|
127
127
|
scalebox/test/code_interpreter_centext.py,sha256=f2GC3l8jsNF9n1Sl4boxJMGqWNl1d1Ff29f_5hahH00,468
|
|
128
128
|
scalebox/test/code_interpreter_centext_sync.py,sha256=cGebrc7c1VQDsv6X0Ez7Xs2plvv_j7EjqQhklLmQ01o,433
|
|
129
129
|
scalebox/test/code_interpreter_test.py,sha256=SPpBBmP4EQmsVlDwdmmd8ve2Q-9K9PJx8LNeszACicY,738
|
|
130
130
|
scalebox/test/code_interpreter_test_sync.py,sha256=WC8dL0MNtJxIVHl7uxbnJRvu9e4iujPX5wckGAZ47ac,681
|
|
131
131
|
scalebox/test/run_all_validation_tests.py,sha256=iWldYseiCW-34Mowkj1AbV_ciFG5mg-DYj_Znl9Agm8,12729
|
|
132
132
|
scalebox/test/run_code_interpreter_tests.sh,sha256=L5sBr5jsFhZxtqfq98yhOA8FK8-bOvYUSVeft8hb1LI,1973
|
|
133
|
-
scalebox/test/run_stress_code_interpreter_sync.py,sha256=
|
|
133
|
+
scalebox/test/run_stress_code_interpreter_sync.py,sha256=zFD_pQBsJ43gRXo7OiZ8q1lt8szEO9dOmVpwoPoWFkE,5884
|
|
134
134
|
scalebox/test/run_tests.sh,sha256=1gWoC_RhemlmtqKfBCw2_fRI20saDJ8iCTRtPUiuUE8,6091
|
|
135
|
-
scalebox/test/simple_upload_example.py,sha256=
|
|
136
|
-
scalebox/test/stabitiy_test.py,sha256=
|
|
135
|
+
scalebox/test/simple_upload_example.py,sha256=69tIJTfc4fdpniKXc2KZyV0sK5Waj2665ceZYyH5aPM,3988
|
|
136
|
+
scalebox/test/stabitiy_test.py,sha256=y00kAJdEMAiyzXUS69OC5kQ7b86o8dJODypwhf2ZGow,11350
|
|
137
137
|
scalebox/test/test_basic.py,sha256=EfK7XzgY63CxLw8x8C1Tnu0yD4vazJxYLHvBV4Zz08U,2375
|
|
138
|
-
scalebox/test/test_browser_use.py,sha256=
|
|
139
|
-
scalebox/test/test_browser_use_scalebox.py,sha256=
|
|
138
|
+
scalebox/test/test_browser_use.py,sha256=E4vWI69nJgcqDTPlh2uLbBE3jYp7q0SJtjMvAQy-_R0,648
|
|
139
|
+
scalebox/test/test_browser_use_scalebox.py,sha256=kTsrWJbFhhoW5xCo_czsYNYwE0Kxbxr1A_w0nAIvX3g,1991
|
|
140
140
|
scalebox/test/test_code_interpreter_async_comprehensive.py,sha256=r63dsWsLIEtQKzyswQDOT1s3yVbXKsNgsgWoSDgTQ2c,84464
|
|
141
|
-
scalebox/test/test_code_interpreter_execcode.py,sha256=
|
|
142
|
-
scalebox/test/test_code_interpreter_sync_comprehensive.py,sha256=
|
|
143
|
-
scalebox/test/test_connect_pause_async.py,sha256=
|
|
144
|
-
scalebox/test/test_connect_pause_sync.py,sha256=
|
|
145
|
-
scalebox/test/test_csx_desktop_examples.py,sha256=
|
|
146
|
-
scalebox/test/test_desktop_sandbox_sf.py,sha256=
|
|
147
|
-
scalebox/test/test_download_url.py,sha256=
|
|
148
|
-
scalebox/test/
|
|
149
|
-
scalebox/test/
|
|
150
|
-
scalebox/test/
|
|
141
|
+
scalebox/test/test_code_interpreter_execcode.py,sha256=5nOJVOvR-TrczP_PBRRwde4ml6w0ZiIQS6fMuCbDTcU,103056
|
|
142
|
+
scalebox/test/test_code_interpreter_sync_comprehensive.py,sha256=z7FwG4vN6G1uDuJ4NAajzJPcQHH9r4WUofEc8Vaeq3c,107433
|
|
143
|
+
scalebox/test/test_connect_pause_async.py,sha256=w5IU9tT0No6I8B4Ynde-gN3ow6yVXSRBaIwd-4M5jqY,11813
|
|
144
|
+
scalebox/test/test_connect_pause_sync.py,sha256=gUuaV15eIfPT43Uy9BuAmDdfnenjdNhkKuDtRaDEXPU,11329
|
|
145
|
+
scalebox/test/test_csx_desktop_examples.py,sha256=SLfvU73otrgrwp5Vo_xxcNSb4qgBJ308PZ-UfZf3mLE,4426
|
|
146
|
+
scalebox/test/test_desktop_sandbox_sf.py,sha256=TtvqLsjJA-K2W9bgWTYPo4JjCd_GWEWajABU2dJhI8A,4139
|
|
147
|
+
scalebox/test/test_download_url.py,sha256=yPGrRv6pSdpqn3mNh53phxGucK9i3O6fdl8x-PMIdx8,1325
|
|
148
|
+
scalebox/test/test_existing_sandbox.py,sha256=sZKm1IbMEFZgTPVEh5p3q0gaJl_pL1sW3QtA_-MQFC8,39934
|
|
149
|
+
scalebox/test/test_sandbox_async_comprehensive.py,sha256=sXm-E4j78Mf1tL2yDHIAD-_zbEHz2HUTLD1eldA7jE8,27078
|
|
150
|
+
scalebox/test/test_sandbox_object_storage_example.py,sha256=3E56DXw526lSrka-H3goG3Cc4lzwMHBGf_MlyDaBH90,4955
|
|
151
|
+
scalebox/test/test_sandbox_object_storage_example_async.py,sha256=ko3Qr8zeJkwC9PlW8GQDz6Pox6T_gXyC_a5g8vzXzok,5327
|
|
151
152
|
scalebox/test/test_sandbox_stress_and_edge_cases.py,sha256=-lzub_06u_SmMVqu1OWIcP5VANm5FIz-a2bRTNqgUOk,27602
|
|
152
|
-
scalebox/test/test_sandbox_sync_comprehensive.py,sha256=
|
|
153
|
+
scalebox/test/test_sandbox_sync_comprehensive.py,sha256=aYTsc_RMI838NtoTX10-e4WvC349Ueftvy_BBXHFFpI,27739
|
|
153
154
|
scalebox/test/test_sandbox_usage_examples.py,sha256=B-UdG3nW2dF2ACGKt77zuPaTobMoKMaFf074VERmzuU,34691
|
|
154
|
-
scalebox/test/test_sf.py,sha256=
|
|
155
|
-
scalebox/test/test_watch_dir_async.py,sha256=
|
|
155
|
+
scalebox/test/test_sf.py,sha256=mZpcVgIAGryHxUmOASB-5yYoVG7DaLRSin5CoF_ZUzc,4731
|
|
156
|
+
scalebox/test/test_watch_dir_async.py,sha256=PXD4Ydd5ZAjKDVj6QnyyqCWIdQ0UUEwhydMiNX7Yv8k,1542
|
|
156
157
|
scalebox/test/testacreate.py,sha256=dc7gr9M-ym60vJ2t6WZp-BoJCRluUJuEyMbBk3_m_F0,739
|
|
157
|
-
scalebox/test/testagetinfo.py,sha256=
|
|
158
|
+
scalebox/test/testagetinfo.py,sha256=_vZmcmPUqp6D5XzdyJuO1L3GeoQe5yudeAl21Jkxy34,504
|
|
158
159
|
scalebox/test/testcodeinterpreter_async.py,sha256=Cmrgv2iRhgJgzr8yvQz3PL4qM_TY_TVvgtRlNrG-G7Y,14258
|
|
159
160
|
scalebox/test/testcodeinterpreter_sync.py,sha256=g9ni-hOz11IYVGwqslRA8CZE6bkWaVBVd2aZxauWFHw,5713
|
|
160
161
|
scalebox/test/testcomputeuse.py,sha256=k519uxPRe9CZDaU2NlmOVLpON8l6zx4EHVpzoWL1l5o,7318
|
|
161
162
|
scalebox/test/testnovnc.py,sha256=p5UM1ueKbyjlyYBcaToFGljG4ppIqC7JGPqltIGY6Po,310
|
|
162
|
-
scalebox/test/testsandbox_api.py,sha256=
|
|
163
|
-
scalebox/test/testsandbox_async.py,sha256=
|
|
164
|
-
scalebox/test/testsandbox_sync.py,sha256=
|
|
165
|
-
scalebox/test/upload_100mb_example.py,sha256=
|
|
163
|
+
scalebox/test/testsandbox_api.py,sha256=EngCtcLXQwLWC1-vTQORoULSkeKmpUSWBflhSmJbKTw,371
|
|
164
|
+
scalebox/test/testsandbox_async.py,sha256=7Y2zDJ_LKryIf82900rClUpJ6rk6h9QBgtGcYxbHiQM,5869
|
|
165
|
+
scalebox/test/testsandbox_sync.py,sha256=KVTG9mXuNLSOIzd5yVsX0lMsVAVE6QkeZ7QxjcBm8Ho,2858
|
|
166
|
+
scalebox/test/upload_100mb_example.py,sha256=o3ibRs85uxh3vTPyyfWBaE0P4pT3M5NBQYpUYso-5H0,12268
|
|
166
167
|
scalebox/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
167
168
|
scalebox/utils/httpcoreclient.py,sha256=rWt8valiNCdxQMwDPEdVeFePGPHCq70LO1T0lSE6hG0,10165
|
|
168
169
|
scalebox/utils/httpxclient.py,sha256=Fk337PPI99VEQjvA62b-BdnOvyL6g4H03EpvjpdxBBg,13845
|
|
169
|
-
scalebox_sdk-1.0.
|
|
170
|
-
scalebox_sdk-1.0.
|
|
171
|
-
scalebox_sdk-1.0.
|
|
172
|
-
scalebox_sdk-1.0.
|
|
173
|
-
scalebox_sdk-1.0.
|
|
174
|
-
scalebox_sdk-1.0.
|
|
170
|
+
scalebox_sdk-1.0.3.dist-info/licenses/LICENSE,sha256=9zP32kHlBovkfji1R6ptx3H7WjJJvnf4UuwTpfogmsY,1069
|
|
171
|
+
scalebox_sdk-1.0.3.dist-info/METADATA,sha256=rNzLcngozXEKWh-utsVXHHmMOJduT1W8Hxh6BFgXNp0,12735
|
|
172
|
+
scalebox_sdk-1.0.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
173
|
+
scalebox_sdk-1.0.3.dist-info/entry_points.txt,sha256=g7C1Trcg8EyvAGMnHpJ3alqtZzQuMypYUQVFK13kOFM,47
|
|
174
|
+
scalebox_sdk-1.0.3.dist-info/top_level.txt,sha256=CDjlibkbOG-MT-s1TRxs4Xe_iN1m11ii48spB6DOMj4,9
|
|
175
|
+
scalebox_sdk-1.0.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|