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.5.2-cp313-cp313-win_amd64.whl (4.5 MB view details)

Uploaded CPython 3.13Windows x86-64

rsty-0.5.2-cp313-cp313-manylinux_2_34_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

rsty-0.5.2-cp313-cp313-macosx_11_0_arm64.whl (4.3 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rsty-0.5.2-cp313-cp313-macosx_10_12_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: rsty-0.5.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 4.5 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.5.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 183b980a2a82618eb285e6084c05c0de59ef5d23d669e50d37e12548db77ab96
MD5 729b84af4b2741a5afff0eb1c0a4227d
BLAKE2b-256 5e68ab59e744077526dc6743354b634b2c8f61b58b937f686d00c1a88a131ff0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rsty-0.5.2-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 63a710d4726a0d0d3be155ce27cde2dd0f9c8cd79189aa2fff2cbadd441657e9
MD5 0c093bd308a055b25c447f3f685f870a
BLAKE2b-256 9833f33d58649518e9af4930e4a948e1137f291771f1a10eae46fcaba85752f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rsty-0.5.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d7aaceaa90eb695d11f390d90064b91a06704e3b139f3db9a62c133e8635c66
MD5 8d406ad76a6850393e1bbe53fcbe1687
BLAKE2b-256 1612590b2ae61b3d607931237e76ef399c9083647ade556c6f2080eca1649718

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rsty-0.5.2-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f667fa0a3c580776abc1e565c04de9255fc951b03f2c8633c070d05278e920b9
MD5 42a736827aa851db29aa7e566dd68c89
BLAKE2b-256 7088e4c68898e97945af9c3ce19a92dde4659e6941b5d618eebde0f94a57e09f

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