Una experiencia en PythonBugDay

Hoy se llevó a cabo el octavo Python Bug Day. Sabía que era en estos días pero no lo tenía presente ni se me había ocurrido participar. Al mediodía Facundo Batista me lo recuerda por chat y me pregunto… ¿Por qué no? Puedo probar unas horas, ver que pasa, nunca compilé Python tal vez tenga que hacerlo para probar una solución.

Me dieron una lista de bugs fáciles. Y elejí este: 1779. El bug en particular podría haber sido resuelto en pocos minutos por un desaarrollador de Python. Es más, el mismo había sido reportado por el creador del lenguaje :D Pero como bien dice en uno de los comentarios, es un buen bug para el Python Bug Day. A un experto, resolverlo no le habría costado nada, pero tampoco le habría aportado nada. A un novato como a mi me sirvió para conocer algo del nucleo del lenguaje y el proceso que hay que seguir para resolver un bug:

  1. Bajar la última versión del código fuente
  2. Compilar
  3. Correr los tests para ver que todo ande bien
  4. Encontrar el bug y arreglarlo
  5. Correr los tests nuevamente
  6. Arreglar los tests que fallan
  7. Agregar tests que prueben el arreglo
  8. Correr los tests nuevamente
  9. Armar un parche
  10. Envair el parche

El bug, que continuará en las versiones previas de Python pero ya está corregido en Python 3000, es el siguiente:

>>> int("- 1")
-1
>>> float("- 1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): - 1

Cuando se quiere crear un número a partir de un string, no pueden haber espacios en blanco entre el signo (+ o -) y el número. El comportamiento correcto es el de la función float. El de int es errorneo. Necesita ser arreglado.

Obtener el código fuente

Bajé del servidor svn la última versión de Python 3000, la nueva versión del lenguaje, para el cual el bug estaba abierto:

svn co http://svn.python.org/projects/python/branches/py3k/

(Esto llevó bastante tiempo. Mientras tanto cociné y almorcé.)

Compilar

cd py3k/

./configure && make

Correr el intérprete compilado

./python

Correr los tests

make test

o

./python Lib/test/regrtest.py

Arreglar el bug

En los comentarios sel bug se decía que era simple de resolver y que no consistía más que en comentar 2 líneas en un archivo en C.

Revisé el archivo Objects/longobject.c y luego de entender como funcionaba la función PyLong_FromString(char *str, char **pend, int base), comenté las líneas 1688 y 1689. Problema resuelto!

Compilé para que mis cambios se vean reflejados.

make

Y probé en el intérprete.

>>> int("- 1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '- 1'

Perfecto!

Luego corrí las pruebas afectadas por mi cambio y fallaron.

./python Lib/test/test_builtin.py

La función en particular era test_int(self). Luego de una mirada rápida, comenté los valores de una lista que hacían fallar la prueba y pensé que con eso era suficiente. Consulté y me dijeron que también agregue mi cambio en Misc/NEWS. Lo hice. Lo siguiente era generar el parche.

svn diff | tee bug_fix_for_1779.diff

El mismo está en http://bugs.python.org/file9220.

Luego lo vio Facundo y me dijo que tenía que tenía que agregar pruebas para mi parche. Me llevó bastante tiempo entender como funcionaba la prueba. Finalmente, luego de preguntar bastante conseguí el resultado deseado. Volví a generar un parche y a subirlo.

svn diff | tee bug_fix_for_1779-plustests.diff

http://bugs.python.org/file9228

La experiencia

La verdad es que la experiencia fue muy buena. En unas 5 horas aprendí mucho sobre Python en si y sobre su ciclo de desarrollo, interactué con una comunidad despuesta a darte una mano cuando la necesitás y arreglé un error en el lenguaje que más uso. Boilá! Muchas gracias Comunidad de Python por organizar este Python Bug Day.


1 voto (Votá! esta funcionalidad es nueva en mi blog.)

3 Responses to “Una experiencia en PythonBugDay”

  1. César says:

    Felicitaciones Juanjo!
    Anda preparando una charla sobre esto, ahora que tienes calentita la experiencia ;-)

  2. Milton Pividori says:

    Genial Juanjo!

  3. Lucas says:

    Muy buena experiencia realmente, poder involucrarte en un proyecto tan importante y que la comunidad de desarrolladores te ayude a empezar.

Dejar una respuesta

Line and paragraph breaks automatic.
XHTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>