Skip to main content

Python client for the Contree API, generated from the OpenAPI specification

Project description

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).

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

contree_client-0.1.2.tar.gz (130.2 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.1.2-py3-none-any.whl (96.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: contree_client-0.1.2.tar.gz
  • Upload date:
  • Size: 130.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for contree_client-0.1.2.tar.gz
Algorithm Hash digest
SHA256 d06efe9efa7b5fb15d862de4a8d2e2f99b31fad509a2af8366e697364da8f2a3
MD5 5a401d6dffc4e778b8fda7fcf7736a8e
BLAKE2b-256 7cc37580a0b7be42b1598cc0667f5f7dc57a0e686f1a3b3efb704a28beaac1cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for contree_client-0.1.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.1.2-py3-none-any.whl.

File metadata

  • Download URL: contree_client-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 96.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for contree_client-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a8810b0216e177dc421418f976fb46b200c590cde576a230a86281b16d7d84a8
MD5 6d19f18f6d3553c093c1fa522fb53486
BLAKE2b-256 294430a807f591346b865dfcf9ef795b7e3da330f81ad09540e4093f7abc74b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for contree_client-0.1.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.

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