PyAr / CDPedia

CDPedia is a project to make the Wikipedia accesable offline
34 stars 15 forks source link

Improve logging of index creation in debug mode #325

Closed fzuccolo closed 3 years ago

fzuccolo commented 3 years ago

Current output in debug mode:

Tokens |##############################  | 658/6802020-11-04 10:44:43,273  src.armado.sqlite_index DEBUG    Word: inteligencia <Docset: len=1 {573: 1}>
Tokens |############################### | 659/6802020-11-04 10:44:43,274  src.armado.sqlite_index DEBUG    Word: artificial <Docset: len=1 {573: 2}>

I think debug output should be in its own line (for consistency). A simple but inelegant solution is to add a print() before:

https://github.com/PyAr/CDPedia/blob/cc55377fd11808df7b58f539cabae6ee33042ce1/src/armado/sqlite_index.py#L509

2020-11-04 10:44:45,107  src.armado.sqlite_index DEBUG    Word: inteligencia <Docset: len=1 {573: 1}>
Tokens |##############################  | 658/680
2020-11-04 10:44:45,108  src.armado.sqlite_index DEBUG    Word: artificial <Docset: len=1 {573: 2}>
Tokens |############################### | 659/680
y-martinez commented 3 years ago

Hola de nuevo @fzuccolo me interesa participar en ese issue pero podrías por favor explicarme un poco en español? es que no se si fue por el inglés pero no entendí muy bien

fzuccolo commented 3 years ago

@y-martinez Por supuesto!

La generación de CDPedia, por ej. mediante el comando python cdpetron.py --test-mode ../dump es -v, produce un log con mucha info en la terminal. Las líneas a las que refiere el issue aparecen hacia el final, durante la construcción del índice (siempre que se use -v o --verbose en el comando).

Lo que sucede es que la barra que indica el progresso de dicha operación Tokens |##################### | 546/796 se mezcla con cada línea del output y esto dificulta la legibilidad. Idealmente, dicha barra debería ir "desplazándose hacia abajo" a medida que se van imprimiendo nuevas líneas.

y-martinez commented 3 years ago

Ahh ok ya entendí, si ya vi cual es el problema lo acabo de generar usando el -v y noté lo que dices, bueno si me gustaría trabajar en el issue. Efectivamente una solución sería usar un print() pero no es lo ideal, buscaré otra opción pero igualmente la pregunta es, ¿Habría algún problema de que la solución sea con ese approach del print?

fzuccolo commented 3 years ago

Al utilizar el print, la barra se imprime debajo de cada línea, lo cual también quita legibilidad. Debería haber alguna manera de que la barra "se desplace" sin duplicarse, algo así:

2020-11-04 10:44:45,107  src.armado.sqlite_index DEBUG    Word: inteligencia <Docset: len=1 {573: 1}>
Tokens |##############################  | 658/680
2020-11-04 10:44:45,107  src.armado.sqlite_index DEBUG    Word: inteligencia <Docset: len=1 {573: 1}>
2020-11-04 10:44:45,108  src.armado.sqlite_index DEBUG    Word: artificial <Docset: len=1 {573: 2}>
Tokens |############################### | 659/680
2020-11-04 10:44:45,107  src.armado.sqlite_index DEBUG    Word: inteligencia <Docset: len=1 {573: 1}>
2020-11-04 10:44:45,108  src.armado.sqlite_index DEBUG    Word: artificial <Docset: len=1 {573: 2}>
2020-11-04 10:44:45,109  src.armado.sqlite_index DEBUG    Word: sarasa <Docset: len=1 {573: 3}>
Tokens |############################### | 660/680

Issue asignado, no dudes en consultar!

y-martinez commented 3 years ago

Si lo pude notar ayer, de acuerdo a la investigación que he hecho la librería progress tiene ese defecto, estoy probando otras opciones con diferentes librerías

https://towardsdatascience.com/a-complete-guide-to-using-progress-bars-in-python-aa7f4130cda8

fzuccolo commented 3 years ago

@NicolasSandoval me comentó que esto se puede solucionar agregando un \r al final de la status bar. Esto mueve el cursor al inicio de línea, y el output del logger debería sobrescribirla.

La clase Bar de la librería progress que estamos usando acepta parametros opcionales: https://github.com/verigak/progress/blob/ca6310204e397999ac61ad69f8fba6a7fc775069/progress/bar.py#L25

Una opción sería probar si agregando el parámetro suffix='%(index)d/%(max)d\r' al inicializar la clase soluciona el inconveniente.

y-martinez commented 3 years ago

Ok funciona usando solo el retorno de linea, yo había probado era usando la combinación usual de \r\n pero solamente con el retorno efectivamente funciona. Gracias por la ayuda @fzuccolo y @NicolasSandoval en unos momentos subo el PR