Gibt es eine Möglichkeit, die Abwertung von Funktionen gegen die Django-Version zu überprüfen?

8

Da einige Funktionen mit neuen Versionen von Django veraltet sind, gibt es eine Möglichkeit, dies auf einem vorhandenen Projektcode zu überprüfen, z. B. auf github.

Könnte ein Tool das machen? Gibt es eine Möglichkeit, dies durch Testfälle zu erkennen?

Wäre es möglich, dasselbe gegen eine Python-Version zu tun?

Ich denke, ein Weg könnte sein, eine bestimmte Version von django / python mit tox zu durchlaufen und dann nach Fehlern zu suchen.

Ich suche nur etwas eleganteres oder direkteres, etwas wie das sagt - "Beachten Sie, dass diese Funktion veraltet ist" , etwas, das in stark typisiertem Text ausgeführt werden kann Sprache wie Java.

Wenn man ein solches Werkzeug bauen wollte, könnte das, wenn möglich, der Ausgangspunkt dafür sein.

    
jethar 22.04.2014, 11:27
quelle

2 Antworten

2

So habe ich ein Projekt von mir gegen Django 1.6, 1.7 und 1.8 mit Deprecation-Warnungen gestartet:

%Vor%

Das Argument -Wmodule bewirkt, dass Python jede Verwarnungswarnung beim ersten Auftreten in einem Modul ausgibt, was für mich gut genug war. Ich war in der Lage, mit Instanzen umzugehen, in denen ich from django.core.cache import get_cache verwendet habe, was in Django 1.9 verschwunden sein wird.

In Fällen, in denen -Wmodule zu viel ausgibt, möchten Sie möglicherweise selektiver sein. In der Python-Dokumentation finden Sie Informationen zur Verwendung dieses Arguments . Ich habe absichtlich nicht -Werror verwendet, weil dies nicht nur dazu führen würde, dass die einzelnen Tests fehlschlagen, sondern dass meine Testsuite den Test any nicht ausführen kann, da die Suite veraltete Features verwendet .

    
Louis 30.04.2015 18:11
quelle
2

Ich denke, das müsste in den Komponententests für Ihr Projekt sein.

Wenn Ihre Tests Code ausführen, der in einer zukünftigen Version von Django veraltet sein wird, erhalten Sie Warnungen . Wenn Sie zu einer Version von Django gesprungen sind, bei der das Feature bereits veraltet ist, erhalten Sie natürlich Ausnahmen und fehlgeschlagene Tests.

Sie können dem Python-Interpreter mitteilen , Warnungen an Ausnahmen zu übermitteln, die dazu führen würden Tests fehlgeschlagen.

Anweisungen hier , um den gleichen Trick auf das beliebte nosetests Testrahmen.

Wenn Sie bereits wissen (aus Django-Dokumenten), dass sich der Code, den Sie schreiben, ändern muss, abhängig von der Django-Version (z. B. wenn Sie eine wiederverwendbare Django-App verteilen), würde ich eine Form von Feature-Erkennung mit try ... except

Hier wollte ich zum Beispiel das neue% co_de bedingt verwenden % Feature von Django & gt; = 1.6:.

Wie Sie erwartet haben, führe ich dann die Tests gegen verschiedene Versionen von Django mit der Hilfe durch von Tox .

    
Anentropic 22.04.2014 12:32
quelle