Skip to main content

Python-typed Rust modules for workflow automation — SSH, containers, files, HTTP, packages, services, templates

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.

rsty-0.7.3-cp313-cp313-win_amd64.whl (4.7 MB view details)

Uploaded CPython 3.13Windows x86-64

rsty-0.7.3-cp313-cp313-manylinux_2_34_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

rsty-0.7.3-cp313-cp313-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rsty-0.7.3-cp313-cp313-macosx_10_12_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

Details for the file rsty-0.7.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: rsty-0.7.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 4.7 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rsty-0.7.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 735615fdf35712608009d578d677be9c9711fa2719ec41923361b1ed4c7fa9eb
MD5 0ac71cc6e5e4469d827cec2484e77b53
BLAKE2b-256 7b27576663b86b3b674f99c06e54912e4b3a61f427694f3efe790b318111bf3b

See more details on using hashes here.

File details

Details for the file rsty-0.7.3-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rsty-0.7.3-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 52e0e10600b7f7870541552f4bcffb0b1a1e962148a3de510061e88516324666
MD5 dcf3a0350c1dbc87a5257af231c5d02f
BLAKE2b-256 877fc0357255f05173f48ce531b5182d83fd48e2ecf5251b08f97c2898d3d47f

See more details on using hashes here.

File details

Details for the file rsty-0.7.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rsty-0.7.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cbe2890575df94c7c0e8d45f809950155bd8dd478e6e05f2666db2f2256ff317
MD5 2d67d2ba4494882154f1f9390b3f0578
BLAKE2b-256 d371684be10ea6fb9724954f83dc59b75ae5ecf448c9a80a4129ee4aad3c953b

See more details on using hashes here.

File details

Details for the file rsty-0.7.3-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rsty-0.7.3-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 592d758b069994f87423530156e327f68ca02709735b7080d3ae995b9a76850e
MD5 684e75fbe1729d9e603999c2f089a4a6
BLAKE2b-256 47c73707e9f7196eccd49f110c835ab6d764dbee3b32ac96d0736c78ce03e296

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