Skip to main content

contree-client

Python client for the Contree API — sandboxed code execution combining virtual machine isolation with container operational efficiency.

Synchronous clients are named ContreeClient, asynchronous ones are named ContreeAsyncClient; every backend shares the same interface:

Backend Extra Import
http.client — (stdlib) from contree_client.http import ContreeClient
urllib3 contree-client[urllib3] from contree_client.urllib3 import ContreeClient
requests contree-client[requests] from contree_client.requests import ContreeClient
httpx contree-client[httpx] from contree_client.httpx import ContreeClient / ContreeAsyncClient
aiohttp contree-client[aiohttp] from contree_client.aiohttp import ContreeAsyncClient

Or let the package pick the first installed backend:

from contree_client.sync import ContreeClient
from contree_client.asyncio import ContreeAsyncClient

Quick start

from contree_client.sync import ContreeClient

# reuse a saved Contree profile,
# or pass credentials directly: ContreeClient("IAM_TOKEN", project=...)
with ContreeClient.from_profile() as client:
    response = client.spawn_instance("uname -a", "tag:ubuntu:latest", shell=True)
    for event in client.iter_operation_events(response.uuid, follow=True):
        print(event.type, event.data)

Use cases

Run a command and read its output:

from contree_client import OperationStatus

response = client.spawn_instance(
    "echo hello",
    "tag:ubuntu:latest",
    shell=True,
    disposable=True,   # do not persist a result image
    timeout=60,
)
operation = client.wait_operation(response.uuid)
assert operation.status is OperationStatus.SUCCESS
print(operation.metadata.result.stdout.as_text())

Follow the live event stream with transparent reconnection (Last-Event-Id resume; ends on the completion event):

import sys

from contree_client import decode_chunk

for event in client.follow_operation_events(response.uuid):
    if event.type in ("stdout", "stderr"):
        sys.stdout.buffer.write(decode_chunk(event.data))

Retry transient failures (network errors, 410/425/5xx) automatically:

from contree_client import RetryPolicy

client = ContreeClient.from_profile(retry=RetryPolicy())

Stage files into the sandbox:

from contree_client import FileSpec

uploaded = client.upload_file(open("data.txt", "rb"))
client.spawn_instance(
    "wc -l /work/data.txt",
    "tag:ubuntu:latest",
    shell=True,
    files={"/work/data.txt": FileSpec(uuid=uploaded.uuid, mode="0644")},
)

Import an image and inspect it without spawning anything:

from contree_client import ImageImportRegistry

operation_id = client.import_image(
    ImageImportRegistry(url="docker://docker.io/library/busybox:latest"),
    tag="busybox:latest",
)
image_uuid = client.inspect_find_image_by_tag("busybox:latest")
print(client.inspect_image_list(image_uuid, "/etc").files)

Download a directory as a tar stream:

with open("etc.tar", "wb") as archive:
    for chunk in client.inspect_image_archive(image_uuid, "/etc"):
        archive.write(chunk)

Asynchronous flavour mirrors the sync API exactly:

from contree_client.asyncio import ContreeAsyncClient

async with ContreeAsyncClient.from_profile() as client:
    me = await client.whoami()
    print(me.permissions)

Test your code without a server — the in-memory double from contree_client.testing implements the same interface as every real backend; unmocked methods raise, calls are recorded:

from contree_client.testing import ContreeClient

client = ContreeClient()
client.mock("spawn_instance", spawn_response)
client.mock("iter_operation_events", [stdout_event, exit_event])

run_my_code(client)

assert client.calls_for("spawn_instance")

Debug logging (redacted, off by default):

import logging

from contree_client.types import set_log_level

set_log_level(logging.DEBUG)

Copyright

Nebius B.V. 2026, Licensed under the Apache License, Version 2.0 (see "LICENSE" file).

Download files

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

Source Distribution

contree_client-0.2.2.tar.gz (150.9 kB view details)

Uploaded Source

Built Distribution

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

contree_client-0.2.2-py3-none-any.whl (112.0 kB view details)

Uploaded Python 3

File details

Details for the file contree_client-0.2.2.tar.gz.

File metadata

  • Download URL: contree_client-0.2.2.tar.gz
  • Upload date:
  • Size: 150.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for contree_client-0.2.2.tar.gz
Algorithm Hash digest
SHA256 2120249866247df8d1ad408986abe404f5acc7d1355102f437d3882ab07d6bc8
MD5 512eefb9fc16df5fab53610138a98d1b
BLAKE2b-256 bf55a92c17de95d1b8607c0f30b4097c4a7f348d2d8a6a7d8f8ce820deb82c71

See more details on using hashes here.

Provenance

The following attestation bundles were made for contree_client-0.2.2.tar.gz:

Publisher: publish.yml on nebius/contree-client

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

File details

Details for the file contree_client-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: contree_client-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 112.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for contree_client-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ea5ab62f162f1a975f2f723fd9cbe3062e5aa53c437d08cb12acbd28277c2600
MD5 2c1a37e16ab9a6cd231581b2c467480e
BLAKE2b-256 6251893e5bfa7da71961765752fe139b9a1f849b762ac07af7019fe5d24e4b63

See more details on using hashes here.

Provenance

The following attestation bundles were made for contree_client-0.2.2-py3-none-any.whl:

Publisher: publish.yml on nebius/contree-client

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

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.0

2 files

This release

0.2.2 This release

2 files

0.2.1

2 files

0.2.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page