Skip to main content

Capsule adapter for Python applications — execute Python and JavaScript code in isolated WebAssembly sandboxes

Project description

Capsule Python Adapter

Python Adapter Release

Execute Python and JavaScript code securely inside Capsule sandboxes from your Python applications.

Installation

pip install capsule-run-adapter

Usage

Execute Python Code

from capsule_adapter import run_python

result = await run_python("""
print("Hello from Python!")
x = 5 + 3
x * 2
""")

print(result)  # "Hello from Python!\n16"

Execute JavaScript Code

from capsule_adapter import run_javascript

result = await run_javascript("""
console.log("Hello from JavaScript!");
const x = 5 + 3;
x * 2;
""")

print(result)  # "Hello from JavaScript!\n16"

Preload Sandboxes (Optional)

The first execution of a sandbox has a cold start (~1 second). You can preload sandboxes to warm them up for faster subsequent executions (~10ms):

import asyncio
from capsule_adapter import load_sandboxes, run_python

async def main():
    # Preload sandboxes
    await load_sandboxes()

    # Or preload individually
    # await load_python_sandbox()     # Warm up Python only
    # await load_javascript_sandbox() # Warm up JavaScript only

    # Fast execution
    result = await run_python('print("Fast!")')
    print(result)

asyncio.run(main())

Sessions (Persistent State)

Use Session to run code across multiple calls while preserving state. Each session gets an isolated workspace directory that is automatically cleaned up when the session ends.

from capsule_adapter import Session

async with Session() as s:
    await s.run("x = 1")
    result = await s.run("x += 1; x")
    print(result)  # 2

JavaScript sessions work the same way:

async with Session("javascript") as s:
    await s.run("x = 1")
    result = await s.run("x += 1; x")
    print(result)  # 2

Import Files

Copy a file or directory from your filesystem into the session workspace. The sandbox code can then access it at the destination path under workspace/.

async with Session() as s:
    # Import a single file
    await s.import_file("./notes.txt", "notes.txt")

    result = await s.run("""
with open("workspace/notes.txt") as f:
    content = f.read()
content
""")

Export Files

Export file from the session workspace to your filesystem.

async with Session() as s:
    await s.import_file("./notes.txt", "notes.txt")
    # ... do some work ...
    await s.export_file("notes.txt", "./exported_notes.txt")

Delete Files

Remove a file from the session workspace:

async with Session() as s:
    await s.import_file("./notes.txt", "notes.txt")
    # ... do some work ...
    await s.delete_file("notes.txt")

Reset State

Clear the session's variable state without touching workspace files:

async with Session() as s:
    await s.run("x = 42")
    await s.reset()
    result = await s.run("x")  # raises NameError

How It Works

The adapter compiles Python and JavaScript sandboxes into WebAssembly modules during the build step. When you call run_python() or run_javascript(), the adapter invokes these pre-built sandboxes using Capsule's runner with the code you provide.

Learn more about Capsule.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

capsule_run_adapter-0.3.4.tar.gz (11.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

capsule_run_adapter-0.3.4-py2.py3-none-any.whl (11.7 MB view details)

Uploaded Python 2Python 3

File details

Details for the file capsule_run_adapter-0.3.4.tar.gz.

File metadata

  • Download URL: capsule_run_adapter-0.3.4.tar.gz
  • Upload date:
  • Size: 11.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for capsule_run_adapter-0.3.4.tar.gz
Algorithm Hash digest
SHA256 7d36b0be828db7ee464555f2c18c7e4413ad88a23d8aee833e8c3fc440b48d7c
MD5 c9d95c79530820266397f5aaccc90e3d
BLAKE2b-256 b7465e0f9ca8bb67d89b941ea1c7521e941c7c5e674bdb22aaddbad2ae12c0f4

See more details on using hashes here.

File details

Details for the file capsule_run_adapter-0.3.4-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for capsule_run_adapter-0.3.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 58b618985fe9af9e8d1b3c2849bf9c2d2b2c42745d43321bab9e9c5d2222cd25
MD5 813b40967efd1a881419cecf137a82b6
BLAKE2b-256 56aa1af16a2f08d4114cb982a28f1d57a37be0d50d60a455363233366affe8aa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page