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

Uploaded CPython 3.13Windows x86-64

rsty-0.2.1-cp313-cp313-manylinux_2_39_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

rsty-0.2.1-cp313-cp313-macosx_11_0_arm64.whl (3.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rsty-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: rsty-0.2.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 3.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.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 12c7d5722ed4c85d874e623459ab526a2754cccc941c0e8572cd7bf68ae07afd
MD5 dacf5bad530b7707ea7162471aca2926
BLAKE2b-256 13d94d186d2f00b54afa84ce7ce3f66fa4f2779853b6b1f5be22ebfbed5a7370

See more details on using hashes here.

File details

Details for the file rsty-0.2.1-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rsty-0.2.1-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 fee764230dd9031218b05d770699062f4d49d74eb07392d61947a35b1e8e726e
MD5 ecd318733e375f415cc0a0d0f9c66f1f
BLAKE2b-256 cbec43d01a235d06614ab70f47899795c9066ac77a63dcd10496ab43e58c5b23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rsty-0.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b68ccd0501649098e7918ff7b47ea53b030b7e4404f1b2ed1a0352514bb31215
MD5 3f0d269c2db49597baac1fcfd76d8563
BLAKE2b-256 ed7848a430e0a3ad40e54ed016a056ba18a5b09eb295d66a9e85f286f3a26e97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rsty-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2e8efc18d5ac2ffdce80fa259bc325da06212159d9b32f23519eb7d533a2c841
MD5 92dacb38df1253acb18c7a9010a6f1e1
BLAKE2b-256 ad420513600577a510836c2f5443b1fd95cea1b9578684f71d5d412b0d524b57

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