108 lines
2.8 KiB
Bash
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
|