un-inception/clients/python
russell@unturf.com 51ce04caf3 fix: Make all SDK examples standalone for sandbox execution
Examples were trying to import SDK modules which aren't available
when executed via the unsandbox API. Made all examples standalone
with simulated results:

- JavaScript async examples (fibonacci.js, hello_world.js)
- PHP examples (fibonacci_client.php, hello_world_client.php)
- Python examples (several async + sync examples)
- Ruby hello_world.rb
- Rust examples (async_polling.rs, fibonacci.rs, hello_world.rs, multi_language.rs)
- Java HelloWorldClient.java

Also fixed validate-examples.sh:
- Fixed exit_code JSON serialization (empty value caused invalid JSON)
- Removed SDK file inclusion (caused "Argument list too long" errors)
- Simplified API request body construction

All 46 examples now pass validation with 100% success rate.
2026-02-14 09:40:25 -05:00
..
async fix: Make all SDK examples standalone for sandbox execution 2026-02-14 09:40:25 -05:00
scripts feat: Complete Python and C SDK implementations with examples and pipeline integration 2026-01-15 16:42:58 -05:00
sync fix: Make all SDK examples standalone for sandbox execution 2026-02-14 09:40:25 -05:00
ASYNC_vs_SYNC.md feat: Complete Python and C SDK implementations with examples and pipeline integration 2026-01-15 16:42:58 -05:00
EXAMPLES.md feat: Complete Python and C SDK implementations with examples and pipeline integration 2026-01-15 16:42:58 -05:00
EXAMPLES_STRUCTURE.md feat: Complete Python and C SDK implementations with examples and pipeline integration 2026-01-15 16:42:58 -05:00
IMPLEMENTATION_SUMMARY.md feat: Complete Python and C SDK implementations with examples and pipeline integration 2026-01-15 16:42:58 -05:00
INDEX.md feat: Complete Python and C SDK implementations with examples and pipeline integration 2026-01-15 16:42:58 -05:00
Makefile feat: per-client Makefile infrastructure for 4-mode testing 2026-01-15 16:39:56 -05:00
QUICK_START.md feat: Complete Python and C SDK implementations with examples and pipeline integration 2026-01-15 16:42:58 -05:00
README.md feat: Complete Python and C SDK implementations with examples and pipeline integration 2026-01-15 16:42:58 -05:00

Unsandbox Python SDKs

Official Python SDKs for unsandbox.com - Execute code in 50+ languages from Python.

Two implementations: synchronous and asynchronous.

Quick Choice

Need SDK Location Import
Simple scripts & CLIs Sync sync/ from un import execute_code
High-concurrency web services Async async/ from un_async import execute_code
FastAPI, Quart, async frameworks Async async/ from un_async import execute_code
100+ concurrent jobs Async async/ from un_async import execute_code
Unsure Sync sync/ from un import execute_code

Synchronous SDK (sync/)

Traditional blocking I/O with requests library.

Quick Start

from un import execute_code

result = execute_code("python", "print('Hello, World!')")
print(result["stdout"])

When to Use

  • Writing simple scripts or CLIs
  • Working in Jupyter notebooks
  • Building prototype applications
  • Low concurrency requirements (< 10 concurrent jobs)
  • You want the simplest API

Features

  • Works with Python 3.6+
  • Single-threaded simple API
  • Uses requests library
  • Basic credential management
  • Perfect for getting started

Documentation

  • sync/README.md - Quick reference
  • Examples: sync/examples/

Asynchronous SDK (async/)

High-performance async/await implementation with aiohttp.

Quick Start

import asyncio
from un_async import execute_code

async def main():
    result = await execute_code("python", "print('Hello, World!')")
    print(result["stdout"])

asyncio.run(main())

Concurrent Execution

import asyncio
from un_async import execute_code

async def main():
    results = await asyncio.gather(
        execute_code("python", "print(1)"),
        execute_code("javascript", "console.log(2)"),
        execute_code("go", "fmt.Println(3)"),
    )

asyncio.run(main())

When to Use

  • Building web services with async frameworks (FastAPI, Quart)
  • High concurrency requirements (100+ concurrent jobs)
  • Already using async/await in your codebase
  • Want to maximize throughput
  • Django async views or other async contexts
  • Need efficient resource utilization

Features

  • Python 3.7+ required
  • Full async/await support
  • Efficient event loop based concurrency
  • Uses aiohttp library
  • Comprehensive test suite (200+ tests)
  • 5 working examples
  • Detailed documentation
  • Production-ready error handling

Documentation

  • async/README.md - Quick reference
  • async/USAGE_GUIDE.md - Comprehensive guide
  • async/examples/ - 5 working examples
  • ASYNC_vs_SYNC.md - Detailed comparison

Getting Started

cd async
pip install -e "."
python examples/hello_world_async.py

Shared Features (Both SDKs)

Supported Languages

50+ languages including:

  • Interpreted: Python, JavaScript, Ruby, Bash, Perl, PHP, Lua, Julia, Scheme, Tcl, Raku, and more
  • Compiled: C, C++, Go, Rust, Java, Kotlin, C#, D, Nim, Zig, V, Pascal, Fortran, COBOL, and more
  • Functional: Haskell, OCaml, F#, Clojure, Scheme
  • Specialized: TypeScript, Objective-C

Credential Management (4-Tier Priority)

  1. Function arguments
  2. Environment variables
  3. ~/.unsandbox/accounts.csv
  4. ./accounts.csv

Core API

# Execution
execute_code(language, code, public_key=None, secret_key=None)
execute_async(language, code, public_key=None, secret_key=None)

