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

Uploaded CPython 3.13Windows x86-64

cutip_blocks-0.3.3-cp313-cp313-manylinux_2_38_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.38+ x86-64

cutip_blocks-0.3.3-cp313-cp313-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cutip_blocks-0.3.3-cp313-cp313-macosx_10_12_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

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

File metadata

File hashes

Hashes for cutip_blocks-0.3.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e6f858872eb55a9ace6961c8c850f08a4d67cca50649e963fe00c2161419c73f
MD5 16ff63cbf5ef55703ec89e79e10bd38d
BLAKE2b-256 263c1f0f2f4209085eff810341c70de2f894b1ec2a0d5a5742a328d2de620634

See more details on using hashes here.

File details

Details for the file cutip_blocks-0.3.3-cp313-cp313-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for cutip_blocks-0.3.3-cp313-cp313-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 61e2203f1f03323dd1945447c8accded075838b961c50a9f909035ea14c6721c
MD5 7fc725b215bcefdb750e449a1346d33e
BLAKE2b-256 df407c4656dca6614b81154d77c3fa8db90c56ff1eebb3944cc0af82a9b03dcd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cutip_blocks-0.3.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b81c13a02c019cefc340a554a28eda151da8bb517a2441ad29f1fc0d9d3be8f
MD5 14fbb0a131ddf7ae852741619cbb65ab
BLAKE2b-256 fdfc4985c250d21491c5bd6973f6cdae2bec0c3b46738526298ffa7b9d11d346

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cutip_blocks-0.3.3-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 555979e1faec525a415d20751d4cedfe130415955fce67b30c8f8db7095533cb
MD5 b95242f7aa7da284d3c04acb569cda72
BLAKE2b-256 f814fcab498322612baf5f894d0f6035cec6fc1e80a503701c6aef39525c7996

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