isard
Gencat / IsardVDI from Python — and the isard command line — in one wheel.
The client is written in Rust and compiled into the package (the way polars
ships), so there is nothing to build and no dependency to resolve.
pip install isard # or: uv tool install isard (just the CLI)
The command line
isard login
isard list --hardware
isard up windows # start it, arm the SSH key, wait for sshd
isard exec windows -- 'Get-Date' # stdout is data, the exit code is the guest's
isard stop windows --wait
isard --help lists every command. The same CLI is downloadable as a single
binary from https://isard.xtec.dev, with the documentation at https://isard.xtec.dev/docs/.
The library
import isard
client = isard.connect() # the CLI's cached session, or a fresh login
for desktop in client.get_desktops(hardware=True):
print(desktop["name"], desktop["state"], desktop["vcpus"])
desktop = client.get_desktops("windows")[0]
client.start_desktop(desktop["id"])
client.wait_desktop(desktop["id"], "Started")
- Credentials come from the arguments of
connect()/login(), elseGENCAT_USERNAME/GENCAT_PASSWORD(a.envfile works, and so does~/.config/isard/.env). The library never prompts. - An API key wins: with
ISARD_API_KEYset (environment or.env) and no arguments,connect()uses that key — no login, no cache, and a 401 is raised rather than retried. Make one withisard api-key create. - Sessions are shared with the CLI:
connect()reuses~/.config/isard/isardvdi.jsonand caches a new login there, and a 401 on a cached token logs in again once and retries. - Records are plain dicts —
Desktop,Template,Media, … areTypedDicts in the type stubs. - Errors are
isard.IsardErrorsubclasses:HttpError(withstatus_code),NetworkError,AuthError,BookingRequiredError,IsardTimeoutError, …. - Calls block, and release the GIL while they wait — run them in threads freely.
- Seeds:
isard.render_cloud_init("box-1", "isard", "pw")→(user_data, meta_data),isard.render_kickstart(…), andisard.build_seed_iso("cidata", {"user-data": …, "meta-data": …}, "seed.iso")— pure Rust, no xorriso. - On a desktop:
isard.Remote("windows")runs commands and moves files over the routeisard up windowscached —.run("Get-Date")["stdout"],.push("~/proj", mirror=True),.get(path),.put(data, path),.job(script, result). It keeps the GIL and stays on the thread that made it.
Licensed MIT OR Apache-2.0.
Metadata
Release files for isard 0.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| isard-0.4.2-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| isard-0.4.2-cp310-abi3-musllinux_1_2_x86_64.whl | CPython 3.10 | abi3 | Linux musl 1.2+ x86-64 | Details |
| isard-0.4.2-cp310-abi3-musllinux_1_2_aarch64.whl | CPython 3.10 | abi3 | Linux musl 1.2+ ARM64 | Details |
| isard-0.4.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| isard-0.4.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| isard-0.4.2-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
| isard-0.4.2-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 39.2 MB
Release files / isard-0.4.2-cp310-abi3-win_amd64.whl
| Download URL | isard-0.4.2-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 5.7 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
d9a4efb0325ebe0ccbec1000605b838d6744637c25b3f03adadf450ca843e37b
|
|
BLAKE2b-256 checksum How to use checksums |
90a5891687cd797a3e75cdcb6f889154810cf2d268d887c4557c4637cadf38fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / isard-0.4.2-cp310-abi3-musllinux_1_2_x86_64.whl
| Download URL | isard-0.4.2-cp310-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 5.8 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
28f0c3ffa045e92ec03d7f75717ddfa333204ffd02255ae0a63c23dc4fc636a4
|
|
BLAKE2b-256 checksum How to use checksums |
0444a71379b8b2166407b26cd789f7f3f9ff6f1ba6630f35157a1c1cbee71f1c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / isard-0.4.2-cp310-abi3-musllinux_1_2_aarch64.whl
| Download URL | isard-0.4.2-cp310-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.10 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
6b9dcab729bc0f3cc39e07b2931f06c2443b9a39128f1d8bfdb19237baa44651
|
|
BLAKE2b-256 checksum How to use checksums |
76a32f1870b9b8e0b05555e2aed36288f67d069eeece9dedac1d8f963dfa2a78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / isard-0.4.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | isard-0.4.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.8 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
88b77f35852c5c0a5d66e83c13518db89b402d07bf68e09dbd6db65baa8ec3fc
|
|
BLAKE2b-256 checksum How to use checksums |
052c218fbce38df47256eac2475f4dae903362ef67b0d5736d0d5b589133c009
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / isard-0.4.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | isard-0.4.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
2c4f7d5aba002cda0d592c41468fc2ca3416d79b6c999de390c849e108e0de23
|
|
BLAKE2b-256 checksum How to use checksums |
ad87178226ef401e07c7dfdf07ff1559dad131f8f673c522bc844696545bb0e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / isard-0.4.2-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | isard-0.4.2-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2e38b7b785a0a0a50cb7dfc5d2880504289d45d35c5c725e803752ded626a0cf
|
|
BLAKE2b-256 checksum How to use checksums |
a396559028a4b4656ba1b1cd9f7054ce2fb320d8d3f9684dff390c98cfbdcc0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / isard-0.4.2-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | isard-0.4.2-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 5.5 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
503bc844b12073b257531923c5b7b398c173a1babbebd4fa4f38b0674cd1d20f
|
|
BLAKE2b-256 checksum How to use checksums |
3b2be4a52ac7eeeb376421ee55dfca0fff7c79da60f745af46a0b6de478770a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|