Skip to content

!lyrics está roto: lyricsgenius 3.x no acepta el argumento quiet #37

Description

@Isma-L154

!lyrics no funciona, y no ha funcionado nunca con la versión de lyricsgenius
que fija requirements.txt. Sale en producción cada vez que alguien lo usa:

Sep 12 04:47:36 ilserver4 python[619317]: WARNING loopify.lyrics:
  Genius lookup failed for 'KAROL G, Judeline, rusowsky - BbY WOW (Visualizer)':
  Genius.__init__() got an unexpected keyword argument 'quiet'

La causa

services/lyrics_api.py construye el cliente así:

genius = lyricsgenius.Genius(GENIUS_TOKEN, quiet=True, skip_non_songs=True)

Pero lyricsgenius==3.12.2 no tiene quiet. Su constructor acepta:

access_token, response_format, timeout, sleep_time, remove_section_headers,
skip_non_songs, excluded_terms, replace_default_terms, retries, user_agent,
proxy, per_page

quiet era de la serie 2.x. Tampoco existe verbose: la 3.x simplemente no
imprime, así que no hay nada que silenciar — el argumento sobra, no hay que
sustituirlo.

El TypeError se produce al construir el cliente, así que se lleva por delante
toda consulta. El comando responde "Couldn't find lyrics for ...", que hace
pensar en un fallo de búsqueda y no en uno de configuración.

Por qué no se había visto

Hasta el #32, el módulo hacía print(f"[Lyrics] Error: {e}"), sin nivel ni
nombre de logger. Cambiarlo a logging.warning es lo que lo puso a la vista en
journalctl. El bug es anterior; lo nuevo es poder verlo.

Arreglo propuesto

  1. Quitar quiet y pasar remove_section_headers=False al constructor, en vez
    de asignarlo después.
  2. Pasar timeout, que sí existe. Hoy no se pasa ninguno, así que una
    consulta a Genius puede bloquear un hilo del executor indefinidamente — y un
    hilo del executor colgado retrasa el cierre del loop al apagar (relacionado
    con lo visto en Un reinicio tras reproducir música agota TimeoutStopSec y dispara una alerta falsa #35).
  3. Salir pronto si no hay GENIUS_TOKEN, en vez de construir un cliente
    inservible. config.validate() ya avisa al arrancar.
  4. Un test que construya el cliente de verdad contra la lyricsgenius
    instalada. Los tests actuales no tocan este módulo, que es exactamente por lo
    que un TypeError en el constructor pudo vivir aquí sin que nadie se enterase.

Cómo probarlo

pytest tests/test_lyrics_api.py

Y en Discord, con GENIUS_TOKEN puesto:

!lyrics Bohemian Rhapsody - Queen     -> debe devolver la letra
!lyrics asdkjhaskdjh                  -> "Couldn't find lyrics", sin traza
!lyrics            (con algo sonando) -> usa el título de la pista actual

En journalctl no debe quedar ningún Genius lookup failed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions