PypiVersionAPI.get_latest_date() crashes when a PyPI release entry is missing upload_time_iso_8601
Los mantenedores suelen responder en 1 día
@RuchitAgrawal ya está trabajando en esto.
Desde el 27/3/2026.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 58/100
Línea de trabajo
En packagedb/package_managers.py, inspecciona PypiVersionAPI.get_latest_date() y cómo gestiona cada entrada de descarga. Usa los ejemplos proporcionados para comprobar las entradas con y sin upload_time_iso_8601 y, después, verifica que las marcas de tiempo válidas sigan comparándose. Se considera completado cuando se omiten las marcas de tiempo ausentes o no utilizables, se devuelve la fecha válida más reciente y se devuelve None cuando no existe ninguna marca de tiempo utilizable.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
While reviewing packagedb/package_managers.py, I noticed a bug in PypiVersionAPI.get_latest_date().
The function currently assumes that every download entry in a PyPI release contains upload_time_iso_8601. If one of the entries is missing that field, current_date is never assigned, but it is still used later in the loop. That can raise an UnboundLocalError instead of simply skipping the invalid entry.
Current code:
latest_date = None
for download in downloads:
upload_time = download.get("upload_time_iso_8601")
if upload_time:
current_date = dateparser.parse(upload_time)
if not latest_date:
latest_date = current_date
else:
if current_date > latest_date:
latest_date = current_date
return latest_date
A minimal example that can trigger this is:
downloads = [
{},
{"upload_time_iso_8601": "2010-12-23T05:14:23.509436Z"},
]
In this case, the function should ignore the first item and return the parsed date from the second one, but it can fail on the first item because current_date is undefined.
Expected behavior:
skip entries that do not have upload_time_iso_8601
continue processing the remaining valid entries
return the latest valid date
return None if none of the entries contain a usable timestamp
A simple fix would be to initialize current_date = None inside the loop and continue when upload_time_iso_8601 is missing.
Reference:
PyPI JSON API documentation
- Lenguaje dominante
- HTML
- Estrellas
- 70
- Forks
- 74
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 7
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de aboutcode-org/purldb
-
purlcli failsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
aboutcode-org/purldb#891 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Incorrect set comparison between package names and PURLs in NPM sync logicPosiblemente ocupada @MuhammadBilal64 la tomó hace 26 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
aboutcode-org/purldb#890 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
PypiVersionAPI.get_latest_date() crashes when a release entry is missing upload_time_iso_8601Posiblemente ocupada @drawliin la tomó hace 209 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
aboutcode-org/purldb#863 ·
Los mantenedores suelen responder en 1 día
-
Add doctest and tests for clearcode coordinate helpersPosiblemente ocupada @drawliin la tomó hace 217 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
aboutcode-org/purldb#861 ·
Los mantenedores suelen responder en 1 día
-
Preserve version ordering in packagedb VersionResponsePosiblemente ocupada @drawliin la tomó hace 218 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
aboutcode-org/purldb#857 ·
Los mantenedores suelen responder en 1 día
Todos los issues de aboutcode-org/purldb
Issues similares
-
repo:cms
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
craftcms/cms#20235 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
breaking change bug needs human review not ready priority medium size S
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
martin-francois/symphony-trello#1193 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
loopbackio/loopback-next#11878 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Dao-AILab/flash-attention#3097 ·
Los mantenedores suelen responder en 3 días
-
bug 🐛
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
comunica/comunica#1925 · 1 comentario ·
Los mantenedores suelen responder en 1 día