Skip to main content

Airalogy protocol execute sandbox

Project description

airalogy-engine (Python)

PyPI version Python versions

Airalogy protocol execution sandbox for Python. Run protocol packages (parse, assign, validate) inside a secure BoxLite sandbox.

Installation

pip install airalogy-engine

Sandbox Image

The engine runs protocol code in a BoxLite sandbox. You can use either a remote Docker image or a local OCI rootfs directory.

Remote Image

from airalogy_engine import AiralogyEngine

engine = AiralogyEngine(image="numbcoder/airalogy-engine:0.1")
result = await engine.parse_protocol(protocol_path)

Local OCI Rootfs (Recommended)

Build and export the image locally for faster, offline execution:

docker build -t airalogy-engine:latest ../../runtime/airalogy-engine-image
docker save airalogy-engine:latest -o airalogy-engine-image.tar
mkdir airalogy-engine-image
tar -xf airalogy-engine-image.tar -C airalogy-engine-image

Then use rootfs_path:

from airalogy_engine import AiralogyEngine

engine = AiralogyEngine(rootfs_path="./airalogy-engine-image")
result = await engine.parse_protocol(protocol_path)

If neither image nor rootfs_path is provided, the engine falls back to the default remote image numbcoder/airalogy-engine:latest.

Usage

import asyncio
from airalogy_engine import AiralogyEngine

async def main():
    protocol_path = "/path/to/your/protocol"
    rootfs_path = "/path/to/airalogy-engine-image"  # or use image="..." instead
    engine = AiralogyEngine(
        rootfs_path=rootfs_path,
        boxlite_home="/tmp/airalogy-engine-worker-1",
    )

    # 1. Parse the protocol
    result = await engine.parse_protocol(protocol_path, env_vars={"API_KEY": "xxx"})
    print(result["data"]["meta_data"])
    print(result["data"]["json_schema"])

    # 2. Assign a variable
    result = await engine.assign_variable(
        protocol_path,
        var_name="duration",
        dependent_data={"seconds": 3600},
        env_vars={"API_KEY": "xxx"},
    )
    print(result["data"])

    # 3. Validate variables
    result = await engine.validate_variables(
        protocol_path,
        variables={"seconds": 60, "duration": "PT1M"},
    )
    print(result["data"])

    await engine.close()

asyncio.run(main())

You can also use the engine as an async context manager:

async with AiralogyEngine(rootfs_path=rootfs_path, boxlite_home="/tmp/worker-1") as engine:
    result = await engine.parse_protocol(protocol_path)

API

API Description
AiralogyEngine(boxlite_home=None, image=None, rootfs_path=None, timeout=300, memory_mib=512, cpus=1) Create an engine bound to one BoxLite runtime home and sandbox configuration
engine.parse_protocol(protocol_path, env_vars=None, timeout=None, debug=False, log_file="protocol_debug.log") Parse a protocol and return schema, metadata, fields
engine.assign_variable(protocol_path, var_name, dependent_data, env_vars=None, timeout=None, debug=False, log_file="protocol_debug.log") Assign a variable using assigner functions
engine.validate_variables(protocol_path, variables, env_vars=None, timeout=None, debug=False, log_file="protocol_debug.log") Validate variable values against the protocol model
await engine.close() Release this engine's BoxLite runtime reference

All engine methods are async and return a dict with success, message, and data keys.

Engine parameters:

  • boxlite_home: BoxLite runtime home directory. Use a distinct value for each OS process when running multiple workers.
  • image: Remote Docker image name (e.g., "numbcoder/airalogy-engine:0.1").
  • rootfs_path: Path to a local OCI rootfs directory (overrides image).
  • timeout: Execution timeout in seconds (default: 300). The sandboxed process will be killed once it times out.
  • memory_mib: Memory limit in MiB (default: 512).
  • cpus: CPU limit (default: 1).

Concurrency

Use one AiralogyEngine instance per worker process and run concurrent operations through that object:

engine = AiralogyEngine(rootfs_path=rootfs_path, boxlite_home="/tmp/worker-1")

results = await asyncio.gather(
    engine.parse_protocol(protocol_a),
    engine.parse_protocol(protocol_b),
)

BoxLite locks each runtime home per OS process. Two independent processes must not share the same boxlite_home or default ~/.boxlite; give each process a distinct directory, for example /tmp/airalogy-worker-1 and /tmp/airalogy-worker-2.

Testing

cd python
uv sync

# Default: local OCI rootfs mode
uv run pytest tests/ -v

# Custom rootfs path
uv run pytest tests/ -v --sandbox-mode=rootfs --rootfs-path=../../runtime/airalogy-engine-image/airalogy-engine-image

# Remote image mode
uv run pytest tests/ -v --sandbox-mode=image --sandbox-image=numbcoder/airalogy-engine:0.1

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

airalogy_engine-0.0.4.tar.gz (10.5 kB view details)

Uploaded Source

Built Distribution

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

airalogy_engine-0.0.4-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file airalogy_engine-0.0.4.tar.gz.

File metadata

  • Download URL: airalogy_engine-0.0.4.tar.gz
  • Upload date:
  • Size: 10.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for airalogy_engine-0.0.4.tar.gz
Algorithm Hash digest
SHA256 604fe11e053c5d558c74a8c31e0d47f385f43263227049b7179587661dd6d603
MD5 fb36198b8831d98da793ff206b69b6a3
BLAKE2b-256 88cc30123366956dbee646cb9ebf05b0565377269090fab742e6faff07cb09a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for airalogy_engine-0.0.4.tar.gz:

Publisher: release.yml on airalogy/airalogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airalogy_engine-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: airalogy_engine-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 11.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for airalogy_engine-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a62c6189a57f564133abe394d84df3aade51cb2afd772df121d60af1a45005ad
MD5 8c68593d60555f37c81f6fd795725318
BLAKE2b-256 c32093a761c8d84200c7fde5bb2549d173dbc4859f53f6891a21b295832ef4e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for airalogy_engine-0.0.4-py3-none-any.whl:

Publisher: release.yml on airalogy/airalogy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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