Skip to main content

Reusable utilities for Pysae Python CLIs (k8s pod dispatch, …).

Project description

pysae-cli-tools

Reusable utilities for Pysae Python CLIs.

PyPI

Installation

pip install pysae-cli-tools
# or
poetry add pysae-cli-tools

What's included

pysae_cli_tools.k8s — run any Typer command in an ephemeral pod

The @k8s_support decorator injects three flags into a Typer command — --k8s, --k8s-environment {dev|prod}, --k8s-from-local-sources — and dispatches the call into a freshly-spawned Kubernetes pod when --k8s is set.

It is meant for CLIs that need to run inside the same network as their target infrastructure (private-link databases, VPC-only APIs, …) without rewriting the command for kubectl run.

Usage with build_k8s_support (recommended)

Most projects share the same K8sConfig across every decorated command — declare it once and reuse the bound decorator everywhere:

from pathlib import Path

from typer import Typer

from pysae_cli_tools.k8s import K8sConfig, build_k8s_support

K8S_CONFIG = K8sConfig(
    default_image="<registry>/<project>:latest",
    project_root=Path(__file__).resolve().parents[1],
    copy_paths=("my_pkg", "pyproject.toml", "poetry.lock"),
    install_script=(
        "apt-get update -qq && pip install poetry && "
        "poetry config virtualenvs.create false && "
        "poetry install --only main --no-interaction"
    ),
    forwarded_envvars=("MY_API_KEY", "MY_DB_URI"),
    redacted_options=("--api-key", "--password"),
)

k8s_support = build_k8s_support(K8S_CONFIG)
app = Typer()


@app.command()
@k8s_support()
def my_command() -> None:
    ...


@app.command()
@k8s_support(pod_name_prefix="my-second-command")  # override per-command
def my_second_command() -> None:
    ...

Usage with the explicit form

When you want to use a different config per command, pass it directly:

from pysae_cli_tools.k8s import K8sConfig, k8s_support

@app.command()
@k8s_support(config=K8S_CONFIG)
def my_command() -> None:
    ...

What happens at runtime

When --k8s is set on the command line, the decorator:

  1. Spawns an ephemeral pod using K8sConfig.default_image (or the Dockerfile base image when --k8s-from-local-sources is also set).
  2. Forwards every envvar listed in K8sConfig.forwarded_envvars from your local shell into the pod's env block.
  3. Runs python -m <your.cli.module> <subcommand> <filtered argv> inside the pod, with values matching K8sConfig.redacted_options masked in the [K8S] Running: log line.
  4. Streams stdout/stderr back to your terminal and deletes the pod on exit.

See pysae_cli_tools/k8s/config.py for the complete K8sConfig reference.

Development

poetry install
poetry run pre-commit install
poetry run pytest

CI publishes a new version to PyPI on every push to main — see .gitlab-ci.yml. The version is computed from git describe via pysae_cli_tools.compute_version.

Project details


Download files

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

Source Distribution

pysae_cli_tools-0.1.3.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

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

pysae_cli_tools-0.1.3-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file pysae_cli_tools-0.1.3.tar.gz.

File metadata

  • Download URL: pysae_cli_tools-0.1.3.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.4 CPython/3.12.13 Linux/6.12.80-106.156.amzn2023.x86_64

File hashes

Hashes for pysae_cli_tools-0.1.3.tar.gz
Algorithm Hash digest
SHA256 0ed8e4beccd65ed9edbff2855f28f8c9441813948a01b67f9e932ea36df6f0c5
MD5 84a8c98e4794452fcf3c8e1e51492d3b
BLAKE2b-256 9d61b418c735a8fb8e3e4ff0f79d2f85fb5d9becde557caee5ca1c640ba25b03

See more details on using hashes here.

File details

Details for the file pysae_cli_tools-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: pysae_cli_tools-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.4 CPython/3.12.13 Linux/6.12.80-106.156.amzn2023.x86_64

File hashes

Hashes for pysae_cli_tools-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 56cb1d04eab2c4c3b356d428f3048e2d5a6b03b59d7a79b3550a5f43e27bad20
MD5 305e66bb48257e2d71b2006a1b5fb95a
BLAKE2b-256 0c786fa380fba6964558a810ece8e777e163a5919dde8e8d9b732802eead40d4

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