Skip to content

Python Sandbox SDK v0.1.14

Choose a tag to compare

@Pangjiping Pangjiping released this 13 Jul 04:42
9865299

What's New

✨ Features

  • Isolation convenience APIssandbox.isolation.run_once(code, workspace=...) for one-shot create → run → delete flows, and async with sandbox.isolation.session(req) / with ... session(req) for scoped multi-run workflows. Cleanup is best-effort so it never masks the original exception. Available on both async and sync clients. (#1222)
  • List isolated sessionssandbox.isolation.list() (async + sync). (#1269)
  • Isolated bind mountsCreateIsolatedSessionRequest.binds accepts BindMount(source, dest, readonly) for arbitrary host→namespace path mappings; also exposes the previously missing uid_mode. Threaded through the run_once helper as well. (#1264)
  • Sandbox pool destroySandboxPoolManager FORCE-destroy support with DESTROYING fence + DESTROYED tombstone; both in-memory and Redis stores implement the new tombstone semantics. Failed destroys leave the pool in DESTROYING so callers can retry safely. (#1225)
  • Credential Vault placeholder substitutions — opt-in placeholders for path / query / header / body request surfaces (incl. passthrough bindings). (#1251)
  • Endpoint cache with inflight dedup — cache (sandbox_id, port, use_server_proxy) → Endpoint to avoid repeated HTTP roundtrips. Default on: TTL 600s, MaxSize 1024, configurable via ConnectionConfig; kill() actively invalidates cached entries. (#1133)
  • Sandbox extensions in lifecycle responsesCreateSandboxResponse and Sandbox models now expose extensions, restoring Kubernetes opensandbox.io/extensions.* annotations as opensandbox.extensions.* in response data. (#1112)
  • IsolationService / IsolationServiceSync protocols now include run_once and session — built-in adapters inherit default implementations via IsolationServiceMixin, but custom protocol implementations must satisfy the extended contract. (#1222)
  • CredentialMatch.ports removed; intercept port is derived from scheme (http→80, https→443). Drop any ports=[...] arguments. (#1189)
  • PoolStateStoreContentionError removed (never actually raised by in-memory or Redis stores). (#1198)

🐛 Bug Fixes

  • Handled adapter warnings/errors are demoted so they no longer surface as noisy tracebacks, while still remaining visible in logs.
  • Python SDK logging unified to f-strings.

🔒 Security

  • Patch 21 Dependabot CVEs — bumps pydantic-settings → 2.14.2, python-multipart → 0.0.32, starlette → 1.3.1, cryptography → 49.0.0, pyjwt → 2.13.0 via pyproject.toml lower bounds and [tool.uv] constraint-dependencies for transitive deps. Resolves all open Dependabot alerts for Python packages. (#1145)

📦 Misc

  • Removed unused server-side PendingSandbox async provisioning path and corrected the POST /sandboxes 202 spec — both Docker and K8s provision synchronously and return Running directly, so no polling loop is needed. Regenerated Python API clients accordingly. (#1178)
  • Repository metadata URLs in pyproject.toml now point at opensandbox-group/OpenSandbox. (#1135)
  • Bumped the Python sandbox SDK fallback_version to 0.1.14 and aligned the default User-Agent (OpenSandbox-Python-SDK/0.1.14, async + sync) which had drifted behind the released version. A regression test now locks the User-Agent to the package version. (#1248)

👥 Contributors