[HELP] BUG BOUNTY per il fatidico errore "terminalwriter" :-)

andrea.sterbini (172300 points)
510 927 1776
asked Dec 7, 2021 in HW6 by andrea.sterbini (172,300 points)
closed Dec 7, 2021 by andrea.sterbini
Non mi è ancora riuscito di trovare (per impegni e HW vari da inventare e testare) come risolvere ed eliminare l'errore di import della libreria py._io.terminalwriter che nasce quando pytest uccide il test per via del timeout e (credo) vuol stampare il messaggio d'errore a colori. Ho disattivato i colori ma sulla VM l'eccezione viene lanciata lo stesso.
Naturalmente sul mio laptop l'errore non capita, mentre sulla VM sì, per cui non mi è ovvio indagare (che dovrei stoppare i test automatici).
La soluzione semplice di: 1) fare il preload di terminalwriter per evitare errori di import delle librerie da lei importate, 2) aggiungere terminalwriter come libreria "permessa" non è elegante
Per riprodurre l'errore immagino che basti abbassare molto il timeout.
Se qualcuno trova come risolvere con una soluzione a mio giudizio carina gli do 1 punto in più di bonus
344 views
closed with note: sembra risolto

1 Answer

Memoli (1840 points)
0 0 14
answered Dec 7, 2021 by Memoli (1,840 points)
edited Dec 7, 2021 by Memoli

Provo a farmi avanti io.

Inizierei dal considerare questo: dalla documentazione ufficiale di TerminalWriter, sembra avere molto poco a che fare con i colori (cosa tra l'altro indicata anche dal fatto che l'output di pytest, se con flag --color no, non è mai a colori, viceversa con il flag --color yes è a colori sia nel caso di fallimenti sia nel caso di test superati, quindi l'errore dovrebbe verificarsi sempre), sembra piuttosto un modulo di "impaginazione", che regola le tabulazioni e le "cornicette" ascii in base alla larghezza della console.

Credo che Pytest ricorra a TerminalWriter nel momento in cui deve mostrare lo stack trace di tutte le funzioni che falliscono, quindi ciò che si verifica in caso di timeout, ad esempio.

Può provare ad eseguire i test con pytest -v -rA --tb=native test_01.py per provare a vedere se non viene invocato TerminalWriter?

Aggiungo che sto andando completamente alla cieca perché non ho molti dettagli con cui lavorare, penso che sia possibile che TerminalWriter sia invocato quando per qualche motivo Pytest non riesce a determinare autonomamente la dimensione della console, potrebbe darci qualche informazione in più? Darci indicazioni sul sistema operativo in esecuzione, shell, emulatore di terminale, cosa riporta il flag $TERM nella shell... potrebbe essere determinante per capire cosa non va.

andrea.sterbini (172300 points)
510 927 1776
commented Dec 7, 2021 by andrea.sterbini (172,300 points)
--tb=native funziona ma non precede l'errore con 'E' e rende più difficile trovare il problema

Un tuo collega invece mi ha fatto notare che la versione di pytest-timeout poteva essere anziana, l'ho aggiornato e sembra che l'errore sia scomparso.

Bravi entrambi (1 punto a testa)
andrea.sterbini (172300 points)
510 927 1776
commented Dec 18, 2021 by andrea.sterbini (172,300 points)
E niente, non era la versione di pytest-timeout.

Ho risolto facendo il preload di 3 librerie e accettandole nel test sugli import.

Brutto ma funziona.