pip_busqueda/pip_info-turbo
2026-02-23 13:05:16 +01:00

108 lines
2.8 KiB
Bash

#!/bin/bash
# pip_info v2.0 — Luis GuLo Edition
mostrar_ayuda() {
echo "═══════════════════════════════════════════════════════════════════════"
echo "Uso: $0 <paquete> [--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