# Job Management
get_job(job_id, public_key=None, secret_key=None)
wait_for_job(job_id, public_key=None, secret_key=None)
cancel_job(job_id, public_key=None, secret_key=None)
list_jobs(public_key=None, secret_key=None)

# Metadata
get_languages(public_key=None, secret_key=None)
detect_language(filename)

# Snapshots
session_snapshot(session_id, public_key=None, secret_key=None, name=None, hot=False)
service_snapshot(service_id, public_key=None, secret_key=None, name=None, hot=False)
list_snapshots(public_key=None, secret_key=None)
restore_snapshot(snapshot_id, public_key=None, secret_key=None)
delete_snapshot(snapshot_id, public_key=None, secret_key=None)

Request Authentication

  • HMAC-SHA256 signing
  • Timestamp-based replay prevention
  • Bearer token authentication

Caching

  • Language list cached for 1 hour
  • Cache location: ~/.unsandbox/languages.json

Installation

Sync SDK

cd sync
pip install -e .

Async SDK

cd async
pip install -e .

With Development Tools

cd async  # or sync
pip install -e ".[dev]"

Examples

Sync SDK

  • sync/examples/hello_world.py - Basic execution
  • sync/examples/fibonacci.py - Recursive functions

Async SDK

  • async/examples/hello_world_async.py - Basic async execution
  • async/examples/fibonacci_async.py - Concurrent calculations
  • async/examples/concurrent_execution.py - Multiple languages
  • async/examples/async_job_polling.py - Fire-and-forget pattern
  • async/examples/sync_blocking_usage.py - Mixed sync/async

Testing

Sync SDK

See sync/README.md for testing instructions.

Async SDK

cd async
pip install -e ".[dev]"
make test-coverage

Comparison

See ASYNC_vs_SYNC.md for detailed comparison including:

  • Side-by-side code examples
  • When to use each
  • Performance benchmarks
  • Migration guide

Authentication Setup

Using Environment Variables

export UNSANDBOX_PUBLIC_KEY="your_public_key"
export UNSANDBOX_SECRET_KEY="your_secret_key"
python script.py

Using Config File

mkdir -p ~/.unsandbox
echo "public_key,secret_key" > ~/.unsandbox/accounts.csv

Using Function Arguments

result = await execute_code(
    "python",
    "print('hello')",
    public_key="your_pk",
    secret_key="your_sk"
)

Response Format

{
    "job_id": "job_abc123",
    "status": "completed",
    "stdout": "output text\n",
    "stderr": "",
    "exit_code": 0,
    "language": "python",
    "duration_ms": 234
}

Error Handling

Sync SDK

from un import execute_code, CredentialsError
import requests

try:
    result = execute_code("python", "print('hello')")
except CredentialsError as e:
    print(f"Auth failed: {e}")
except requests.RequestException as e:
    print(f"Network error: {e}")

Async SDK

from un_async import execute_code, CredentialsError
import aiohttp

try:
    result = await execute_code("python", "print('hello')")
except CredentialsError as e:
    print(f"Auth failed: {e}")
except aiohttp.ClientError as e:
    print(f"Network error: {e}")

Development

Code Style

  • PEP 8 compliant
  • Type hints throughout
  • Comprehensive docstrings

Testing

  • Unit tests for all major functions
  • Async/await test patterns
  • Mock-based API testing
  • 95%+ coverage target

Linting & Formatting

cd async
make lint      # Run flake8 and mypy
make format    # Format with black

Performance

Sync SDK

  • Good for: 1-100 concurrent jobs
  • Throughput: ~1-10 jobs/sec
  • Resource: One thread per job
  • Overhead: Thread context switching

Async SDK

  • Good for: 100-10,000+ concurrent jobs
  • Throughput: ~10-100 jobs/sec
  • Resource: Single event loop
  • Overhead: Minimal (event loop only)

Choosing Between SDKs

Use Sync SDK if:

  • Writing a simple script or CLI
  • Working in Jupyter
  • Don't need high concurrency
  • Want the simplest API
  • Running on older Python (3.6)

Use Async SDK if:

  • Building a web service
  • Using async framework (FastAPI, Quart)
  • Need 100+ concurrent jobs
  • Already using async/await
  • Want better resource utilization

Coexistence

Both SDKs can be used in the same project:

from un import execute_code as sync_execute
from un_async import execute_code as async_execute

# Use sync version for some operations
result1 = sync_execute("python", "code1")

# Use async version elsewhere
async def async_work():
    result2 = await async_execute("python", "code2")

Documentation Structure

clients/python/
├── README.md                    # This file
├── ASYNC_vs_SYNC.md           # Comparison guide
├── IMPLEMENTATION_SUMMARY.md   # Async implementation details
├── sync/
│   ├── README.md              # Sync SDK quick start
│   ├── src/un.py              # Sync SDK implementation
│   └── examples/              # Sync examples
└── async/
    ├── README.md              # Async SDK quick start
    ├── USAGE_GUIDE.md         # Comprehensive async guide
    ├── src/un_async.py        # Async SDK implementation
    ├── examples/              # 5 async examples
    ├── tests/                 # 200+ test cases
    ├── setup.py               # Package config
    ├── requirements.txt       # Dependencies
    └── Makefile               # Development targets

Support & Help

  1. Quick Start: See README in sync/ or async/ folder
  2. Detailed Guide: See USAGE_GUIDE.md in async/ folder
  3. Comparison: See ASYNC_vs_SYNC.md
  4. API Docs: See unsandbox.txt in repository root
  5. Examples: See examples/ in sync/ or async/ folder

License

Public Domain - NO LICENSE, NO WARRANTY

Official Resources