Skip to main content

Reusable workflow blocks for CUTIP — Rust-backed via PyO3

Project description

cutip-blocks

Python 3.11+ Rust License: MIT

Rust-backed workflow blocks for CUTIP. Write Python, execute Rust.

Every function you call from cutip_blocks is a compiled Rust binary under the hood — SSH via russh, Docker/Podman via bollard, HTTP via reqwest, YAML/JSON via serde. Zero Python dependencies. The Python GIL is released during all I/O.

Install

pip install cutip-blocks

Modules

Module Rust crate What it does
ssh russh Persistent SSH sessions — connect(), exec(), probe()
kubectl serde Kubernetes ops over SSH — get, exec, find_pod, patch_deployment, patch_file_from_pod
container bollard Docker/Podman — start, stop, remove, exec, pull
file std::fs + serde copy, copy_tree, read/write_json, read/write_yaml, replace
http reqwest get, post, put, delete with JSON + TLS toggle
network bollard create, remove, exists
service reqwest + bollard poll_until_ready, wait_for_exit
validate std path_exists, env_var_set, ip_valid
config string ops render_template, substitute_vars

Usage

SSH + kubectl (remote VM operations)

from cutip_blocks import ssh, kubectl

with ssh.connect(host="10.0.0.1", username="root", password=pw) as sesh:
    sesh.probe()  # verify connectivity

    kube = kubectl.connect(sesh, namespace="prod")
    kube.get("deployment", name="web")
    kube.find_pod(name_prefix="web")

    password = kube.get_secret_value(secret="db-creds", key="password")
    kube.exec(target="deploy/web", cmd="cat /app/config.py")

    kube.patch_file_from_pod(
        deployment="web",
        source_file="/opt/app/handler.py",
        dest_dir="/root/patches",
        replacements={"old_value": "new_value"},
    )

    kube.patch_deployment(
        deployment="web",
        volume_name="config-override",
        host_path="/root/patches/handler.py",
        mount_path="/opt/app/handler.py",
    )

Container management

from cutip_blocks import container

rt = container.connect()  # auto-detect Docker/Podman
rt.pull("nginx", tag="latest")
rt.start("my-container")
result = rt.exec("my-container", "nginx -t")
print(result.stdout)
rt.stop("my-container")
rt.remove("my-container")

File operations

from cutip_blocks import file

data = file.read_json("config.json")
file.copy_tree("src/", "build/deps/")
file.replace("config.yaml", "old_value", "new_value")
file.write_yaml("output.yaml", {"key": "value"})

HTTP

from cutip_blocks import http

resp = http.post("https://api.example.com/token",
                 json={"username": "admin", "password": "secret"},
                 verify_tls=False)
token = resp.json()["access_token"]

Development

Requires Rust toolchain + Python 3.11+.

git clone https://github.com/joshuajerome/cutip-blocks.git
cd cutip-blocks
python -m venv .venv && source .venv/bin/activate
pip install maturin pytest
maturin develop
pytest tests/ -v

Ecosystem

Project Description
cutip Workflow automation framework
cutip-blocks Rust-backed blocks (this repo)
cutip-desktop Visual companion — DAG, container management

License

MIT

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

cutip_blocks-0.4.0-cp313-cp313-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.13Windows x86-64

cutip_blocks-0.4.0-cp313-cp313-manylinux_2_39_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

cutip_blocks-0.4.0-cp313-cp313-macosx_11_0_arm64.whl (3.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cutip_blocks-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

Details for the file cutip_blocks-0.4.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for cutip_blocks-0.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a0d75e5ca02198b29a6bb8fd215a1ef5855ea97f2e1ba29d090e75486a2669de
MD5 6733cf00a77d611293c46b45966b0195
BLAKE2b-256 70322bae42ec158485ab62989df91ba92a705c77b9755fb43879b55979a43126

See more details on using hashes here.

File details

Details for the file cutip_blocks-0.4.0-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for cutip_blocks-0.4.0-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 18448043a995a987b8efe03972a2ff4157649792fa4590c23c4bd43e61a27a4e
MD5 87e98815f9948133d7f1fe723366d2fc
BLAKE2b-256 9fed51a9de465918472def6f187219f12215cf9fdd4cf60298ef8f18460d577d

See more details on using hashes here.

File details

Details for the file cutip_blocks-0.4.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cutip_blocks-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 154d2df1b5a82a62b0a0c5bfc40ec13733a04600f018ec85a48baa21a6244e4a
MD5 d4164b15a1f729853fd099dda8fe67a2
BLAKE2b-256 da471420c6e7dd126f9d646f82bd4c1d007a864d9189925a07481215b531cbba

See more details on using hashes here.

File details

Details for the file cutip_blocks-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cutip_blocks-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 933d3a64a0f8d70a92859beebf9c64ca9cf0502a55cf77cab3eeda4321f9e12a
MD5 62a10471b2d2b5521ff384c69c34b51d
BLAKE2b-256 6d216c7574e31800717f5143bf0e6f9c982e91f362c0f4c47bf05350b13d853d

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