Una experiencia en PythonBugDay

Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.

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:

    <li>Bajar la última versión del código fuente</li>
    
    <li>Compilar</li>
    
    <li>Correr los tests para ver que todo ande bien</li>
    
    <li> Encontrar el bug y arreglarlo</li>
    
    <li>Correr los tests nuevamente</li>
    
    <li>Arreglar los tests que fallan</li>
    
    <li>Agregar tests que prueben el arreglo</li>
    
    <li>Correr los tests nuevamente</li>
    
    <li>Armar un parche</li>
    
    <li>Envair el parche</li>
    

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. Voilá! Muchas gracias Comunidad de Python por organizar este Python Bug Day.

Comentarios

Comments powered by Disqus