Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

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

andrea.sterbini (207940 points)
754 1269 2377
in HW6 by (208k points)
closed by
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
474 views
closed with the note: sembra risolto

1 Answer

Memoli (2410 points)
0 0 19
by (2.4k points)
edited by

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 (207940 points)
754 1269 2377
by (208k 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 (207940 points)
754 1269 2377
by (208k 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.