2013-05-05 12 views
8

dopo l'aggiornamento da Django Django 1,3 a 1,5 ho iniziato a vedere questi DeprecationWarnings durante l'esecuzione del test:warning di deprecazione Verbose in Django

path_to_virtualenv/lib/python2.6/site-packages/django/http/richiesta .py: 193: DeprecationWarning: HttpRequest.raw_post_data è stato dichiarato obsoleto. Utilizzare invece HttpRequest.body.

Ho cercato all'interno del progetto per raw_post_data e non ho trovato nulla. Quindi non è stato usato direttamente nel progetto. Poi, ho andato manualmente tramite INSTALLED_APPS e ha scoperto che il modulo raven usa ancora raw_post_data ed era la causa, ma ..

E 'possibile vedere la causa del DeprecationWarning durante l'esecuzione del test? Come rendere questi messaggi più dettagliati?

+0

Puoi mostrare come si effettua la richiesta? Ci deve essere qualcosa che accede alla proprietà 'raw_post_data' anche se non dovrebbe. –

+0

È semplicemente 'self.client.get (url, params)'. Sono abbastanza sicuro che non sia rilevante, perché faccio tali richieste in molti metodi di test, ma solo questo fa apparire l'avviso. Quindi immagino che questo sia dovuto al fatto che qualcosa viene importato in 'libs' che causa l'avvertimento. Grazie lo stesso. – alecxe

+1

Capisco. Stai importando qualcosa in 'libs' relativo a Django o richieste/viste? In Django 1.5 la proprietà 'raw_post_data' non è accessibile ma qualcosa potrebbe analizzare la richiesta iterando su tutte le proprietà. Forse 'mock'? O qualcosa in 'libs'? –

risposta

4

Questo è preso da a similar question.

È possibile utilizzare i moduli di avviso per generare un errore per DeprecationWarning.

temporaneamente aggiungere il seguente frammento in cima del urls.py progetto:

import warnings 
warnings.simplefilter('error', DeprecationWarning) 

Il DeprecationWarning sarà ora generare un errore, quindi se debug=True si otterrà il giallo pagina di errore Django familiarità con la piena traceback.

+1

Sì, ho visto questo, ma, sfortunatamente, non funziona - quando aggiungo questo a 'urls.py' o' settings.py' non vedo alcun avviso durante l'esecuzione del test. Cercherò di capire perché e accetto la risposta se funziona. Grazie per la partecipazione. – alecxe

+0

buona fortuna con esso – SunnySydeUp

+0

Prova ad aggiungerlo al tuo manage.py? –

20

È possibile impostare Python warning control opzione riga di comando -W da a sollevare un'eccezione con un traceback su DeprecationWarning come per gli errori invece di avvertimento semplice normale una volta. Qualsiasi avviso specifico può essere filtrato da messaggio, categoria, modulo, linea o da una combinazione di essi.

Esempi:

python -W error:"raw_post_data has been deprecated" manage.py test 

python -W error::DeprecationWarning manage.py test 

python -W error:::django.http.request manage.py test 

Una multa di filtraggio è utile se si vuole risolvere tutti gli avvisi di un tipo insieme da batch editing in molti file di un grande progetto.


Python 2.7 e superiori ignora DeprecationWarning solito se non sono reanabled, ad esempio per l'opzione -Wd o dalla variabile di ambiente export PYTHONWARNINGS="d". Questo può essere utile su macchine di sviluppo ma non sulla produzione.