#!/bin/bash # pip_info v2.0 — Luis GuLo Edition mostrar_ayuda() { echo "═══════════════════════════════════════════════════════════════════════" echo "Uso: $0 [--all] [--json]" echo "" echo "Opciones:" echo " --all Mostrar TODAS las versiones (incluye pre-release)" echo " --json Salida en JSON puro" echo "" echo "Por defecto muestra las 10 últimas versiones estables." echo "═══════════════════════════════════════════════════════════════════════" } # ---------------------- # Validación de argumentos # ---------------------- if [[ "$1" == "--help" || "$1" == "-h" ]]; then mostrar_ayuda exit 0 fi if [ -z "$1" ]; then echo "❌ Error: Debe indicar el nombre del paquete." mostrar_ayuda exit 1 fi PAQUETE="$1" FLAG_ALL="$2" FLAG_JSON="$3" URL="https://pypi.org/pypi/$PAQUETE/json" RESPUESTA=$(curl -s "$URL") # ---------------------- # Validación del JSON # ---------------------- if ! echo "$RESPUESTA" | jq empty 2>/dev/null; then echo "❌ PyPI devolvió una respuesta no válida (¿paquete inexistente?)." exit 1 fi if ! echo "$RESPUESTA" | jq -e '.info.name' >/dev/null; then echo "❌ No se encontró información para '$PAQUETE'" exit 1 fi # Salida JSON pura if [[ "$FLAG_ALL" == "--json" || "$FLAG_JSON" == "--json" ]]; then echo "$RESPUESTA" exit 0 fi # ---------------------- # Obtener campos principales # ---------------------- NOMBRE=$(echo "$RESPUESTA" | jq -r '.info.name') VERSION=$(echo "$RESPUESTA" | jq -r '.info.version') DESCRIPCION=$(echo "$RESPUESTA" | jq -r '.info.summary') echo "📦 Paquete: $NOMBRE" echo "🔢 Última versión: $VERSION" echo "📝 Descripción: $DESCRIPCION" echo # ---------------------- # Funciones para listar versiones # ---------------------- mostrar_estables() { echo "📚 Últimas 10 versiones ESTABLES:" echo echo "$RESPUESTA" \ | jq -r '.releases | keys[]' \ | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' \ | sort -V -r \ | head -n 10 \ | while read v; do PY=$(echo "$RESPUESTA" | jq -r ".releases[\"$v\"][0].requires_python // \"N/A\"") printf " %-15s (Python %s)\n" "$v" "$PY" done } mostrar_todas() { echo "📚 Todas las versiones:" echo echo "$RESPUESTA" \ | jq -r '.releases | keys[]' \ | sort -V -r \ | while read v; do PY=$(echo "$RESPUESTA" | jq -r ".releases[\"$v\"][0].requires_python // \"N/A\"") printf " %-15s (Python %s)\n" "$v" "$PY" done } # ---------------------- # Selección del modo # ---------------------- if [[ "$FLAG_ALL" == "--all" ]]; then mostrar_todas else mostrar_estables fi